Un problème d'appel de macro

Résolu
Moldude Messages postés 19 Statut Membre -  
Moldude Messages postés 19 Statut Membre -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. Kalissi Messages postés 221 Statut Membre 20
     
    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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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. Kalissi Messages postés 221 Statut Membre 20
       
      Tout à fait d'accord :-)
      0
  3. Moldude Messages postés 19 Statut Membre
     
    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