Récupérer l'évènement Cellule modifiée par liste déroulante d'une feuille

dionys0s

XLDnaute Impliqué
Salut le forum

j'aimerais savoir s'il existe une manière de lancer une macro lorsqu'une cellule est modifiée par liste de validation.

J'ai essayé l'événement Private Sub Worksheet_Calculate(), mais sans succès.

L'idée derrière ma question, c'est que j'ai plusieurs cellules avec des listes de validation en cascade, et que si j'en modifie une "en amont", que les cellule comportant une liste de validation "en aval" se vident.

Une autre alternative serait de pouvoir détecter si :
* Si une cellule comporte une liste de validation
* Si oui, si la valeur contenue est permise par la liste.

Concrètement, dans l'exemple de mon fichier, je voudrais, lorsque je change le Genre (E2), que la cellule F2 s'efface

D'avance merci pour votre aide

dionys0s
 

Pièces jointes

  • Suppression fonction choix liste.xlsm
    30.1 KB · Affichages: 55

Dranreb

XLDnaute Barbatruc
Re : Récupérer l'évènement Cellule modifiée par liste déroulante d'une feuille

Bonjour.

Comme ça :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long
If Target.Address <> "$E$2" Then Exit Sub
On Error Resume Next
L = WorksheetFunction.Match(Me.[F2].Value, Me.Range(Me.[E2].Value), 0)
If Err Then
   Application.EnableEvents = False
   Me.[F2].ClearContents
   Application.EnableEvents = True: End If
End Sub
 

dionys0s

XLDnaute Impliqué
Re : Récupérer l'évènement Cellule modifiée par liste déroulante d'une feuille

Re,
Bonjour Dranreb

Waow... Merci beaucoup Dranreb

je ne comprends pas du tout comment ça marche. Si tu as le temps de m'expliquer le principe (histoire de gagner en autonomie), ce serait super sympa de ta part.
Comment se fait-il que ça fonctionne alors que tu utilises l'événement Worksheet_Change ? C'est pas supposé s'enclencher uniquement lorsqu'on change de feuille ?
Et que fait la fonction .Match ? Qu'est-elle sensée renvoyée en cas d'absence d'erreur ?

D'avance merci pour tes lumières :)

dionys0s
 

Dranreb

XLDnaute Barbatruc
Re : Récupérer l'évènement Cellule modifiée par liste déroulante d'une feuille

C'est pas supposé s'enclencher uniquement lorsqu'on change de feuille ?
Non : quand on change des cellules dans la feuille à laquel le module est attaché. Target représente la plage des cellules changées.
Et que fait la fonction .Match ? Qu'est-elle sensée renvoyée en cas d'absence d'erreur ?
C'est exactement la fonction EQUIV d'Excel. Elle rend le numéro relatif dans la plage spécifié en 2ième paramètre où se trouve la valeur du 1er. Comme pour EQUIV le dernier paramètre 0 dit que ce n'est pas un seuil qu'on cherche dans une liste numérique classée mais une valeur exacte.
 

Si...

XLDnaute Barbatruc
Re : Récupérer l'évènement Cellule modifiée par liste déroulante d'une feuille

salut

et ainSi... ?
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  If R.Address = "$E$2" Then [F2] = "" 
End Sub

cette évènementielle est lancée au changement du contenu d'une plage de cellules de la feuille.
 

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 333
Membres
103 819
dernier inscrit
vinz_kid