[Résolu] VBA : Ecrire une méga-formule excel en VBA ...

atopsent

XLDnaute Nouveau
Bonjour,

J'utilise la formule suivante dans mes tableurs :

=INDEX(INDIRECT(T$11&"!A1:AQ"&T$12);RECHERCHEV($A23;INDIRECT(T$11&"!A:B");2;FAUX);RECHERCHEH(T$1;INDIRECT(T$11&"!1:2");2;FAUX))

Pour l'instant j'ai stocké la formule sur un onglet, et je la copie-colle via une bête égalité dans un autre onglet.

Worksheets("BDD").Range("T23").Formula = Worksheets("FX").Range("T23").Formula

Puis, je tire ma formule par un Range().Select : Selection.PasteSpecial sur le range souhaité.

***

Bon comme le range varie et que la macro va être utilisée par pas mal de personnes je voudrais limiter au max les élèments exterieur à la macro dans ce process. Le hic c'est que je n'arrive pas à stocker/écrire cette formule directement en VBA !

J'ai tenté de passer par un texte mais l'utilisation de signe comme (") pour rendre cette fichue formule dynamique me bloque totalement !!!

Mon idée est réalisable ?

Merci de votre aide à tous !!!

Antoine
 
Dernière édition:
G

Guest

Guest
Re : VBA : Ecrire une méga-formule excel en VBA ...

Bonsoir et bienvenue sur le forum,

Dans le texte suivant j'ai remplacé les 11 (numéro de ligne 11) par un '?'
et juste doubler les " qui devront apparaître dans la formule finale de la cellule

Formule="=INDEX(INDIRECT(T$?&""!A1:AQ""&T$12),VLOOKUP($A23,INDIRECT(T$?&""!A:B""),2,FALSE),HLOOKUP(T$1,INDIRECT(T$?&"!1:2"),2,FALSE))"

Tu fais pareil avec des signes différents (#, @, etc.) pour tous les éléments variables de la formule.

Ensuite:

Formule=Replace(Formule,"?",x) 'où x est une variable calculée donnant un numéro de ligne
Formule=Replace(Formule,"@",bidule) ' où bidule est un autre élément variable qui remplacera les @
Formule=Replace ....ainsi de suite
A la fin de tous les remplacements tu pourras faire:
Range("TrucChouette").Formla=Formule


A+
 

JNP

XLDnaute Barbatruc
Re : VBA : Ecrire une méga-formule excel en VBA ...

Bonsoir Atopsent et bienvenue :),
L'enregistreur de macro te donne
Code:
ActiveCell.FormulaR1C1 = _
        "=INDEX(INDIRECT(R11C[15]&""!A1:AQ""&R12C[15]),VLOOKUP(R[19]C1,INDIRECT(R11C[15]&""!A:B""),2,FALSE),HLOOKUP(R1C[15],INDIRECT(R11C[15]&""!1:2""),2,FALSE))"
d'où, pour la repasser en absolu
Code:
ActiveCell.Formula = _
        "=INDEX(INDIRECT(T$11&""!A1:AQ""&T$12),VLOOKUP($A23,INDIRECT(T$11&""!A:B""),2,FALSE),HLOOKUP(T$1,INDIRECT(T$11&""!1:2""),2,FALSE))"
devrait le faire :p...
Bonne soirée :cool:
Ajout : Re Hasco :)
 

Discussions similaires

Statistiques des forums

Discussions
314 651
Messages
2 111 553
Membres
111 199
dernier inscrit
mavoungou regis