Bonjour à toutes et à tous,
j'ai besoin de vos lumières concernant une procédure événementielle (changement de valeur dans une cellule).
Je n'arrive pas à avoir une feuille contenant plus d'une colonne avec liste de validation
Concrêtement, dans le fichier joint, feuille "Saisie" j'ai
Colonne B : liste de validation via liste qui pointe en feuille "Supports"
Colonne C : liste de validation sélective, selon contenu de la colonne B (voir code, ex : si B=Parcelles, alors on pioche dans feuille "Parcelles" colonne B)
Colonne D : en fonction de ce qui a été sélectionné en C, on colle unité1 correspondant (ex : si parcelle 2, alors unité1= m²)
Colonne E : en fonction de ce qui a été sélectionné en C, on colle la base correspondant (ex : si parcelle 2, alors base= 1725)
Colonne F : liste de validation sélective, selon contenu de la colonne B (si B=Parcelles, alors on pioche dans feuille Activités_parcelles, colonne A)
et ainsi de suite pour les 4 types de support
Mon souci est que je n'arrive pas à avoir plus d'une liste de validation qui fonctionne (dans la pièce jointe, je n'ai essayé qu'avec deux et même ça, ça plante)
J'ai l'impression que je ne dois pas définir les bonnes zones au bon moment mais je ne sais pas où ça pêche …
Quelqu'un a-t-il une idée d'où vient mon erreur ?
Merci d'avance
j'ai besoin de vos lumières concernant une procédure événementielle (changement de valeur dans une cellule).
Je n'arrive pas à avoir une feuille contenant plus d'une colonne avec liste de validation
Concrêtement, dans le fichier joint, feuille "Saisie" j'ai
Colonne B : liste de validation via liste qui pointe en feuille "Supports"
Colonne C : liste de validation sélective, selon contenu de la colonne B (voir code, ex : si B=Parcelles, alors on pioche dans feuille "Parcelles" colonne B)
Colonne D : en fonction de ce qui a été sélectionné en C, on colle unité1 correspondant (ex : si parcelle 2, alors unité1= m²)
Colonne E : en fonction de ce qui a été sélectionné en C, on colle la base correspondant (ex : si parcelle 2, alors base= 1725)
Colonne F : liste de validation sélective, selon contenu de la colonne B (si B=Parcelles, alors on pioche dans feuille Activités_parcelles, colonne A)
et ainsi de suite pour les 4 types de support
Mon souci est que je n'arrive pas à avoir plus d'une liste de validation qui fonctionne (dans la pièce jointe, je n'ai essayé qu'avec deux et même ça, ça plante)
J'ai l'impression que je ne dois pas définir les bonnes zones au bon moment mais je ne sais pas où ça pêche …
Quelqu'un a-t-il une idée d'où vient mon erreur ?
Merci d'avance
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim f As String
Dim Colonne_Support As Range
Dim dernlig As Long
Dim Lastline As Long
Dim MyValue As Variant
' --- Première partie : création des listes de validation sélectives
dernlig = Sheets("Saisie").Range("C" & Rows.Count).End(xlUp).Row
Set Colonne_Support = Sheets("Saisie").Range("C2:C" & dernlig)
If Not Intersect(Target, Colonne_Support) Is Nothing Then
For Each Target In Colonne_Support
Select Case Target
Case "Parcelle"
Lastline = Sheets("Parcelles").Range("A" & Rows.Count).End(xlUp).Row
f = "=Parcelles!$B$2:$B$" & Lastline
Case "Matière"
Lastline = Sheets("Matières").Range("A" & Rows.Count).End(xlUp).Row
f = "=Matières!$B$2:$B$" & Lastline
Case "Fourniture"
Lastline = Sheets("Fournitures").Range("A" & Rows.Count).End(xlUp).Row
f = "=Fournitures!$B$2:$B$" & Lastline
Case "Prestation"
Lastline = Sheets("Prestations").Range("A" & Rows.Count).End(xlUp).Row
f = "=Prestations!$B$2:$B$" & Lastline
End Select
With Target(1, 2).Validation
.Delete
.Add xlValidateList, Formula1:=f
End With
Next Target
End If
' --- Deuxième partie : remplissage des colonnes D et E dans feuille "Saisie" en fonction
' du contenu de la colonne C
Dim PlageParcelles As Range
Dim PlageMatières As Range
Dim PlageFournitures As Range
Dim PlagePrestations As Range
Dim k As Variant
Dim zone As Range
For Each Target In Colonne_Support
Select Case Target
Case "Parcelle"
Set k = Sheets("Parcelles")
Case "Matière"
Set k = Sheets("Matières")
Case "Fourniture"
Set k = Sheets("Fournitures")
Case "Prestation"
Set k = Sheets("Fournitures")
End Select
Next Target
If Not Intersect(Target, Colonne_Support) Is Nothing Then
Set zone = k.[A:A].Find(what:=Target.Value)
Target.Offset(0, 1).Value = zone.Offset(0, 1).Value
Target.Offset(0, 2).Value = zone.Offset(0, 2).Value
End If
End Sub