Procédure événementielle

  • Initiateur de la discussion Initiateur de la discussion Emile63
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Emile63

XLDnaute Junior
Bonjour a tous, je cherche a créer une macro événementielle,
-->
Sub Worksheet_Change(ByVal Target As Range)
Dim MaCellule$
MaCellule = ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
On Error GoTo Sortie
If Intersect(Range("CodeSélection"), Target) Is Nothing Then GoTo Sortie
Call AppliquerFiltre
Sortie:
Application.Goto Reference:=Range("A1"), Scroll:=True
End Sub

qui réagit sur les changement de la cellule liée [CodeSélection] à une liste déroulante.
Malheureusement ça ne fonctionne pas étant donné (je suppose ) que ce n'est pas moi qui change la valeur de la cellule liée à la liste...
- Est-ce que quelqu'un pourrait me mettre sur la piste d'une solution ? 🙂

Je vous remercie d'avance pour votre aide,
Emile
 
Merci jfmmarques pour votre suggestion. 🙂
Malheureusement ça ne va pas trop bien, par contre j'ai attribué la macro à la liste déroulante, et moyennant quelques modifs, ça fonctionne mieux qu'en passant par le worksheetChange.
 
Bonjour Emile,
en supposant que la plage d'entrée est une zone s'appelant "Liste",
1583943514558.png

et que la macro associée s'appelle CBX_Click :
( le code est conçu pour rester dans celui de la feuille, pas d'un module )

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case True
    Case Not Intersect([CodeSélection], Target.Cells(1)) Is Nothing: Call AppliquerFiltre
    Case Else: DoEvents
    End Select
    Application.Goto Cells(1), True
End Sub
Sub CBX_Click()
    Worksheet_Change Range(Shapes(Application.Caller).ControlFormat.LinkedCell)
End Sub
Sub AppliquerFiltre()
    MsgBox "J'ai cliqué sur l'élément " & [CodeSélection] & vbLf & _
            "qui correspond à """ & [Liste].Cells([CodeSélection]) & """"
End Sub

Mais il est vrai que le worksheet_change n'est pas vraiment utile, autant tout faire dans la macro associée.
VB:
Sub CBX_Appliquerfiltre()
    With Shapes(Application.Caller).ControlFormat
        MsgBox "J'ai cliqué sur l'élément " & Range(.LinkedCell) & vbLf & _
            "qui correspond à """ & Range(.ListFillRange).Cells(Range(.LinkedCell)) & """", _
            vbInformation, Application.Caller
    End With
    Application.Goto Cells(1), True
End Sub
 
re
un combobox
comment est elle remplie? par un autre range ou le range concerné??

-----------------------------------------------
si pas range concerné
dans ca cas la il te faut le match de la valeur dans la plage de recherche dans son événement click ou change
un petit evaluate index>>equiv fera très bien l'affaire ou les fonctions native find etc....
----------------------------------------
si range concerné et contiguë
le listindex+1 est tout indiqué
---------------------------------------
si range concerné et non contigues
tu aurait du mettre une 2d colonne et dans le additem de ta boucle ajouter le row
et le .list(.listindex,1) te donnerais la bonne ligne
-------------------------------------------------
dernière solution
tu filtre ,tu prend la 2eme, tu defiltre
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
0
Affichages
566
Réponses
6
Affichages
416
Retour