VBA Pb combobox qui appelle des macros

Résolu
Groju Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
Groju Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
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 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention  
 
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