Un problème d'appel de macro

Résolu
Bonjour,

Je suis (de nouveau) perdu avec une macro. Voici mon problème je cherche à appeler une macro en fonction du contenu d'une cellule. Ce contenu est toujours sous forme de texte (par exemple HER5). En farfouillant j'ai trouvé un script récurent mais de un, il ne fonctionne pas. Et de deux si il fonctionnait, il se ferait de manière automatique et je ne peux pas l'affecter à un bouton (je pense que c'est du à "Private Sub").
Est ce que quelqu'un pourrait m’éclairer sur pourquoi le tout ne fonctionne pas et comment affecter ce genre de macro a un bouton.
Voici ce que j'ai :

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("Q3") = "HER3" Then

Call HERregion

End If

If Range("Q3") = "HER5" Then

Call HERdep

End If

End Sub

D'avance merci et bonne journée.

PS: je précise aussi que le contenu de la cellule Q3 a plusieurs valeur possible et que chacune appelle une macro différente. Et également que mes macro lancée sans ceci fonctionnent tout à fait.

3 réponses

  1. Bonjour,
    Mettre cette macro dans un module
    Sub Appel()
        If Range("Q3") = "HER3" Then
            Call HERregion
        ElseIf Range("Q3") = "HER5" Then
            Call HERdep
        End If
    End Sub
    

    Insérez un bouton Contrôle de formulaire et affectez cette macro a ce bouton

    Pour ce faire: clic droit sur le bouton et Affecrter une macro…
    Au cas ou vous ne sauriez pas
    1
    1. Bonjour,

      La proposition est bonne, toutefois j'ajouterais ceci en complément ...

      Selon la description, je cite : "je précise aussi que le contenu de la cellule Q3 a plusieurs valeur possible"

      Le Select Case me paraît plus approprié et plus facile à entretenir.

      Option Explicit
      '
      
      Private Sub Worksheet_Change(ByVal Target As Range)
      
          Dim Cible As Range
          
          Set Cible = Range("Q3")
          
          ' Le changement provient-il de la cellule Q3
          If Not (Application.Intersect(Target, Cible) Is Nothing) Then
              ' Si oui
              Select Case Cible.Value
                  Case "HER3"
                      Call HERregion
                  Case "HER5"
                      Call HERdep
                  Case "Etc..."
                      Call HERetc...
              End Select
          End If
      
      End Sub
      '
      
      
      Private Sub HERregion()
          MsgBox "Methode HERregion"
      End Sub
      '
      
      Private Sub HERdep()
          MsgBox "Methode HERdep"
      End Sub
      
      Private Sub HERetc...()
          MsgBox "Methode HERetc..."
      End Sub
      
      


      Disons simplement une autre façon de faire.

      K
      1
      1. Bonjour,

        Certes, certes mais pour les puristes, le select case est plus lent que le if then else mais c'est jouable si pas trop de tests. Tout est relatif quand il est question de vitesse d'exécution en fonction de l'utilisateur
        0
      2. Tout à fait d'accord :-)
        0
    2. Bonjour,
      Merci pour le script il fonctionne parfaitement, est court et facile d'accès c'est pile ce qu'il me fallait.
      La seconde méthode est aussi intéressante je la garde sous le coude opur des cas plus complexes.
      En tout cas merci a vous deux pour la pertinence de vos réponse et votre rapidité.
      0