[Catégorie modifiée VB6 --> VBA] Comment lancer une macro excel via un bouton d'

troupoulitou Messages postés 3 Date d'inscription mardi 22 juin 2010 Statut Membre Dernière intervention 23 juin 2010 - 22 juin 2010 à 15:19
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 24 juin 2010 à 10:33
Bonjour,

Je suis débutante dans excel et je l'utilise pour mon stage.

J'ai un soucis pour lancer une macro en cliquant sur un bouton de mon UserForm1.
(j'ai déjà lu énormément de réponses de divers forums mais aucune n'a réussi à résoudre mon problème donc je me lance...)

-- J'ai essayé :
Private Sub Nomboutton_Click()
Call Module1.Nommacro
End Sub

-- De même, le bouton annuler ne marche pas en écrivant :

Sub Annuler_button_Click()
UserForm1.Hide
End Sub

-- Ni
Sub Annuler_button_Click()
Unload(UserForm1)
End Sub

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 juin 2010 à 17:04
Salut

Soyons clair : c'est pour lancer ta macro ou pour la stopper que tu as des problèmes ?

Pour être appelable depuis un autre endroit que le module qui la renferme, une Sub ou une Function doit être déclarée en Public.

Stopper une macro ne consiste pas à la masquer, ce n'est pas du tout pareil.
Si tu dois la stopper réellement, il faut le prévoir par programme.
En général, c'est parce que la macro contient des boucles qui peuvent être longs.
Donc, dans la boucle, il faut venir tester l'état d'une variable qui décidera s'il faut sortir de la boucle ou même de la procédure :
-1- Dans la partie Déclarations de ton module, déclare une variable :
Public bStoppeTout As Boolean
-2- Ensuite, dans chaque procédure (Sub ou une Function ) que tu voudras pouvoir stopper, il faut :
- Mettre bStoppeTout à False en début de code
- Mettre un test de l'état de bStoppeTout à plusieurs endroits dans le code, là où tu estimes qu'il risque d'y avoir des délais trop longs (dans les boucles par exemple) :
If bStoppeTout Then Exit Sub ' ou Function
-3- Dans un bouton judicieusement appelé "Annuler", tu n'auras qu'à positionner bStoppeTout à True

Pour que cela fonctionne, il est très important de laisser respirer le programme, c'est à dire redonner la main au système de temps à autre, pour qu'il puisse gérer d'autres code que celui de la macro qui tourne, notamment, le code du bouton Annuler.
Pour ce faire, place cette instruction partout dans ton code, et notamment, dans toutes les boucles For-Next ou Do-Loop :
DoEvents

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
troupoulitou Messages postés 3 Date d'inscription mardi 22 juin 2010 Statut Membre Dernière intervention 23 juin 2010
23 juin 2010 à 09:07
En fait.

Quand je suis sur ma page excel, je clique sur un bouton pour lancer mon UserForm où l'utilisateur rempli des données. Jusque là ça marche.

En bas de ce UserForm, l'utilisateur a deux choix :
- boutton annuler : qui n'annule pas de macro car rien pour le moment n'a été lancé, mais referme juste la fenetre du UserForm.
- boutton "Lancer la Macro" qui devrait "lancer ma macro" en prenant en compte les données rentrées par l'utilisateur.

Aucun des deux boutons ne marche : si je clique dessus il ne se passe rien.

Pour le moment j'ai écrit dans ma macro :

----------------------------------------------------
Sub Lancer_Userform1_Click() (-----> le seul qui marche)
UserForm1.Show False
End Sub

Sub Annuler_button_Click()
UserForm1.Hide
End Sub

Sub Lancerlamacro_button_Click()
Call Module1.Calcul_Variabilites
End Sub

Sub Calcul_Variabilites()
"Blabla macro"
End Sub
----------------------------------------------------

Avec dans mon userform le nom "Annuler_button" pour le bouton annuler (i.e. je rappelle juste pour fermer le UserForm) et "Lancerlamacro_button" pour le bouton lancer la macro

----------------------------------------------------

Qu'est ce qui n'est pas corret ?
Manque-t-il des termes ?
Faut-il un ordre spécial ?
Etc...
(partir du fait que je suis vraiment novice en la matière !!!!)
Merci encore !!!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juin 2010 à 12:43
Donc tu veux fermer la UserForm avec un bouton ?
L'instruction de déchargement est
Unload Me
Me représentant la UserForm sur laquelle le bouton Annuler se trouve.

J'ai compris ton problème :
En fait, ton code était presque bon, juste une erreur de syntaxe :
Sub Annuler_button_Click()
    Unload(UserForm1)
End Sub 
Il ne faut pas mettre de parenthèses lorsque tu appelles une fonction directement :
    Unload UserForm1
est la même chose que le code que je t'ai proposé ci-dessus
0
troupoulitou Messages postés 3 Date d'inscription mardi 22 juin 2010 Statut Membre Dernière intervention 23 juin 2010
23 juin 2010 à 13:44
Merci beaucoup !

Ca marche !

Par contre... maintenant j'ai un problème concernant le paramétrage d'une donnée que l'utilisateur rentre dans UserForm.

Il rentre un text sous la forme jj/mm/aaaa

Et je voudrais que dans ma macro, cela devienne une date, est-ce possible ?

du genre

a = InputBox

et que a soit pris en compte comme une date?

Merci (ecncore !!)
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 juin 2010 à 10:33
Autre question --> Autre question sur le forum
Ne mélangeons pas tout
(choisis bien la catégorie et explique bien ton environnement)
0
Rejoignez-nous