Liste de choix différente en fonction d'une cellule
Bonjour @ tous,
En principe, je n'aime pas demander des choses ainsi des le premier sujet d'un forum mais la je galère trop et ma compétence autodidacte sur Excel est arrivée au bout. :)
Je vais essayer de faire simple pour me faire comprendre:
J'ai une cellule avec une validation des données de type "liste"
Cette liste est la suivante (c'est juste un extrais):
| 25-50/5-5 |
| 40/1 |
| 40/5 |
| 50/1 |
| 50/5 |
| 50/5-1 |
| 50/5-5 |
| 50-100/1 |
| 50-100/5 |
| 50-100/5-1 |
| 50-100/5-5 |
| 100/1 |
| 100/5 |
| 100/5-1 |
| 100/5-5 |
| 100-200/1 |
| 100-200/5 |
Par exemple, j'aimerai, lorsque je choisis la valeur "50-100/5-1" avoir comme choix dans une cellule a côté a 50/5, 100/5, 50/1 ou 100/1.
si je choisi 100/5-1 avoir le choix a 100/5 et a 100/1
et si j'écris directement 65-130/5 (qui n'existe pas dans ma liste) avoir le choix a 65/5 et 130/5.
J'espère que je suis relativement clair.
J'ai déjà essayer plein de truc, hors macro mais c'est vraiment dur pour moi d'arriver a mes fins.
J'espère pourvoir être aider au maximum
En vous remerciant par avance.
Salut NufRadio,
Un peu alambiqué mais, bon...
- 1ère liste de validation en [C1]
- 2e liste de validation en [D1] qui se construit en colonne [B:B] : elle est ici apparente pour la démo.
Question
- /1-5 => 1 À 5 ou 1 OU 5 ?
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim tSplit, tSplit1, tSplit2, iNum%, iOK%
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("C1")) Is Nothing Then
If InStr(Target, "/") > 0 Then
Range("D1").Value = ""
Columns(2).Value = ""
Range("D1").Validation.Delete
If InStr(Target, "-") > 0 Then
tSplit = Split(Target, "/")
tSplit1 = Split(tSplit(0) & IIf(InStr(tSplit(0), "-") = 0, "-", ""), "-")
tSplit2 = Split(tSplit(1) & IIf(InStr(tSplit(1), "-") = 0, "-", ""), "-")
For x = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Range("A" & x).Value, "-") = 0 Then
iOK = 0
For y = 0 To 1
For Z = 0 To IIf(y = 0, UBound(tSplit1), UBound(tSplit2))
If IIf(y = 0, tSplit1(Z), tSplit2(Z)) <> "" Then _
iNum = IIf(y = 0, tSplit1(Z), tSplit2(Z)): _
If CInt(iNum) = CInt(Split(Range("A" & x).Value, "/")(y)) Then iOK = iOK + 1
Next
Next
If iOK = 2 Then Range("B" & Range("B" & Rows.Count).End(xlUp).Row + 1).Value = Range("A" & x).Value
End If
Next
iNum = WorksheetFunction.CountA(Columns(2))
If iNum = 1 Then
[D1] = [B2]
Else
If iNum = 0 Then
[C1] = ""
MsgBox "Pas de données correspondantes !", vbInformation + vbOKOnly, "NufRadio - Info"
Else
Range("D1").Validation.Add Type:=xlValidateList, Formula1:="=B2:B" & Range("B" & Rows.Count).End(xlUp).Row
End If
End If
[D1].Select
End If
Else
[C1] = ""
MsgBox "Donnée invalide !", vbInformation + vbOKOnly, "NufRadio - Info"
End If
End If
'
Application.EnableEvents = True
'
End Sub- tes options 65/5 et 130/5 DOIVENT quand même, elles, être présentes dans la liste, camarade !!
- en cas d'encodage sauvage sans données correspondantes, une alerte est émise.
A+
Bonsoir !
Oula j'étais loin du compte.
Je teste cela des que je peux et je te dis.
Pour répondre à ta question c'est 1 OU 5 le "-" c'est un OU même pour 100-200 c'est 100 OU 200
Merci pour ta rapidités !
Je l'ai essayé avec excel 2016 (celui de mon taf), je testerai avec mon 365 perso.

