web-dev-qa-db-fra.com

Obtenir la formule d'une autre cellule dans la cellule cible

Comment une cellule obtient-elle la formule d'une autre cellule sous forme de texte sans utiliser VBA? Je peux voir que cette question a déjà été posée à plusieurs reprises et la réponse est toujours d'écrire une fonction personnalisée dans VBA. 

Cependant, j'ai trouvé un post publié en 2006 qui prétendait avoir trouvé la solution non-VBA mais le lien fourni dans cet article est déjà rompu.

20
Pupper

Il y a moyen agréable de faire cela sans VBA. Il utilise des macros XL4 (ce sont des macros, mais ce n'est pas VBA, comme demandé).

En référence à la figure 1, les cellules A2: A4 contiennent des formules usuelles.

enter image description here

  1. Pour aller aux formules -> Définir le nom, j'ai défini deux plages nommées (voir fig. 2), avec les informations affichées dans les cellules A6: B8.

    enter image description here

  2. Entrez dans la cellule B2 =FormulaAsText. Cela va récupérer la formule dans la cellule A2 sous forme de texte.

    Explication: La plage nommée FormulaAsText utilise =GET.CELL(info_type,reference). Dans ce cas, ìnfo_type = 6 récupère la formule et reference = OFFSET(INDIRECT("RC",FALSE),0,-1) utilise la cellule avec 0 ligne et -1 colonne décalée par rapport à celle dans laquelle la formule est utilisée.

  3. Copier B2 et coller dans B3: B4. Cela montrera les formules en A3: A4. La cellule A4 indique que la fonction de feuille de calcul CELL récupère uniquement les valeurs, pas les formules (contrairement à GET.CELL).

  4. Puisque FormulaAsText obtient la formule d'une cellule à décalage fixe (0, -1) du courant, j'ai défini une autre plage FormulaAsText2, qui utilise un décalage (lignes, colonnes) lu dans la feuille de calcul elle-même. Les cellules D2: D4 contiennent =FormulaAsText2. Ainsi, la cellule D2 affiche le contenu de la cellule B3 (=OffSET(D2,1,-2)), qui est FormulaAsText. les cellules D3: D4 affichent le contenu d’elles-mêmes. Cela ajoute une certaine flexibilité. YMMV.

PS1: l’essence provient de http://www.mrexcel.com/forum/Excel-questions/20611-info-only-get-cell-arguments.html

PS2: Tim Williams a mentionné dans un commentaire "l'ancien XLM GET.FORMULA()". Cette réponse est probablement liée (pas la même, puisque celle-ci utilise GET.CELL()).

PS3: Une solution VBA simple est donnée, par exemple, dans http://dmcritchie.mvps.org/Excel/formula.htm


EDIT: Complémentant cette bonne réponse , la fonction de feuille de calcul FormulaText est disponible pour Excel 2013 et ultérieur.

16
sancho.s

=FormulaText(Reference) fera l'affaire Documentation

18
Excel User

Il y a un moyen de faire ça. Dans mon exemple, j'avais une table avec une date. La date vient de Sheet! G91. Dans mon tableau, j'avais également une colonne qui indiquait le nom de la feuille. J'ai ajouté deux autres colonnes à ma table. La première colonne avait la colonne (Sheet! G91), qui renvoie le nombre 7, car G est la septième lettre de l'alphabet. J'ai ensuite converti le nombre en une lettre (G) en utilisant une autre table de mon classeur. Dans la deuxième colonne que j'ai ajoutée, j'ai créé une ligne de formule (Feuille! G91), qui renvoie le nombre 91. Remarque: Ligne et Colonne peuvent apparaître sous forme de formules volatiles, qui sont recalculées à chaque calcul du classeur.

Je voulais une autre colonne pour montrer le contenu de la formule de la cellule de date mentionnée au début de ce post. J'ai inclus la fonction de chaîne suivante (vous pouvez également utiliser CONCATENATE).

"=" & AJ9 & "!" & AM9 & AN9

Les éléments séparés par des esperluettes sont enchaînés (c'est-à-dire concaténés). AJ9 dans mon exemple contient le nom de la feuille, AM9 contient la lettre de la colonne et AN9 contient le numéro de la ligne.

J'ai maintenant une colonne qui met à jour dynamiquement son contenu pour refléter le nom de la feuille et la référence de cellule. Les résultats dans ma cellule de classeur sont

= Feuille! G91.

0
edwardlm3000

Cette suggestion peut être utile pour ceux qui, après avoir récupéré un bloc de formules et les avoir transférées dans un nouveau tableur, souhaitent les remettre au travail. La fonction Excels FORMULATEXT est idéale pour la saisie de formules, mais elle les laisse comme des chaînes de texte inutilisables. Si vous voulez les récupérer sous forme de formules pleinement opérationnelles, vous devez les éditer individuellement pour supprimer le caractère de chaîne, mais voici un raccourci pour les blocs plus grands . autrement dit après avoir utilisé FORMULATEXT - vous avez copié et collé (valeur uniquement). L'étape suivante consiste à mettre en surbrillance toutes les cellules à convertir, puis à accéder à l'option de menu [Texte à colonnes] (barre {Données} sur Excel 2016). Vous pouvez sélectionner «Délimité», mais sur l'écran suivant, assurez-vous de ne pas sélectionner les marques qui apparaissent dans vos formules. Puis 'Terminer'. Excel devrait automatiquement analyser les cellules comme contenant des formules et vous devriez maintenant les faire fonctionner à nouveau.

0
RHR