Appel d'une macro "permanente"

Résolu/Fermé
geo3701 Messages postés 58 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 8 août 2017 - 23 avril 2013 à 16:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 24 avril 2013 à 17:17
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.
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 23/04/2013 à 17:11
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
0
geo3701 Messages postés 58 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 8 août 2017 1
23 avril 2013 à 17:21
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..
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 avril 2013 à 17:22
Question complémentaire : Tu te sert de ces collections pour quoi?
En fait, selon l'utilité d'une collection ou non, nous saurons t'orienter vers une solution.
0
geo3701 Messages postés 58 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 8 août 2017 1
24 avril 2013 à 13:38
je m'en sers pour faire du for each.
for each sh in on_tous
.
.
next sh
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 avril 2013 à 17:29
La réponse généraliste à ta question est :
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 24/04/2013 à 13:54
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!)
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
0

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

Posez votre question
geo3701 Messages postés 58 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 8 août 2017 1
24 avril 2013 à 15:39
"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...)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 avril 2013 à 15:53
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????
0
geo3701 Messages postés 58 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 8 août 2017 1
24 avril 2013 à 16:54
J'ai mis ma fonction dans le module où j'ai toutes mes macros et c'est PARFAIT!
Merci beaucoup de ton aide
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 avril 2013 à 17:17
de rien!
A+
0