VBA Pb combobox qui appelle des macros

Résolu
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. 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
    1. 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
      1. 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
        1. Contributeur
          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
          1. 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