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 SubBonjour,
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) & existceci 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) & existce 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.