VBA Pb combobox qui appelle des macros

Résolu
Groju Messages postés 3 Statut Membre -  
Groju Messages postés 3 Statut Membre -
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

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  3. Groju Messages postés 3 Statut Membre
     
    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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Groju Messages postés 3 Statut Membre
     
    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