Un problème d'appel de macro

Résolu/Fermé
Moldude Messages postés 19 Date d'inscription jeudi 21 mars 2019 Statut Membre Dernière intervention 8 janvier 2020 - 26 mars 2019 à 08:27
Moldude Messages postés 19 Date d'inscription jeudi 21 mars 2019 Statut Membre Dernière intervention 8 janvier 2020 - 29 mars 2019 à 19:04
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.
A voir également:

3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
26 mars 2019 à 10:11
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
26 mars 2019 à 18:34
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 mars 2019 à 06:10
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
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
27 mars 2019 à 15:23
Tout à fait d'accord :-)
0
Moldude Messages postés 19 Date d'inscription jeudi 21 mars 2019 Statut Membre Dernière intervention 8 janvier 2020
29 mars 2019 à 19:04
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