Bonjour à toutes et à tous,
je m'arrache les cheveux à vouloir introduire dans la même feuille plusieurs listes de validation qui, selon les cas, vont pointer dans des tables distinctes.
En feuille "Saisie", je sélectionne un élément en colonne B, puis en colonne C, en fonction de ce qui figure en colonne B, la liste de validation affiche les choix possibles
Jusqu'ici ça fonctionne
Mais en colonne F, en fonction de ce qui figure en colonne B devrait - théoriquement - apparaître là aussi une autre liste de validation sélective
Malheureusement, ça plante et je ne sais pas si c'est dû à mon code (syntaxe foireuse ?) ou si ça n'est tout simplement pas possible …
Je me demande en effet si l'erreur ne tient pas au fait que j'ai deux fois If Not Intersect(Target …
Quelqu'un peut-il me dire si :
1) on peut avoir plusieurs fois If not Intersect(Target … dans la même Private Sub ?
2) il y a une alternative : autre code ? Mon exemple ici est simplifié (avec select case comportant 4 branches) mais la réalité sera supérieure donc difficile de mettre une formule alambiquée en Données/Validation de données
D'avance, merci pour vos lumières
je m'arrache les cheveux à vouloir introduire dans la même feuille plusieurs listes de validation qui, selon les cas, vont pointer dans des tables distinctes.
En feuille "Saisie", je sélectionne un élément en colonne B, puis en colonne C, en fonction de ce qui figure en colonne B, la liste de validation affiche les choix possibles
Jusqu'ici ça fonctionne
Mais en colonne F, en fonction de ce qui figure en colonne B devrait - théoriquement - apparaître là aussi une autre liste de validation sélective
Malheureusement, ça plante et je ne sais pas si c'est dû à mon code (syntaxe foireuse ?) ou si ça n'est tout simplement pas possible …
Je me demande en effet si l'erreur ne tient pas au fait que j'ai deux fois If Not Intersect(Target …
Quelqu'un peut-il me dire si :
1) on peut avoir plusieurs fois If not Intersect(Target … dans la même Private Sub ?
2) il y a une alternative : autre code ? Mon exemple ici est simplifié (avec select case comportant 4 branches) mais la réalité sera supérieure donc difficile de mettre une formule alambiquée en Données/Validation de données
D'avance, merci pour vos lumières
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim f As String
Dim Colonne As Range
Dim dernierelign As Long
Dim Lastline As Long
' --- Traitement première partie : remplissage colonne C via liste de validation
dernierelign = Sheets("Saisie").Range("B" & Rows.Count).End(xlUp).Row
Set Colonne = Sheets("Saisie").Range("B2:B" & dernierelign)
If Not Intersect(Target, Colonne) Is Nothing Then
For Each Target In Colonne
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
' Traitement deuxième partie : remplissage colonne F via liste de validation
Dim MyF As String
Dim MaPlage As Range
Dim dernlig As Long
dernlig = Sheets("Saisie").Range("B" & Rows.Count).End(xlUp).Row
Set MaPlage = Sheets("Saisie").Range("B2:B" & dernlig)
If Not Intersect(Target, MaPlage) Is Nothing Then
For Each Target In MaPlage
Select Case Target
Case "dernlig"
Lastline = Sheets("Activités_parcelles").Range("A" & Rows.Count).End(xlUp).Row
MyF = "=Activités_parcelles!$A$2:$A$" & dernlig
Case "Matière"
dernlig = Sheets("Activités_matières").Range("A" & Rows.Count).End(xlUp).Row
MyF = "=Activités_matières!$A$2:$A$" & dernlig
Case "Fourniture"
dernlig = Sheets("Activités_fournitures").Range("A" & Rows.Count).End(xlUp).Row
MyF = "=Activités_fournitures!$A$2:$A$" & dernlig
Case "Prestation"
dernlig = Sheets("Activités_prestations").Range("A" & Rows.Count).End(xlUp).Row
MyF = "=Activités_prestations!$A$2:$A$" & dernlig
End Select
With Target(1, 5).Validation ' car la liste est en 5e position
.Delete
.Add xlValidateList, Formula1:=MyF
End With
Next Target
End If
End Sub