Créer une seule macro à partir de 6 macros
Bonjour j'essaie de créer une macro à partir de 6 macro. Je débute tout juste et j'ai essayé la fonction call pour créer cette macro mais rien n'y fait elle ne veut pas s'exécuter.
Merci d'Avance.
Voici le fichier pour mieux comprendre. C'est la fiche 1 que j'essaie de créer en un seul bouton.
Voici les 6 macros que j'ai créer:
Sub LCL()
'
' LCL Macro
' Macro le 04/06/2015 a 10:42
'
' Touche de raccourci du clavier: Ctrl+b
'
Range("A1:A211").Select
Selection.Cut
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
End Sub
Sub b()
'
' b Macro
' m2 a 11:23
'
' Touche de raccourci du clavier: Ctrl+q
'
Selection.Cut
Sheets("Feuil1").Select
Columns("B:B").Select
ActiveSheet.Paste
End Sub
Sub d()
'
' d Macro
' m3 a 11:24
'
' Touche de raccourci du clavier: Ctrl+s
'
Selection.Cut
ActiveWindow.SmallScroll Down:=21
Sheets("Feuil1").Select
Columns("C:C").Select
ActiveSheet.Paste
End Sub
Sub e()
'
' e Macro
' m4 a 11:26
'
' Touche de raccourci du clavier: Ctrl+f
'
Columns("D:D").Select
Selection.Cut
Sheets("Feuil1").Select
Columns("D:D").Select
Range("D22").Activate
ActiveSheet.Paste
End Sub
Sub f()
'
' f Macro
' m5 a 11:27
'
' Touche de raccourci du clavier: Ctrl+g
'
Selection.Cut
Sheets("Feuil1").Select
Columns("E:E").Select
Range("E22").Activate
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-36
End Sub
Sub g()
'
' g Macro
' m6 a 11:28
'
' Touche de raccourci du clavier: Ctrl+h
'
ActiveWindow.SmallScroll Down:=-33
Columns("H:H").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=15
Sheets("Feuil1").Select
ActiveWindow.SmallScroll Down:=-15
Range("G1").Select
ActiveSheet.Paste
End Sub
Sub h()
'
' h Macro
' m6* a 11:29
'
' Touche de raccourci du clavier: Ctrl+j
'
Selection.Cut
Sheets("Feuil1").Select
ActiveWindow.SmallScroll Down:=-51
Columns("F:F").Select
Range("F115").Activate
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-114
End Sub
Et la c'est la dernière macro que j'ai essayé en regroupant les macros du dessus:
Sub final()
Call LCL
Call b
Call d
Call e
Call f
Call g
Call h
End Sub
Bonjour
Si on exécute pas à pas ta macro ‘’final’’, avec la touche F8, on s’aperçoit que les diverses macros s’exécutent successivement. Mais le problème, c’est que tu ne lui dis pas toujours sur quelle feuille les instructions doivent porter.
Elle prend toujours la feuille active. Et si tu ne lui a pas dit d’en sélectionner une autre, le résultat n’est pas celui escompté.
OK ?
Bye !
Une macro est délimitée par
Sub Nom_macroet
End SubTu peux regrouper toutes tes macros en une seule en ne conservant que le Sub XX de la première macro et le End sub de la dernière. En suppirmant donc tous les Sub et End sub intermédiaires.
J'ai essayé ta solution ouisansdoute et cela n'as pas fonctionné :/ ... Pourtant ta solution me paraît logique. Lorsque j'enlève Sub le nom des macros est signalé en rouge et un message s'affiche comme quoi ce n'est pas la bonne syntaxe.
Gmb j'ouvre une nouvelle feuille pour faire la macro final je ne comprends pas votre réponse. Si vous pouvez m'éclairer svp dans mon apprentissage d'Excel
Sub LCL()
'
' LCL Macro
' Macro le 04/06/2015 a 10:42
'
' Touche de raccourci du clavier: Ctrl+b
'
Range("A1:A211").Select
Selection.Cut
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
b()
'
' b Macro
' m2 a 11:23
'
' Touche de raccourci du clavier: Ctrl+q
'
Selection.Cut
Sheets("Feuil1").Select
Columns("B:B").Select
ActiveSheet.Paste
d()
'
' d Macro
' m3 a 11:24
'
' Touche de raccourci du clavier: Ctrl+s
'
Selection.Cut
ActiveWindow.SmallScroll Down:=21
Sheets("Feuil1").Select
Columns("C:C").Select
ActiveSheet.Paste
e()
'
' e Macro
' m4 a 11:26
'
' Touche de raccourci du clavier: Ctrl+f
'
Columns("D:D").Select
Selection.Cut
Sheets("Feuil1").Select
Columns("D:D").Select
Range("D22").Activate
ActiveSheet.Paste
f()
'
' f Macro
' m5 a 11:27
'
' Touche de raccourci du clavier: Ctrl+g
'
Selection.Cut
Sheets("Feuil1").Select
Columns("E:E").Select
Range("E22").Activate
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-36
g()
'
' g Macro
' m6 a 11:28
'
' Touche de raccourci du clavier: Ctrl+h
'
ActiveWindow.SmallScroll Down:=-33
Columns("H:H").Select
Selection.Cut
ActiveWindow.SmallScroll Down:=15
Sheets("Feuil1").Select
ActiveWindow.SmallScroll Down:=-15
Range("G1").Select
ActiveSheet.Paste
h()
'
' h Macro
' m6* a 11:29
'
' Touche de raccourci du clavier: Ctrl+j
'
Selection.Cut
Sheets("Feuil1").Select
ActiveWindow.SmallScroll Down:=-51
Columns("F:F").Select
Range("F115").Activate
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-114
End Sub
Tu écris :
Gmb j'ouvre une nouvelle feuille pour faire la macro final je ne comprends pas votre réponse.
OK ! Allons-y !
Mais tout d’abord, si tu veux bien, évite de me vouvoyer. Sur le forum on est tous à la même enseigne : jeunes et vieux, grands et petits, maigres et gros, tous inconnus et tous égaux !
D'autant que le tutoiement n’exclut ni le respect ni la courtoisie …
Partons du fichier que tu as joins à ton premier message : ‘’2.xlsm’’
Tu dis partir d’une nouvelle feuille.
Supposons que ce soit la Feuil2. Elle est vierge. On l’active : on est donc sur une feuille vide.
ON clique sur ‘’DEVELOPPEUR’’, dans le bandeau, puis sur le bouton ‘’Macro’’.
Dans la fenêtre qui s’ouvre, on sélectionne la macro ‘’final’’ et on clique sur le bouton ‘’Pas à pas détaillé’’, sur la droite.
La macro ‘’final’’ s’ouvre’’ avec son titre surligné en jaune : cela veut dire qu’elle est arrêtée sur cette ligne.
Clique sur la touche F8 du clavier et le surlignage se déplace sur la ligne suivante : ‘’Call LBL’’
Un instruction surlignée en jaune n’a pas encore été exécutée mais est la prochaine qui va l’être.
Clique à nouveau sur F8 : La macro décroche de son module de départ (sub final) pour aller exécuter la macro LBL. Elle reviendra à l’instruction suivante, ‘’Call b’’ lorsqu’elle aura fini d’éxécuter ‘’LBL’’
Tu peux donc constater pour l’instant qu’elle est arrêtée sur le nom de ‘’ Sub LBL’’
Clique 2 fois sur F8 : elle exécute les 2 premières instructions de la macro LBL qui sont :
Range("A1:A211").Select
Selection.CutMais regarde ce qui s’est passé sur ta feuille de départ : la macro a sélectionné et coupé la plage ‘’A1 :A21’’.
Or, cette plage est vide ! Jusqu’à présent, elle n’a trouvé aucune instruction lui demandant d’aller sélectionner une autre feuille et la plage indiquée se réfère par défaut à la feuille active.
Si tu avais écris :
Sheets(‘’COPIE’’) .Range("A1:A211").CutElle aurait coupé la plage indiquée mais dans la feuille ‘’COPIE’’
Pareil si tu avais écris :
Sheets(‘’COPIE’’).select
Range("A1:A211").CutClique une nouvelle fois sur F8
La macro a exécuté l’instruction :
Sheets.Add After:=ActiveSheetLà, tu peux constater qu’une nouvelle feuille s’est crée, ‘’Feuil3’’, et que c’est maintenant cette feuille qui est active : cela se voit bien à la couleur de son onglet.
En cliquant encore une fois sur F8, la macro exécute :
ActiveSheet.PasteC’est-à-dire qu’elle colle dans la cellule active de la feuille active (A1 de Feuil3) la plage qu’elle a coupée. Mais qui est vide, donc rien de visible…
Re clique sur F8 et elle exécute :
End SubCette instruction lui indique qu’elle a terminé l’éxécution de LBL mais pas son travail intial qui est toujours la macro ‘’finaL’’. Elle va donc y revenir en allant s’arrêter sur la première instruction qui suit celle où elle a décroché pour aller exécuter LBL.
Elle vient donc sur
Call bVoilà ! Je m’arrêterai là. J’espère que tu as compris comment tu peux contrôler et corriger le bon déroulement d’une macro pour l’amener à faire exactement ce que tu désires.
OK ?
Bye !
Je ne fais aucune distinction en utilisant le vouvoiement c'est par habitude que je l'utilise. Mais tu as raison le tutoiement est bien meilleur sur ce forum. Ne voit donc pas mon vouvoiement comme un signe de différenciation.
Oui j'ai compris il faut que je respecte le format des feuilles sinon la macro ne s'exécutera pas comme je le souhaite .
Un grand merci