Liste déroulante auto filtrée

Bonjour à tous,

Je sollicite votre aide une nouvelle fois pour un fichier de planification que vous trouverez en pièce jointe.

Vous voyez sur le fichier des promotions sur la première colonne et des dates en ligne une qui continueront sur plusieurs mois.

Entre chaque promotion, il y a une ligne où l'on va mettre la salle qui sera associée à cette promotion.

La problématique est que pour chaque salle il y a un effectif maximum (détaillé feuille 2).

Sur chaque ligne "Salle", j'aimerais savoir s'il est possible que la liste soit auto filtrée et ne puisse proposer que les bonnes salles en prenant en compte les éléments ci-dessous :

- La même salle ne peut pas être proposée à deux promotions différentes le même jour (donc sur la même colonne)

- Si l'effectif de la promo est de 30 par exemple sur la cellule B4, on ne doit pas pouvoir y proposer une salle de capacité 20 personnes en B5.

- La salle ZOOM est une salle digitale, elle ne fait pas partie des deux conditions précédentes, elle doit pouvoir être mise plusieurs fois et peu importe l'effectif.

Je n'arrive pas avec un calcul à prendre en compte ces trois contraintes, c'est peut être infaisable en l'état.

Merci beaucoup pour votre aide précieuse sur le sujet.

Bastien

Bonjour

Un essai à tester. Te convient-il ?

Option Explicit

Dim tablo, tablo1, tablo2, f1 As Worksheet, f2 As Worksheet
Dim i1&, i2&, j&, capM&, cap&, salle$, flag&

Sub DésignerLesSalles()

    Set f1 = Sheets("Feuil1")
    tablo1 = f1.Range(f1.Cells(3, 1), f1.Cells(Range("A" & Rows.Count).End(xlUp).Row, _
            f1.Cells(3, Columns.Count).End(xlToLeft).Column))
    Set f2 = Sheets("Feuil2")

    tablo = f2.Range("A1:C" & f2.Range("A" & Rows.Count).End(xlUp).Row)
    f2.Range("A2:C" & f2.Range("A" & Rows.Count).End(xlUp).Row).Sort _
            key1:=f2.Range("B2"), order1:=xlDescending, Header:=xlYes

    cap = Application.Max(f2.Range("B2:B" & f2.Range("B" & Rows.Count).End(xlUp).Row)) + 1
    For j = 2 To UBound(tablo1, 2)
        tablo2 = f2.Range("A1:C" & f2.Range("A" & Rows.Count).End(xlUp).Row)
        For i1 = 1 To UBound(tablo1, 1) Step 2
            flag = 0
            For i2 = 2 To UBound(tablo2, 1) - 1
                If tablo1(i1, j) <= tablo2(i2, 2) Then
                    cap = tablo2(i2, 2)
                    tablo2(i2, 2) = 0
                    salle = tablo2(i2, 3)
                    flag = 1
                    Exit For
                End If
            Next i2
            If flag = 1 Then
                tablo1(i1 + 1, j) = salle
            Else
                tablo1(i1 + 1, j) = "ZOOM"
            End If
        Next i1
    Next j
    f1.Range("A3").Resize(UBound(tablo1, 1), UBound(tablo1, 2)) = tablo1
    f2.Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub

Bye !

Bonjour,

Merci ça m'a bien servit !

Bonne journée

Rechercher des sujets similaires à "liste deroulante auto filtree"