Liste déroulante excluant un élément déjà choisi
Bonjour à tous !
J'ai parcouru le forum pour essayer de trouver de l'aide mais les explications que j'ai pu y trouver dépassent mes compétences sur Excel... Je suis vraiment débutante mais je ne me démonte pas, et je compte bien apprendre si vous voulez bien m'aider !
Voilà ce que je voudrais faire : j'ai fait plusieurs tableaux avec des créneaux horaires.
Pour chaque créneau horaire, mes utilisateurs devront choisir une donnée dans une liste déroulante (le nom d'un enseignant).
Or, j'ai deux tableaux pour une même journée (dans mon cas, j'ai deux jurys d'examens sur une même journée), je voudrais donc que sur un même créneau horaire le même jour, on ne puisse pas choisir le même enseignant.
Ce qui reviendrait à dire, dans mon fichier, qu 'en I9 et en I21, on ne puisse pas avoir deux fois le même prénom et donc que liste déroulante évolue en fonction des choix qui ont déjà été faits.
Est-ce que je suis claire ?
Je ne sais pas du tout si c'est possible... Est-ce que ça vous parle ?
Un grand merci d'avance à la communauté !
Salut Marie,
voici ton fichier, à tester en situation réelle!
Attention, toutefois, cette version ne fonctionnera que si tu limites tes cessions à 2 par date!
Il te suffit de cliquer en colonne 'I' pour que la liste de validation s'adapte au créneau horaire correspondant.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Range("I:I")) Is Nothing Then
iFlagMOD = Target.Row Mod 14
If iFlagMOD > 5 And iFlagMOD < 14 And iFlagMOD <> 9 Then
iFlagDATE = Target.Row - (iFlagMOD - 1)
sFlagDATE = Cells(iFlagDATE, 1)
For x = 1 To Cells(Rows.Count, 9).End(xlUp).Row Step 14
If Cells(x, 1) = sFlagDATE And x <> iFlagDATE Then
sFlagDIR = Cells(x, 9).Offset(iFlagMOD - 1, 0)
With Worksheets("BDD")
iRow = .Cells(Rows.Count, 3).End(xlUp).Row
For y = 2 To iRow
If .Cells(y, 3) <> sFlagDIR Then
iIdx = iIdx + 1
.Cells(iIdx, 4) = .Cells(y, 3)
End If
Next
End With
Range("I" & Target.Row).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="='BDD'!$D$1:$D$" & iIdx
.IgnoreBlank = True
.InCellDropdown = True
End With
Exit For
End If
Next
End If
End If
'
End SubA+
Cher Curulis,
j'ai testé le fichier que tu as modifié, et tu as réussi à faire exactement ce dont j'avais besoin...
C'est top ! Par contre, je t'avoue que je ne comprends pas grand chose à ta formule magique. Je dois être loin derrière en termes de niveau sur Excel.
Je suis très reconnaissante, merci beaucoup. J'espère que ça pourra aider d'autres membres également.
Très belle journée à tous.