VBA Pb combobox qui appelle des macros

Résolu/Fermé
Groju Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 10 février 2011 - 9 févr. 2011 à 21:32
Groju Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 10 février 2011 - 10 févr. 2011 à 21:08
Bonjour à tous,

J'ai rencontré un problème que j'ai résolu par un bricolage, et j'aimerais savoir si vous auriez une idée.

Je veux, grâce à la comboboxPeriode et la validation par le BtOK.
Récupérer la valeur de la combobox, et lancer la macro correspondante,
sachant que chaque valeur de la combobox est orthographié de la même manière que chacune des macros associés.

Code bricolé (mais qui marche)

Private Sub BtOK_Click()

UFPrint.Hide
If ComboBoxPeriode.Value = "Trimestre1" Then
Application.Run ("Macro1")
Else
If ComboBoxPeriode.Value = "Trimestre2" Then
Application.Run ("Macro2")
Else
If ComboBoxPeriode.Value = "Trimestre3" Then
Application.Run ("Macro3")
Else
If ComboBoxPeriode.Value = "Trimestre4" Then
Application.Run ("Macro4")
Else
Application.Run ("GlobalMacro")
End If
End If
End If
End If
End Sub

Auriez vous une meilleure solution?

J'avais pensé à :

Dim Z as string
ComboBoxPeriode.Value = Z
Application.Run ("Z")

mais cela ne marche pas.

J'ai besoin d'aide, ma solution marche car il n'y a que 5 possibilités mais si il y en avais 15 ...
J'espère avoir été clair.
Merci d'avance.
Julien

5 réponses

Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
10 févr. 2011 à 13:33
Re,

peut être tout simplement comme cela

Private Sub ComboBox1_Click()
Application.Run (ComboBox1.Value)
End Sub

le combobox affiche les noms exacts des macros en respectant les majuscules minuscules s'il y a et le fait de cliquer sur un nom de macro dans le combobox la macro s'exécute

ou comme cela si tu as nommé ton combobox "ComboBoxPeriode"

Private Sub ComboBoxPeriode_Click()
Application.Run (ComboBoxPeriode.Value)
End Sub
2
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 110
9 févr. 2011 à 21:51
Salut,

Si la liste de ton combobox est le reflet exact des noms de tes codes, tu peux faire

Private Sub ComboBox1_Change()
If ComboBox1.Value = "Trimestre1" Then Call Trimestre1
End Sub
0
Groju Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 10 février 2011
9 févr. 2011 à 22:49
Escusez moi, je viens de me rentre compte que je me suis trompé.
Mon code bricolé (mais qui marche) c'est:

Private Sub BtOK_Click()

UFPrint.Hide
If ComboBoxPeriode.Value = "Macro1" Then
Application.Run ("Macro1")
Else
If ComboBoxPeriode.Value = "Macro2" Then
Application.Run ("Macro2")
Else
If ComboBoxPeriode.Value = "Macro3" Then
Application.Run ("Macro3")
Else
If ComboBoxPeriode.Value = "Macro4" Then
Application.Run ("Macro4")
Else
Application.Run ("GlobalMacro")
End If
End If
End If
End If
End Sub

Mais je voudrais remplacer cette série de "If Then Else" par un code plus harmonieux dirons nous ! Parce que si j'ai 20 valeurs dans ma combobox, je ne veux pas écrire 20 "If" imbriqués les uns dans les autres. (source d'erreur, et impropre)

Et oui Mike-31, le combobox est le reflet exact des noms des codes.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
10 févr. 2011 à 00:11
Bonsoir,

Sans tester car il est tard, essaie qcq chose comme ça :
If left(ComboBoxPeriode.Value,5) = "Macro" Then
Application.Run (ComboBoxPeriode.Value)
Else
Application.Run ("GlobalMacro")
endif

eric
0

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

Posez votre question
Groju Messages postés 3 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 10 février 2011
10 févr. 2011 à 21:08
Bonsoir à tous,

Mike-31 ca marche super!
Je te remercie.

@erric
Merci d'avoir proposé une solution.

bonne soirée et peu être à une prochaine.
0