Excel: Enregistrer une macro [Résolu/Fermé]

Signaler
Messages postés
162
Date d'inscription
vendredi 4 mai 2012
Statut
Membre
Dernière intervention
28 février 2020
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
Bonjour,

J'enregistre une macro à l'aide de la fonction "Enregistré une Macro". Il s'agit d'une formule plutôt longue. La formule fonctionne, je l'ai testée plusieurs fois. Sauf que qu'une fois enregistrée, lorsque que je l'utilise via la macro elle bog. Quand je vais dans Visual Basic pour voir ce qui cloche, ma formule est répartie sur plus d'une ligne et chaque fin de ligne présente ceci: "& _

J'ai pensé que c'était normale puisque la formule est très longue. Mais si j'essaies de tout mettre sur une seule ligne, ça ne fonctionne pas.

Est-ce possible qu'une formule soit trop longue pour une Macro?

Merci,

6 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 075
bonjour,

Avec l'enregistreur de macro, ta formule est enregistrée au format natif anglais.

Tu peux utiliser formulalocal au lieu de formula et dans ce cas il te suffit de mettre la formule que tu as saisie, avec les ; au lieu des , et les fonctions françaises. Ceci t'éviterai peut-être ton souci.
Messages postés
162
Date d'inscription
vendredi 4 mai 2012
Statut
Membre
Dernière intervention
28 février 2020
45
Bonjour gbinforme,

Je ne connais pas "formulalocal". Est-ce que ça me permettrait de simplement copier ma formule directement dans Visual Basic?

Ma formule excel est la suivante:
=SI(ET(DROITE($BE2;2)<>"DG";DROITE($BE2;2)<>"GE");"-";SI(ET(DROITE($BE2;2)="DG");SI(ET(GAUCHE($BG2;2)="CA";GAUCHE($BH2;2)="CA");"Domestic";SI(ET(GAUCHE($BG2;2)="US";GAUCHE($BH2;2)="US");"Domestic";SI(ET(GAUCHE($BG2;2)="CA";DROITE($BG2;4)<"7000";GAUCHE($BH2;2)="US";DROITE($BH2;4)<"7000");"Domestic";SI(ET(GAUCHE($BG2;2)="US";DROITE($BG2;4)<"7000";GAUCHE($BH2;2)="CA";DROITE($BH2;4)<"7000");"Domestic";"FAUX"))));SI(ET(DROITE($BE2;2)="GE");SI(ET(GAUCHE($BG2;2)="CA";GAUCHE($BH2;2)="CA");"FAUX";SI(ET(GAUCHE($BG2;2)="US";GAUCHE($BH2;2)="US");"FAUX";SI(ET(GAUCHE($BG2;2)<>"CA";GAUCHE($BH2;2)<>"CA");"General";SI(ET(GAUCHE($BG2;2)<>"US";GAUCHE($BH2;2)<>"US");"General";SI(ET(GAUCHE($BG2;2)="CA";GAUCHE($BH2;2)<>"US");"General";SI(ET(GAUCHE($BG2;2)="US";GAUCHE($BH2;2)<>"CA");"General";SI(ET(GAUCHE($BG2;2)="CA";DROITE($BG2;4)<"7000";GAUCHE($BH2;2)="US";DROITE($BH2;4)<"7000");"FAUX";SI(ET(GAUCHE($BG2;2)="US";DROITE($BG2;4)<"7000";GAUCHE($BH2;2)="CA";DROITE($BH2;4)<"7000");"FAUX";"General")))))))))))

Mais pour ce à quoi elle ressemble dans Visual Basic, ça devra attendre à demain car j'ai suprimé ma Macro avec l'intention de la recommencer pour une xième fois :-( Je dois quitter le bureau maintenant.

Merci!
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 075
Bonjour BILLING,

Est-ce que ça me permettrait de simplement copier ma formule directement dans Visual Basic?

Normalement oui mais dans ton cas, cela ne va pas être possible car tu as beaucoup de guillemets qui en VBA doivent être doublés.

Il me semble que ta formule doit pouvoir être simplifiée mais sans connaitre le contexte et le résultat espéré c'est plus complexe : je regarde.
Messages postés
162
Date d'inscription
vendredi 4 mai 2012
Statut
Membre
Dernière intervention
28 février 2020
45
Bonjour gbinforme,

J'ai enregistré de nouveau ma Macro et voici comment elle apparaît dans Visual Basic:

Sub ColumnBF()
'
' ColumnBF Macro
' Add formula to cell BF2
'

'
ActiveCell.FormulaR1C1 = _
"=IF(AND(RIGHT(RC57,2)<>""DG"",RIGHT(RC57,2)<>""GE""),""-"",IF(AND(RIGHT(RC57,2)=""DG""),IF(AND(LEFT(RC59,2)=""CA"",LEFT(RC60,2)=""CA""),""Domestic"",IF(AND(LEFT(RC59,2)=""US"",LEFT(RC60,2)=""US""),""Domestic"",IF(AND(LEFT(RC59,2)=""CA"",RIGHT(RC59,4)<""7000"",LEFT(RC60,2)=""US"",RIGHT(RC60,4)<""7000""),""Domestic"",IF(AND(LEFT(RC59,2)=""US"",RIGHT(RC59,4)<""7000"",L" & _
",2)=""CA"",RIGHT(RC60,4)<""7000""),""Domestic"",""FAUX"")))),IF(AND(RIGHT(RC57,2)=""GE""),IF(AND(LEFT(RC59,2)=""CA"",LEFT(RC60,2)=""CA""),""FAUX"",IF(AND(LEFT(RC59,2)=""US"",LEFT(RC60,2)=""US""),""FAUX"",IF(AND(LEFT(RC59,2)<>""CA"",LEFT(RC60,2)<>""CA""),""General"",IF(AND(LEFT(RC59,2)<>""US"",LEFT(RC60,2)<>""US""),""General"",IF(AND(LEFT(RC59,2)=""CA"",LEFT(RC60,2)<" & _
"""General"",IF(AND(LEFT(RC59,2)=""US"",LEFT(RC60,2)<>""CA""),""General"",IF(AND(LEFT(RC59,2)=""CA"",RIGHT(RC59,4)<""7000"",LEFT(RC60,2)=""US"",RIGHT(RC60,4)<""7000""),""FAUX"",IF(AND(LEFT(RC59,2)=""US"",RIGHT(RC59,4)<""7000"",LEFT(RC60,2)=""CA"",RIGHT(RC60,4)<""7000""),""FAUX"",""General"")))))))))))"
Range("BF3").Select
End Sub

Il est possible que ma formule puisse être simplifiée. Il faudrait que je te fournisse un échantillon de mon fichier pour t'aider à comprendre ce que je veux que ma formule vérifie.

Je vais voir ce que je peux faire.

Merci pour ton aide :-)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 075
bonjour BILLING,

En simplifiant ta formule ainsi, cela fonctionne :

ActiveCell.FormulaLocal = "=SI(DROITE($BE2;2)=""DG"";SI(ET(NON(ESTERREUR(TROUVE(GAUCHE($BG2;2);""CAUS"")));OU(GAUCHE($BH2;2)=GAUCHE($BG2;2);DROITE($BG2;4)<""7000"");DROITE($BH2;4)<""7000"");""Domestic"";""FAUX"");SI(DROITE($BE2;2)=""GE"";SI(ET(NON(ESTERREUR(TROUVE(GAUCHE($BG2;2);""CAUS"")));OU(GAUCHE($BH2;2)=GAUCHE($BG2;2);DROITE($BG2;4)<""7000"");DROITE($BH2;4)<""7000"");""FAUX"";""General"");""-""))"

Il me semble que cette formule donne le même résultat que la tienne : à toi de vérifier.
Messages postés
162
Date d'inscription
vendredi 4 mai 2012
Statut
Membre
Dernière intervention
28 février 2020
45
Intéressant les expressions que tu as utilisées dans ta formule. J'en ai encore beaucoup à apprendre.

Ta formule fonctionne en partie. Il semble manquer une ou deux possibilités de combinaison.

Voici le lien pour mon fichier échantillon. J'y ai ajouté ta formule dans la colonne BF. La mienne est à côté dans la colonne BG et les résultats sont corrects. En rouge sont des exemples de résultats différents et incorrects provenant de ta formule. La combinaison des codes d'origine (colonne BH) et destination (colonne BI) commençant par CA devrait automatiquement résulter en "Domestique" (sauf si le code de la colonne BE se termine par autre chose que GE ou DG. GE signifie Général, tandis que DG signifie Domestique.

https://www.cjoint.com/?3ItuTgqWHsL

Merci encore pour ton aide :-)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 075
bonjour BILLING,

Effectivement, tu as raison il y avait une coquille dans la formule et il manquait un paramètre sur les "7000". Comme ceci la formule devrait fonctionner :

ActiveCell.FormulaLocal = "=SI(DROITE($BE2;2)=""DG"";SI(ET(NON(ESTERREUR(TROUVE(GAUCHE($BG2;2);""CAUS"")));OU(GAUCHE($BH2;2)=GAUCHE($BG2;2);ET(DROITE($BG2;4)<""7000"";DROITE($BH2;4)<""7000"";NON(ESTERREUR(TROUVE(GAUCHE($BH2;2);""CAUS""))))));""Domestic"";""FAUX"");SI(DROITE($BE2;2)=""GE"";SI(ET(NON(ESTERREUR(TROUVE(GAUCHE($BG2;2);""CAUS"")));OU(GAUCHE($BH2;2)=GAUCHE($BG2;2);ET(GAUCHE($BH2;2)<>GAUCHE($BG2;2);DROITE($BG2;4)<""7000"";DROITE($BH2;4)<""7000"";NON(ESTERREUR(TROUVE(GAUCHE($BH2;2);""CAUS""))))));""FAUX"";""General"");""-""))"
Messages postés
162
Date d'inscription
vendredi 4 mai 2012
Statut
Membre
Dernière intervention
28 février 2020
45
Bonjour gbinforme,

Merci pour ton aide. Ta formule fonctionne parfaitement.

Je vais devoir explorer le "FormulaLocal".

A+
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 075
le "FormulaLocal" n'a rien de fantastique mais il permet de saisir en VBA une formule en tenant compte des paramètres locaux : si tu es en mode anglais ta saisie se fera de la même façon que avec Formula.