Excel: Enregistrer une macro
Résolu
BILLING
Messages postés
162
Date d'inscription
Statut
Membre
Dernière intervention
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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,
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:
- Excel: Enregistrer une macro
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
6 réponses
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.
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.
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!
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!
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.
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.
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 :-)
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 :-)
bonjour BILLING,
En simplifiant ta formule ainsi, cela fonctionne :
Il me semble que cette formule donne le même résultat que la tienne : à toi de vérifier.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :-)
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 :-)
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 :
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"");""-""))"
Bonjour gbinforme,
Merci pour ton aide. Ta formule fonctionne parfaitement.
Je vais devoir explorer le "FormulaLocal".
A+
Merci pour ton aide. Ta formule fonctionne parfaitement.
Je vais devoir explorer le "FormulaLocal".
A+