Appel d'une macro "permanente"
Résolu
geo3701
Messages postés
60
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
Bonjour,
J'ai créé des collections permettant de répertorier les noms de mes onglets dans ces collections. Cette macro, je l'ai placé dans "thisworkbook".
Sub Workbook_open()
ong_tous.Add Sheets("feuil1")
ong_tous.Add Sheets("feuil2")
ong_tous.Add Sheets("feuil3")
ong_tous.Add Sheets("feuil4")
ong_tous.Add Sheets("feuil5")
ong_tech.Add Sheets("feuil3")
ong_tech.Add Sheets("feuil4")
ong_tech.Add Sheets("feuil5")
End Sub
Mon problème, c'est que je teste beaucoup de macros qui ont besoin de cette macro. Mais dès que j'appuie sur le bouton "réinitialiser", je suis obligé de retourner dans "thisworkbook" et lancer la macro...
J'aimerai ne pas avoir à faire cela et que mes 2 collections soient enregistrées une bonne fois pour toutes dans mon fichier excel.
J'ai créé des collections permettant de répertorier les noms de mes onglets dans ces collections. Cette macro, je l'ai placé dans "thisworkbook".
Sub Workbook_open()
ong_tous.Add Sheets("feuil1")
ong_tous.Add Sheets("feuil2")
ong_tous.Add Sheets("feuil3")
ong_tous.Add Sheets("feuil4")
ong_tous.Add Sheets("feuil5")
ong_tech.Add Sheets("feuil3")
ong_tech.Add Sheets("feuil4")
ong_tech.Add Sheets("feuil5")
End Sub
Mon problème, c'est que je teste beaucoup de macros qui ont besoin de cette macro. Mais dès que j'appuie sur le bouton "réinitialiser", je suis obligé de retourner dans "thisworkbook" et lancer la macro...
J'aimerai ne pas avoir à faire cela et que mes 2 collections soient enregistrées une bonne fois pour toutes dans mon fichier excel.
A voir également:
- Appel d'une macro "permanente"
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Appel privé - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
5 réponses
Bonjour,
Question préalable : à quoi peut bien servir de stocker les feuilles dans une collection alors qu'elles le sont déjà par définition ?
Extrait de l'aide VBA :
L'objet Worksheet appartient à la collection Worksheets. La collection Worksheets contient tous les objets Worksheet d'un classeur.
L'objet Worksheet appartient également à la collection Sheets. La collection Sheets contient toutes les feuilles du classeur (aussi bien les feuilles de graphique que les feuilles de calcul).
Cordialement,
Franck P
Question préalable : à quoi peut bien servir de stocker les feuilles dans une collection alors qu'elles le sont déjà par définition ?
Extrait de l'aide VBA :
L'objet Worksheet appartient à la collection Worksheets. La collection Worksheets contient tous les objets Worksheet d'un classeur.
L'objet Worksheet appartient également à la collection Sheets. La collection Sheets contient toutes les feuilles du classeur (aussi bien les feuilles de graphique que les feuilles de calcul).
Cordialement,
Franck P
En fait chaque feuille a un nom spécifique. Chaque collection regroupe certaines de ces feuilles (pas toutes...).
Concrètement j'ai 9 onglets, dans ces neuf onglets, 5 appartiennent a une collection, et d'ailleurs, 3 onglets de cette collection sont dans une deuxieme collection..
Concrètement j'ai 9 onglets, dans ces neuf onglets, 5 appartiennent a une collection, et d'ailleurs, 3 onglets de cette collection sont dans une deuxieme collection..
La réponse généraliste à ta question est :
1- tu places ton code récurrent dans un module standard
ex :
2- tu appeles cette macro de ou tu veux
ex :
1- tu places ton code récurrent dans un module standard
ex :
Sub RempliColl() ong_tous.Add Sheets("feuil1") ong_tous.Add Sheets("feuil2") ong_tous.Add Sheets("feuil3") ong_tous.Add Sheets("feuil4") ong_tous.Add Sheets("feuil5") ong_tech.Add Sheets("feuil3") ong_tech.Add Sheets("feuil4") ong_tech.Add Sheets("feuil5") End Sub
2- tu appeles cette macro de ou tu veux
ex :
Sub Workbook_open() Call RempliColl End Sub
Bonjour,
J'ai compris alors.
Plutôt que d'utiliser des Objets Collection, je te recommande d'utiliser des petites fonctions qui vont considérablement alléger ton code.
Par exemple, pour ne s'occuper que des feuilles paires ou que des feuilles impaires :
Fonctions à placer dans un module standard (pas un module de feuille, ni module ThisWorkbook, ni module de classe!)
Et donc, ensuite, pour "appeler" uniquement les feuilles qui t'intéressent, dans une Sub, dans un événement (Workbook_Open, UserForm_Initialize, etc...) :
Cordialement,
Franck P
J'ai compris alors.
Plutôt que d'utiliser des Objets Collection, je te recommande d'utiliser des petites fonctions qui vont considérablement alléger ton code.
Par exemple, pour ne s'occuper que des feuilles paires ou que des feuilles impaires :
Fonctions à placer dans un module standard (pas un module de feuille, ni module ThisWorkbook, ni module de classe!)
Function TabFeuillesPaires() As Variant TabFeuillesPaires = Array("Feuil2", "Feuil4", "Feuil6", "Feuil8", "Feuil10", "Feuil12", "Feuil14") End Function
Function TabFeuillesImpaires() As Variant TabFeuillesImpaires = Array("Feuil1", "Feuil3", "Feuil5", "Feuil7", "Feuil9", "Feuil11", "Feuil13") End Function
Et donc, ensuite, pour "appeler" uniquement les feuilles qui t'intéressent, dans une Sub, dans un événement (Workbook_Open, UserForm_Initialize, etc...) :
Sub Test() Dim Wsh As Worksheet For Each Wsh In ThisWorkbook.Worksheets(TabFeuillesPaires) Debug.Print Wsh.Name Next End Sub
Cordialement,
Franck P
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
"un module standard ,pas un module de feuille, ni module ThisWorkbook, ni module de classe!"
Quelle est la différence entre chaque ? (désolé mais je débute...)
Quelle est la différence entre chaque ? (désolé mais je débute...)
Un module de feuille : fait référence à une feuille spécifiquement. Tu y accèdes :
- sous VBE en double cliquant sur "Feuil1" (par exemple) dans la fenêtre VBA-Project (en haut à gauche de ta fenêtre VBE)
- depuis ta feuille en cliquant droit sur l'onglet / visualiser le code.
C'est dans ce type de module que tu fais intervenir les événements de ta feuille : Selection_Change(), Change() etc...
Le module ThisWorkbook. Tu y accèdes, sous VBE en double cliquant sur ThisWorkbook dans la fenêtre VBA-Project (en haut à gauche de ta fenêtre VBE)
Ce module te donne accès aux événements liés au classeur :
WorkBooks_Open() : lors de l'ouverture du classeur
Before_Close : avant la fermeture
Tu peux donc déclencher automatiquement, grâce à ces événements, des codes.
Par exemple : enregistrer systématiquement avant la fermeture.
Les modules de classe, c'est un poil plus compliqué. Ils servent à créer des classes. Un peu de lecture à ce sujet.
Sinon, la macro fonctionne????
- sous VBE en double cliquant sur "Feuil1" (par exemple) dans la fenêtre VBA-Project (en haut à gauche de ta fenêtre VBE)
- depuis ta feuille en cliquant droit sur l'onglet / visualiser le code.
C'est dans ce type de module que tu fais intervenir les événements de ta feuille : Selection_Change(), Change() etc...
Le module ThisWorkbook. Tu y accèdes, sous VBE en double cliquant sur ThisWorkbook dans la fenêtre VBA-Project (en haut à gauche de ta fenêtre VBE)
Ce module te donne accès aux événements liés au classeur :
WorkBooks_Open() : lors de l'ouverture du classeur
Before_Close : avant la fermeture
Tu peux donc déclencher automatiquement, grâce à ces événements, des codes.
Par exemple : enregistrer systématiquement avant la fermeture.
Les modules de classe, c'est un poil plus compliqué. Ils servent à créer des classes. Un peu de lecture à ce sujet.
Sinon, la macro fonctionne????