cliquer sur un commandbutton dans une macro

Jimrcl

XLDnaute Occasionnel
Bjr le forum,
j'ai une cinquantaine d'onglet dans mon fichier excel avec du code propre à chaque page. Un clic sur un 'command button1' lance le code qui s'excecute en 10 secondes en moyenne...donc
avant pour excecuter le code, il fallait cliquer sur le command button 1 sur chacune des feuilles sauf que maintenant y en a 50.
Comment faire pour créer une macro qui clic automatiquement sur les 50 feuilles les unes a la suite des autres?
n'y aura t'il pas un bourrage mémoire?
PS: l'enregistreur de macro ne marche pas ce coût là...
Merci d'avance.
 

Blunet

XLDnaute Occasionnel
Salut Jimrcl, faut-il absolument que le code s'exécute dans les feuilles les unes après les autres ?
Si non alors
essaye le code suivant :
Application.ScreenUpdating=False
module1.NomProcédure1
module1.NomProcédure2
'biensûr remplacer module1 par le nom correspondant
NomProcédurei correspondent aux Sub des CommandBuuton des ongles i respectivement.

PS si tes procédures ont des arguments ne les oublie pas lors de l'appel
 

pierrejean

XLDnaute Barbatruc
bonjour jimrcl

il faut creer un boucle qui selectionnera les feuillses les unes apres les autres et lancera la macro une fois pour chacune

On peut faire quelqe chose 'a l'aveugle' mais il sera toujours plus facile de t'expliquer cela avec un fichier exemple (sans données confidentielles)

si tu ne peux pas le faire on essaiera
 

Jimrcl

XLDnaute Occasionnel
je peux pas envoyer le fichier ... trop gros...
mais en faisant une boucle comme ci dessous:
Code:
Private Sub CommandButton2_Click()
Dim i As Integer

For i = 1 To 94
Worksheets('i').Activate
remplir
suppr_colonne_vide
ajoutcoletabl
num_col_A
mise_en_forme
Next
End Sub
çà plante en mettant 'erreur de compilation'
'sub ou function non défini'
c'est une histoire de fonction private ? ? ?
toutes mes fonctions sont dans des worksheets, pas dans des modules
et parfois j'ai mis des private sub plutôt que sub, je sais pas pourquoi mais je l'ai fait...
:pinch:
help please
 

Bricofire

XLDnaute Impliqué
Bonjour tout le monde, :)

Jimrcl, je te joint un exemple de structure en cascade, le principe résulte sur la création d'un deuxième bouton sur la première feuille qui lance les autres en cascade et tu gardes du coup la mossiblité de les lancer un à un de façon arbitraire si besoin. On passe par un module, donc attention au placement du code et à la déclaration des variables au besoin.

Bonne soirée,

Brico [file name=Boutoncascade.zip size=12938]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Boutoncascade.zip[/file]
 

Pièces jointes

  • Boutoncascade.zip
    12.6 KB · Affichages: 33

Jimrcl

XLDnaute Occasionnel
Précision:
j'ai 95 feuilles toutes différentes
et dans les worksheets de chaque feuille j'ai 5 macros, propres à chaque feuille.
donc au total 5*95 'sub ou private sub' toutes différentes.
puis j'ai 1 bouton par feuille pour lancer les 5 macros correspondantes.
Question:
Comment cliquer sur les 95 boutons les uns à la suite des autres?
Merci.
 

Bricofire

XLDnaute Impliqué
Re tout le monde, :)

Jimrcl, vois si le principre de cascade te convient, le mieux alors est comme précisé de tranférer les commandes Private qui concernent l'action sur le bouton des feuilles dans des procédures du Module principal avec des appels comme dans l'exemple.
C'est pourquoi je disais attention aux variables car certaines qui peuvent être initialiées ou utilisées dans d'autres Private d'une feuille devront être alors déclarées Public ... Dans le Module !

cordialement,

Brico
 

Bricofire

XLDnaute Impliqué
Re tout le monde :)

Ben quoi transférer 95*5 codes te pose PB :)

Bon, Ok j'ai une autre piste, ce que tu pourrais faire c'est d'ajouter à chaque feuille une procédure Private Sub Worksheet_Activate() dans laquelle tu appellerai les macros private de la feuille concernée que tu veux...

Bien sur si tu as déjà une WSActivate ou si tu n'as pas envie qu'en activant la feuille tout se déclenche, puisque ça reviendra à cliquer sur le bouton directement, il faut créer une variable drapeau (Booléanne) qui ne lencera cet appel que si l'ordre a été donné par le bouton run total...

Ca te conviendrait mieux peut-être :lol:

cordialement,

Brico
 

Jimrcl

XLDnaute Occasionnel
Merci pour ta réponse bricofire mais çà représente trop de boulot pour que je fasse çà.
je préfère encore cliquer sur les boutons un par un.
J'ai reposté un message pour savoir si on pouvait simuler un clic sur un bouton et j'espère avoir une réponse magique, j'y crois ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 858
Membres
103 978
dernier inscrit
bderradji