Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro dans une macro

13 réponses
Avatar
Magic Man
Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.

--
Magic Man
magicman@zefo.ca

10 réponses

1 2
Avatar
Magic Man
Pour quoi je pose la question c'est que j'ai une erreur vba comme quoi ma
macro auto_open() est trop grande.
Ma macro auto_open() exécute un script qui à la fin enregistre et ferme le
classeur.
Donc j'ai fais une autre macro pour alléger auto_open() et je veux que
auto_open() appelle mon autre macro avant de fermer mon classeur.

Merci.


"Magic Man" a écrit dans le message de news:

Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.

--
Magic Man




Avatar
Jac
Salut Magic Man,

il suffit de mettre sur une ligne le nom de la macro à appeler. C'est tout.

N'hésite pas à regrouper des actions précises dans des "sous-macro". C'est
pratique pour tester le petit morceau concerné et c'est intéressant aussi
pour du réemploi.
Exemple : les bordures. L'enregistreur en fait tout un fromage car il
s'occupe de tout ce qu'il est possible de faire avec les bordures. Alors que
simplifié et bien aligné, ça peut ne prendre que quelques lignes.
-------------------------------------------------
Sub BORDURESTOUTES()
On Error Resume Next
Selection.Borders(xlEdgeTop).Weight = xlThin
Selection.Borders(xlEdgeBottom).Weight = xlThin
Selection.Borders(xlEdgeLeft).Weight = xlThin
Selection.Borders(xlEdgeRight).Weight = xlThin
Selection.Borders(xlInsideVertical).Weight = xlHairline
Selection.Borders(xlInsideHorizontal).Weight = xlHairline
On Error GoTo 0
End Sub
---------------------------------------------------
En rajoutant ":" à la fin de chaque instruction, et en rapprochant ce qui se
trouve sur la ligne suivante, ça peut tenir sur une ou plusieurs lignes.
C'est sûr qu'ici, dessous, ça ne se voit pas tellement mais collé dans un
module, c'est quand même autre chose:
-------------------------------------------------
Sub BORDURESTOUTES(): On Error Resume Next:
Selection.Borders(xlEdgeTop).Weight = xlThin:
Selection.Borders(xlEdgeBottom).Weight = xlThin:
Selection.Borders(xlEdgeLeft).Weight = xlThin:
Selection.Borders(xlEdgeRight).Weight = xlThin:
Selection.Borders(xlInsideVertical).Weight = xlHairline:
Selection.Borders(xlInsideHorizontal).Weight = xlHairline: On Error GoTo 0:
End Sub
---------------------------------------------------
C'est comme on aime. Moi, j'aime bien en 1 ligne car une fois que ça
fonctionne, je ne reviens plus sur cette fonctionalité. Et ça raccourcit la
longueur du texte écrit dans la macro.
Un puriste dira que c'est plus clean et/ou plus rapide avec un with / end
with. Sans doute mais si c'est deux ou trois fois plus long qu'un nième de
seconde, ça ne me dérange pas vraiment.

Jac


"Magic Man" a écrit dans le message de news:

Pour quoi je pose la question c'est que j'ai une erreur vba comme quoi ma
macro auto_open() est trop grande.
Ma macro auto_open() exécute un script qui à la fin enregistre et ferme le
classeur.
Donc j'ai fais une autre macro pour alléger auto_open() et je veux que
auto_open() appelle mon autre macro avant de fermer mon classeur.

Merci.


"Magic Man" a écrit dans le message de news:

Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.

--
Magic Man








Avatar
Jac
Salut Magic Man,

il suffit de mettre sur une ligne le nom de la macro à appeler. C'est tout.

N'hésite pas à regrouper des actions précises dans des "sous-macro".
C'est pratique pour tester le petit morceau concerné et c'est intéressant
aussi pour du réemploi.
Exemple : les bordures. L'enregistreur en fait tout un fromage (27 lignes)
car il s'occupe de tout ce qu'il est possible de faire avec les bordures.
Alors que simplifié et bien aligné, ça peut ne prendre que 8 lignes.
-------------------------------------------------
With Selection
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlHairline
.Borders(xlInsideHorizontal).Weight = xlHairline
End with
---------------------------------------------------
En rajoutant ":" à la fin de chaque instruction, et en rapprochant ce qui se
trouve sur la ligne suivante, ça peut tenir sur une ou plusieurs lignes.

C'est comme on aime. Moi, j'aime bien en 1 ligne car une fois que ça
fonctionne, je ne reviens plus sur cette fonctionalité. Et ça raccourcit la
longueur du texte écrit dans la macro.

Jac


"Magic Man" a écrit dans le message de news:

Pour quoi je pose la question c'est que j'ai une erreur vba comme quoi ma
macro auto_open() est trop grande.
Ma macro auto_open() exécute un script qui à la fin enregistre et ferme le
classeur.
Donc j'ai fais une autre macro pour alléger auto_open() et je veux que
auto_open() appelle mon autre macro avant de fermer mon classeur.

Merci.


"Magic Man" a écrit dans le message de news:

Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.

--
Magic Man








"Magic Man" a écrit dans le message de news:

Pour quoi je pose la question c'est que j'ai une erreur vba comme quoi ma
macro auto_open() est trop grande.
Ma macro auto_open() exécute un script qui à la fin enregistre et ferme le
classeur.
Donc j'ai fais une autre macro pour alléger auto_open() et je veux que
auto_open() appelle mon autre macro avant de fermer mon classeur.

Merci.


"Magic Man" a écrit dans le message de news:

Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.

--
Magic Man








Avatar
Filochard
Pour l'exemple sur les bordures, 3 lignes doivent suffirent

Selection.Borders.Weight = xlThin
Selection.Borders(xlInsideVertical).Weight = xlHairline
Selection.Borders(xlInsideHorizontal).Weight = xlHairline

pour ce qui est de la réduction à une ligne :

Selection.Borders.Weight = xlThin: Selection.Borders(xlInsideVertical).Weight =
xlHairline: Selection.Borders(xlInsideHorizontal).Weight = xlHairline

Ca ne présente aucun intérêt car cela rend les instructions peu lisibles
Avatar
Misange
Bonjour
sub mamacro1()
mamacro2
end sub

ou bien

Bonjour
sub mamacro1()
call mamacro2
end sub

sont équivalents. Certains préfèrent mettre le call pour bien mettre en
évidence que ce n'est la nom d'une variable mais celui d'une macro.
Cela dit, je sui surprise du message d'erreur sur une macro trop longue ...
Combien de lignes fait-elle ta macro ?
Elle trop longue ou bien elle met trop de temps et consomme toute la
mémoire ?

Misange


Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.



Avatar
anonymousA
Bonjour,

Pour compléter , perso je n'ai jamais eu de message pour macro trop
longue. Par contre , de mémoire, il semblerait d'après des auteurs
reconnus qu'il vaut mieux eviter d'avoir un module dont la taille ,
suite à exportation au format texte, est supérieure à 64Ko.

A+

Bonjour
sub mamacro1()
mamacro2
end sub

ou bien

Bonjour
sub mamacro1()
call mamacro2
end sub

sont équivalents. Certains préfèrent mettre le call pour bien mettre en
évidence que ce n'est la nom d'une variable mais celui d'une macro.
Cela dit, je sui surprise du message d'erreur sur une macro trop longue ...
Combien de lignes fait-elle ta macro ?
Elle trop longue ou bien elle met trop de temps et consomme toute la
mémoire ?

Misange


Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.





Avatar
Misange
ps : le bonjour est indispensable aux bonnes relations humaines mais pas
à celui de cette macro :-) inutile donc de mettre bonjour en début de
module, excel ne se vexera pas !
Misange

Bonjour
sub mamacro1()
mamacro2
end sub

ou bien

Bonjour
sub mamacro1()
call mamacro2
end sub

sont équivalents. Certains préfèrent mettre le call pour bien mettre en
évidence que ce n'est la nom d'une variable mais celui d'une macro.
Cela dit, je sui surprise du message d'erreur sur une macro trop longue ...
Combien de lignes fait-elle ta macro ?
Elle trop longue ou bien elle met trop de temps et consomme toute la
mémoire ?

Misange


Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.





Avatar
Magic Man
Je ne comprend pas ce que vous voulez dire par bordures ? Mes bordures j'en
ai je les ai fait manuellement mais rien de trop...

"Filochard" a écrit dans le message de news:

Pour l'exemple sur les bordures, 3 lignes doivent suffirent

Selection.Borders.Weight = xlThin
Selection.Borders(xlInsideVertical).Weight = xlHairline
Selection.Borders(xlInsideHorizontal).Weight = xlHairline

pour ce qui est de la réduction à une ligne :

Selection.Borders.Weight = xlThin:
Selection.Borders(xlInsideVertical).Weight = xlHairline:
Selection.Borders(xlInsideHorizontal).Weight = xlHairline

Ca ne présente aucun intérêt car cela rend les instructions peu lisibles



Avatar
Magic Man
Merci ça fonctionne ! :o)
Ma macro originale avait 3000 lignes !

"Misange" a écrit dans le message de news:

ps : le bonjour est indispensable aux bonnes relations humaines mais pas à
celui de cette macro :-) inutile donc de mettre bonjour en début de
module, excel ne se vexera pas !
Misange

Bonjour
sub mamacro1()
mamacro2
end sub

ou bien

Bonjour
sub mamacro1()
call mamacro2
end sub

sont équivalents. Certains préfèrent mettre le call pour bien mettre en
évidence que ce n'est la nom d'une variable mais celui d'une macro.
Cela dit, je sui surprise du message d'erreur sur une macro trop longue
...
Combien de lignes fait-elle ta macro ?
Elle trop longue ou bien elle met trop de temps et consomme toute la
mémoire ?

Misange


Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.







Avatar
LSteph
Bonjour,

appel direct:

Call MaMacro

ou depuis un autre projet:

Application.Run "Perso.xls!retablevents"

--
lSteph

Bonjour,

C'est quoi la commande dans une macro pour appeler une autre macro ?

Merci.



1 2