Traduire formules en VBA

Signaler
Messages postés
39
Date d'inscription
mardi 12 août 2008
Statut
Membre
Dernière intervention
17 juillet 2012
-
Messages postés
1
Date d'inscription
lundi 3 juillet 2006
Statut
Membre
Dernière intervention
17 octobre 2008
-
Bonjour,

J'ai une formule que je reproduis sur les cellules d'une feuille excel me permettant de désigner une liste automatique de destinataires apparaissant sur une feuille de résultat.

Seulement voilà je permet à l'utilisateur dans un userform de modifier ponctuellement tel ou tel destinataire...

C'est donc la raison pour laquelle j'aurais besoin de créer une macro vba me permettant de retranscrire à l'ouverture du fichier les formules excel.

Range("A60:D60").FormulaLocal = "=SI((NB.SI(B1;"*LEGIONELLES*")=1);INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV("LEGIONELLES";'FORMULAIRES DESTINATAIRES'!A3:A501;0));SI(B2>"";INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES DESTINATAIRES'!A3:A501;0));""))"

Range("A61:D61").FormulaLocal =
"=SI((NB.SI(B1;"*LEGIONELLES*")=1);INDEX('FORMULAIRES
DESTINATAIRES'!C3:C501;EQUIV("LEGIONELLES";'FORMULAIRES
DESTINATAIRES'!A3:A501;0));SI(B2>"";INDEX('FORMULAIRES
DESTINATAIRES'!C3:C501;EQUIV(B2;'FORMULAIRES
DESTINATAIRES'!A3:A501;0));""))"

etc...

Bref pas moyen de faire fonctionner cela, j'essuie un message du genre: Erreur de synthaxe, alors que pourtant la formule est correctement interprétée par excel lui même.

Merci pour votre aide ... 

6 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

le formulalocal doit etre utilise avec une formule en verion native d' excel c'est a dire avec les fonctions en anglais. Et c'est excel lui meme qui fera la traduction vers le langage local.

pour utiliser une formule directement en francais tu dois utiliser formula. Un exemple :

Range("A60:D60").Formula =
"=SI((NB.SI(B1;"*LEGIONELLES*")=1);INDEX('FORMULAIRES
DESTINATAIRES'!B3:B501;EQUIV("LEGIONELLES";'FORMULAIRES
DESTINATAIRES'!A3:A501;0));SI(B2>"";INDEX('FORMULAIRES
DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES
DESTINATAIRES'!A3:A501;0));""))"

Voila rien de plus a priori
Messages postés
39
Date d'inscription
mardi 12 août 2008
Statut
Membre
Dernière intervention
17 juillet 2012

ok,

mais cette fois-ci il me met un autre message:

erreur de compilation, attendu fin d'instruction
et me surligne en rouge LEGIONELLES comme ici:


 


Range("A60:D60").Formula = "=SI((NB.SI(B1;"*LEGIONELLES*")=1);INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV("LEGIONELLES";'FORMULAIRES DESTINATAIRES'!A3:A501;0));SI(B2>"";INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES DESTINATAIRES'!A3:A501;0));""))"

alors que justement LEGIONELLES    est une condition importante...
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
pour VBA to formule est ube chaine et une chaine ce definit entre double quotes. Le probleme est que tu definis une chaine dans une chaine. Pour palier a ce probleme tu dois remplacer les double quote a l'interieur de ta formule par des double double quotes !

Range("A60:D60").Formula = "=SI((NB.SI(B1;""*LEGIONELLES*"")=1);INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(""LEGIONELLES"";'FORMULAIRES DESTINATAIRES'!A3:A501;0));SI(B2>"""";INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES DESTINATAIRES'!A3:A501;0));""""))"
Messages postés
39
Date d'inscription
mardi 12 août 2008
Statut
Membre
Dernière intervention
17 juillet 2012

bon décidément excel est récalcitrant avec mon code...

j'ai bien entré le code:  Range("A60:D60").Formula = "=SI((NB.SI(B1;"" * LEGIONELLES * "")=1);INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(""LEGIONELLES"";'FORMULAIRES DESTINATAIRES'!A3:A501;0));SI(B2>"""";INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES DESTINATAIRES'!A3:A501;0));""""))"


 


et je me trouve maintenant avec un nouveau message d'erreur: 
erreur d'execution '1004'  erreur définie par l'application ou l'objet ...


 


pourtant chacun des objets des feuilles des cellules existent bel et bien...


 


peut être reprendre du départ:


 


ma cellule est une cellule fusionnée "A60:D60"
dans laquelle je veut faire incorporer par une macro VBA la formule:

SI((NB.SI(B1;" * LEGIONELLES * ")1);INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV("LEGIONELLES";'FORMULAIRES DESTINATAIRES'!A3:A501;0));SI(B2>"";INDEX('FORMULAIRES DESTINATAIRES'!B3:B501;EQUIV(B2;'FORMULAIRES DESTINATAIRES'!A3:A501;0));""))

qui je le précise fonctionne très bien sous excel (a part un petit boeg bizard que je n'explique pas, excel remplace entièrement le contenu de la cellule par le résultat de la formule, c à dire que la formule disparait de la barre de formule et je trouve à la place directement en valeur le nom du destinataire et j'ai encore rien trouvé au niveau des forums par rapport à cela...)
Messages postés
39
Date d'inscription
mardi 12 août 2008
Statut
Membre
Dernière intervention
17 juillet 2012

en language macro la formule donne ceci:

Range("A62:D62").Select
    ActiveCell.FormulaR1C1 = _
        "=(COUNTIF(R[-61]C[1],""*LEGIONELLES*"")=1) INDEX('FORMULAIRES DESTINATAIRES'!R[-59]C[3]:R[439]C[3],MATCH(""LEGIONELLES"",'FORMULAIRES DESTINATAIRES'!R[-59]C:R[439]C,0))SR[-60]C[1]>"""" 'FORMULAIRES DESTINATAIRES'!R[-59]C[3]:R[439]C[3] R[-60]C[1] "

l'enregistrement de la macro se passe correctemen, mais à la lecture de la macro enregistrée pourtant par excel rien à faire ...
Messages postés
1
Date d'inscription
lundi 3 juillet 2006
Statut
Membre
Dernière intervention
17 octobre 2008

Bonjour
Vérifiez:
Dans la feuille Excel les formules sont en Francais (=SI(...)
et en VB, la formule est en Anglais (=IF(..)
COUNTIF  = NB.SI
LEN = NBCAR..
slt