Selection dynamique pour liste deroulante

Bonjour je cherche a automatiser la mise à jour d'une suite de liste déroulantes.

Les champs à sélectionne se trouvent tous sur la "Feuil1" et les cédules où je veux mettre a jour les listes déroulante se trouvent sur plusieurs feuilles, rangées par colonnes. j'ai vu plusieurs mise a jour dynamique mais elle ne font pas varier les colonnes et c'est ce qui me bloque.

Merci pour votre aide

Public Sub liste_deroulante()

Dim lon1(20) As Integer
Dim lon2(20) As Integer
Dim debut As Integer, exist As Integer
Dim ws As Worksheet
Dim tipe As String
Dim lim As Integer
Dim test As String
Dim bloq As Integer
Dim liste As String
Dim col As Integer

'boucle sur tous les types de feuilles
'~~~~~~~~~~~
For i = 1 To 6
    'il y a 40 colonnes pour chaque type de feuilles
    debut = 1 + (i - 1) * 40
    'la première ligne de la "feuil1" contient le début du nom des feuilles dans lesquel le traitement doit etre fait
    tipe = Sheets("Feuil1").Cells(1, debut + 1).Value
    'délimite lla première ligne du champs où se trouvera les liste deroulantes
    bloq = 39

'boucle sur toutes les colonnes du type en selection

    For col = debut + 1 To debut + 40
            'compte le nombre de com deja existant sur la colone
            exist = Application.WorksheetFunction.CountA(Columns(col))
            'boucle sur toutes les feuilles et execute seulement pour le type de feuille voulu
            For Each ws In Worksheets
                If ws.Name Like tipe Then

                        With Sheets("Feuil1")
                            liste = "=Feuil1!" & Cells(2, col) & "3:" & Cells(2, col) & exist
                        End With

                        ws.Select
                        Range(Cells(bloq, col - debut), Cells(bloq + 23, col - debut)).Select
                        With Selection.Validation
                            .Delete
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=liste"
                            .IgnoreBlank = True
                            .InCellDropdown = True
                            .InputTitle = ""
                            .ErrorTitle = ""
                            .InputMessage = ""
                            .ErrorMessage = ""
                            .ShowInput = True
                            .ShowError = True
                            'test = liste
                        End With
                End If
            Next ws
    Next col
Next i

End Sub

Bonjour,

Postes un classeur exemple anonymisé ça nous sera plus facile à comprendre et nous évitera de devoir en construire un !

Très bien merci du conseil, voici le fichier en version anonyme.

par contre sur la "Feuil1" sur la ligne 2 il y a deux fois les lettres de A à T pour chaque type de page (ligne 1) mais il ne faut pas tenir compte de la seconde a chaque fois.

Tu as plusieurs listes par type, donc, si je prend par exemple pour Distrib, il y a la lettre A avec dessous une liste, et il en est de même pour la lettre B, E et H, où ces listes doivent elles se trouver ? Je me doute que les listes sous Distrib doivent être dans la feuille Distrib mais dans quelle colonne ? Les listes doivent elles être les unes à la suite des autres ?

Tu as mis des lettres (A, B, C, etc...) et tu construis la référence par rapport à ces lettres mais tu as un décalage !

Prenons la première passe :

liste = "=Feuil1!" & Cells(2, col) & "3:" & Cells(2, col) & exist

ceci donne :

liste "=Feuil1!A3:A5"

mais en A3:A5 tu n'as rien, je pense qu'il te faut soit supprimer la colonne A qui n'est pas utilisée de façon à faire correspondre les lettres de colonnes avec tes lettres et dans ce cas, la liste comprendra bien tes trois valeurs soit, décaler la référence de cette façon :

liste = "=Feuil1!" & Cells(2, col).Offset(, 1) & "3:" & Cells(2, col).Offset(, 1) & exist

ce qui aura comme résultat :

liste "=Feuil1!B3:B5"

là où se trouve les valeurs.

En attendant un peu plus d'explications !

Ah oui effectivement merci, c'est vrai que je m'emmêlais les pinceaux entre les différentes colonnes. Merci pour ce point.

Les listes de la Feuil1 doivent allé dans les différentes feuilles sous la colonne donné par la lettre en ligne 2

Par exemple pour la liste qui commence en Feuil1!B3 la lettre correspondante est A et le type est Distrib donc je veux appliquer cette liste dans les cellules de la feuille Distrib à la colonne A.

J'espère avoir pu bien expliqué.

Merci pour ton aide.

Rechercher des sujets similaires à "selection dynamique liste deroulante"