Exécuter macro sur clique d'une cellule contenant une valeur

Damorek

XLDnaute Nouveau
Bonjour à tous,

Je souhaite lancer une macro lorsque l'utilisateur va cliquer sur une cellule contenant la valeur "##" situé uniquement dans la colonne E (5).

Ca marche bien lorsque je clique sur la bonne cellule, mais lorsque je clique sur une autre cellule il me met en jaune la ligne suivante, en affichant comme message d'erreur "Run-time error '13': Type mismatch

If (Target.Column = 5 And Target.Value = "##") Then



Voici le code (que j'ai simplifié avec des msgbox, mais normalement cela va executer une macro que j'ai deja faite)

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If (Target.Column = 5 And Target.Value = "##") Then
        MsgBox "Oui"
    Else
        MsgBox "Non"
    End If

End Sub

Merci d'avance
 

Damorek

XLDnaute Nouveau
Re : Exécuter macro sur clique d'une cellule contenant une valeur

Voici le seul moyen que j'ai trouvé pour y arriver. Cela semble bien fonctionner, mais je comprend pas pourquoi cela ne fonctionne pas avec ma premiere methode et je comprend pas trop le pourquoi du "If Not Intersect(Target, Range("E29:E65536")) Is Nothing Then".

Si quelqu'un pourrait m'expliquer qu'est-ce que cela signifie, cela sera grandement apprécié :p

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("E29:E65536")) Is Nothing Then
        If Target.Value = "##" Then
            MsgBox "Oui"
        Else
            MsgBox "Non"
        End If
    End If
End Sub
 

Softmama

XLDnaute Accro
Re : Exécuter macro sur clique d'une cellule contenant une valeur

Bonjour Damorek,

Je pense que le problème qui se pose est que Target ne comprend pas toujours une seule cellule, mais parfois plusieurs. Et dans le cas où Target comprend plusieurs cellules, Target.Value n'a pas de sens et renvoie une erreur.

Pour contourner cela, tu peux te concentrer par exemple sur la première cellule de la sélection :
If Target.cells(1).Column = 5 and Target.Cells(1).Value = "##" Then ...

La macro que tu as postée en #2 devrait planter de la même façon dès lors que ta sélection comprend plus d'une cellule.

Si ce que tu veux c'est qu'au moins 1 cellule de la sélection soit en colonne E et qu'au moins une des cellules sélectionnées ait la valeur "##", tu peux essayer ainsi :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("E1:E65536")) Is Nothing Then 'Si colonne E
        If IsError(Application.Match("##", Application.Transpose(Intersect(Range("E:E"), Target)), 0)) Then 'Si y a pas ## en colonne E, dans la sélection
            MsgBox "Non"
        Else
            MsgBox "oui"
        End If
    End If
End Sub
 
Dernière édition:

sousou

XLDnaute Barbatruc
Re : Exécuter macro sur clique d'une cellule contenant une valeur

Bonjour.
Pour compléter si nécessaire.

Si tu sélectionne plusieurs cellules, target renvoi une 'collection' d'objet range. d'où l'erreur.
En effet il est impossible de tester la valeur sans savoir à quel est l'objet de la collection qui est visé.

Pour simplifier je te propose de tester avant le if si c'est un ensemble de cellule ou une seule cellule qui est sélectionner .
Avec la propriété .count

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
If (Target.Column = 5 And Target.Value = "##") Then
MsgBox "Oui"
Else
MsgBox "Non"
End If
End If
End Sub
 

Damorek

XLDnaute Nouveau
Re : Exécuter macro sur clique d'une cellule contenant une valeur

Bonjour,

Merci pour ces réponses rapides.

En réalité, je veux juste sélectionner une cellule à la fois.... en gros au lieu d'un bouton, je veux pouvoir cliquer sur une cellule contenant une certaine valeur.

Pour éviter de sélectionner plusieurs cellule (et donc de faire planter la macro), j'ai opté pour l'option doubleclick au lieu du simple clic

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

end sub

Merci
 

Discussions similaires

  • Résolu(e)
XL 2021 macro
Réponses
9
Affichages
518