Bonjour à toutes et à tous,
J'ai relevé ce code réalisé par Steelson.
dans cette discussion :https://forum.excel-pratique.com/viewtopic.php?f=2&t=117477
Const nbZones = 8
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim data() As Variant
Dim choix() As Variant
Dim dico As Object
Dim i&, iData&, iZone&, plus&
If Target.Count <> 1 Then Exit Sub
plus = Target.Row - 1
If plus = 0 Then Exit Sub
ReDim choix(1 To nbZones)
For i = 1 To nbZones
choix(i) = Range("zone" & i).Offset(plus, 0).Value
If Not Intersect(Range("zone" & i).Offset(plus, 0), Target) Is Nothing Then
data = [TabData].Value
Set dico = CreateObject("Scripting.Dictionary")
For iData = 1 To UBound(data)
flag = True
If i > 1 Then
For iZone = 1 To i - 1
If choix(iZone) <> CStr(data(iData, iZone)) Then flag = False
Next
End If
If flag Then dico(CStr(data(iData, i))) = ""
Next iData
If dico.Count > 0 Then
Target.Validation.Delete
Target.Validation.Add xlValidateList, Formula1:=Join(dico.keys, ",")
End If
Exit For
End If
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
plus = Target.Row - 1
If plus = 0 Then Exit Sub
For i = 1 To nbZones
If Not Intersect(Range("zone" & i).Offset(plus, 0), Target) Is Nothing Then
If i < nbZones Then
Application.EnableEvents = False
For iZone = i + 1 To nbZones
With Range("zone" & iZone).Offset(plus, 0)
.Value = ""
.Validation.Delete
End With
Next
Application.EnableEvents = True
End If
Exit For
End If
Next
End Sub
Je n'arrive pas à l'adapter à ce que je souhaite faire, c'est à dire :
- Commercer les colonnes qui comporte la première liste de validation en colonne F;
- Dans l'ancienne discussion, Steelson avait noté,
Les en-têtes de colonnes de la page dans laquelle s'affichent les listes déroulantes doivent s'appeler zone1, zone2 etc ...
.
Serait il possible que les les en-têtes de colonnes dans laquelle s'affichent les listes déroulantes porte le même nom que les en-têtes de la TabData ?
Steelson si vous passez par là ; sinon, merci a vous de prendre du temps pour me permettre d'avancer
Eric