Excel: Enregistrer une macro

Résolu/Fermé
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 - 18 sept. 2012 à 18:03
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 21 sept. 2012 à 19:08
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,

A voir également:

6 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
18 sept. 2012 à 18:32
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.
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
Modifié par BILLING le 18/09/2012 à 21:01
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!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
18 sept. 2012 à 23:04
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.
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 sept. 2012 à 16:27
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 :-)
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
19 sept. 2012 à 19:02
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.
0

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

Posez votre question
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
19 sept. 2012 à 20:55
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 :-)
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
19 sept. 2012 à 22:53
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"");""-""))"
0
BILLING Messages postés 162 Date d'inscription vendredi 4 mai 2012 Statut Membre Dernière intervention 31 mars 2021 48
21 sept. 2012 à 19:05
Bonjour gbinforme,

Merci pour ton aide. Ta formule fonctionne parfaitement.

Je vais devoir explorer le "FormulaLocal".

A+
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
21 sept. 2012 à 19:08
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.
0