Microsoft 365 Vider des listes déroulantes en cascade

axelgr

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de votre aide pour améliorer un code que j'utilise actuellement.

Pour citer ma source, il s'agit d'un code que j'ai trouvé dans un tutoriel sur le site votre assistante.net
Ce code permet de réinitialiser plusieurs listes déroulantes si on modifie la valeur d'une liste :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Reference As Range
    Set Reference = Intersect(Target, Range("C:C"))
    
    If Reference Is Nothing Then Exit Sub
    
    For Each Reference In Reference
        Range("D" & Reference.Row).Value = ""
        Range("E" & Reference.Row).Value = ""
        Range("F" & Reference.Row).Value = ""
    Next
    
End Sub

Pour traduire le code ci-dessus avec mes mots de novice :
Si on change la valeur d'une liste déroulante d'une cellule situé en colonne C, les cellules de la même ligne situées en colonne D, E et F se vident.

Ce code est appliqué à l'onglet Mouvement du fichier joint en exemple.
Je souhaiterai intégrer à ce code une ou plusieurs conditions supplémentaires.

- Si on change la valeur d'une liste déroulante d'une cellule situé en colonne D, les cellules de la même ligne situées en colonne E et F se vident.
- Si on change la valeur d'une liste déroulante d'une cellule situé en colonne E, la cellule de la même ligne située en colonne F se vide.

J'ai essayé de compléter ce code en tâtonnant, soit en rajoutant une condition "If", soit en rajoutant une nouvelle boucle "For", mais malheureusement mes compétences en VBA sont limitées.

Merci par avance pour votre aide.

Bonne fin de journée
Axel
 

Pièces jointes

  • Stock_Test_2024.xlsm
    54.3 KB · Affichages: 5
Solution
Salut, tu peux faire ceci:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Reference As Range

    Set Reference = Intersect(Target, Range("C:C,D:D,E:E"))

    If Reference Is Nothing Then Exit Sub

    Application.EnableEvents = False

    For Each Reference In Reference
        If Not Intersect(Reference, Range("C:C")) Is Nothing Then
            Range("D" & Reference.Row).Value = ""
            Range("E" & Reference.Row).Value = ""
            Range("F" & Reference.Row).Value = ""
        ElseIf Not Intersect(Reference, Range("D:D")) Is Nothing Then
            Range("E" & Reference.Row).Value = ""
            Range("F" & Reference.Row).Value = ""
        ElseIf Not Intersect(Reference, Range("E:E")) Is Nothing Then...

Franc58

XLDnaute Occasionnel
Salut, tu peux faire ceci:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Reference As Range

    Set Reference = Intersect(Target, Range("C:C,D:D,E:E"))

    If Reference Is Nothing Then Exit Sub

    Application.EnableEvents = False

    For Each Reference In Reference
        If Not Intersect(Reference, Range("C:C")) Is Nothing Then
            Range("D" & Reference.Row).Value = ""
            Range("E" & Reference.Row).Value = ""
            Range("F" & Reference.Row).Value = ""
        ElseIf Not Intersect(Reference, Range("D:D")) Is Nothing Then
            Range("E" & Reference.Row).Value = ""
            Range("F" & Reference.Row).Value = ""
        ElseIf Not Intersect(Reference, Range("E:E")) Is Nothing Then
            Range("F" & Reference.Row).Value = ""
        End If
    Next

    Application.EnableEvents = True

End Sub
 

axelgr

XLDnaute Nouveau
Bonjour à tous,

Je vous sollicite à nouveau car j'ai un petit soucis lorsque je souhaite supprimer une ligne du tableau.
En effet quand je supprime une ligne, le code VBA intervient sur la ligne inférieure et les valeurs des cellules se vident.

Je ne sais pas si c'est normal et si il existe une solution.

J'ai joint le nouveau fichier si mes explications ne sont pas très claires.

Merci par avance
Bonne journée
 

Pièces jointes

  • Stock_Test_2024.xlsm
    53.7 KB · Affichages: 3

axelgr

XLDnaute Nouveau
Bonjour,

Par exemple, je suis en cellule A8, clique droit, Supprimer ligne du tableau.
Quand je fais cette manipulation les cellules en colonnes D,E et F de la ligne 9 se vident.

Je joins à nouveau le fichier au cas où.
 

Pièces jointes

  • Stock_Test_2024.xlsm
    53.6 KB · Affichages: 1

Franc58

XLDnaute Occasionnel
Effectivement, quand une ligne est effacée, l'action est interceptée par l'évènement _Change et comme ça impacte les cellules de la colonne C, le code s'exécute sur la ligne qui s'est décalée vers le haut. Je ne vois pas trop comment contourner ce problème. De plus, en supprimant une ligne, ça décale tes formules et elles retournent une erreur, ça te fait un deuxième problème.
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman