Traduire formules en VBA

cs_JPh007 Messages postés 37 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 17 juillet 2012 - 4 oct. 2008 à 19:46
cs_g12345 Messages postés 1 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 17 octobre 2008 - 17 oct. 2008 à 07:57
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

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 oct. 2008 à 22:13
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
0
cs_JPh007 Messages postés 37 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 17 juillet 2012
6 oct. 2008 à 18:14
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...
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
6 oct. 2008 à 19:55
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));""""))"
0
cs_JPh007 Messages postés 37 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 17 juillet 2012
6 oct. 2008 à 21:38
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...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JPh007 Messages postés 37 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 17 juillet 2012
9 oct. 2008 à 20:43
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 ...
0
cs_g12345 Messages postés 1 Date d'inscription lundi 3 juillet 2006 Statut Membre Dernière intervention 17 octobre 2008
17 oct. 2008 à 07:57
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
0
Rejoignez-nous