Création d'une liste déroulante dans une cellule,référence variable
C
Bonjour à tous
J'ai une petit soucis, je souhaiterais réaliser une liste déroulante dans plusieurs cellules d'une page X. Cette liste déroulante fait référence à une liste variable dans une page 4. La liste est fonction du nombre d'élément que l'utilisateur à réalisé.
Private Sub Worksheet_Activate() ' lors de l'ouverture de la page X la liste se créée
Dim listparoi As String
Dim userRange As String
Dim indiceparoi As Integer
Dim indligne As Integer
nbparoislist = 3 ' renvoie le nombre d'éléments dans la liste parois de la page 4
While Feuil4.Cells(nbparoislist, 1) <> ""
nbparoislist = nbparoislist + 1
Wend
'
''Set userRange = Worksheets("Parois").Range(Range("A4"), Range("A1000").End(xlUp))
For indligne = 2 To 28 ' je souhaite que cette liste se retrouve dans les cellules " C2 à C28"
indiceparoi = 3
For indiceparoi = 3 To nbparoislist ' Affiche la liste des locaux
userRange = Feuil4(indiceparoi, 1)
Cells(indligne, 3).AddItem userRange '
Next indiceparoi
With Cells(indligne, 3).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & userRange.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next indligne
End Sub
J'espère que je ne suis pas trop diffus ^^
Merci d'avance
Bonne journée
T
Bonjour,
Voici un code à tester, voir les commentaires pour les explications :
Private Sub Worksheet_Activate() ' lors de l'ouverture de la page X la liste se créée
Dim Plage As Range
'défini la plage sur la feuille "Feuil4" en colonne A à partir de A3, à adapter...
With Worksheets("Feuil4"): Set Plage = .Range(.Cells(3, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
'supprime le nom
On Error Resume Next
ThisWorkbook.Names("Parois").Delete
On Error GoTo 0
'puis le défini à la nouvelle plage
Plage.Name = "Parois"
'insère les listes de validation en une suele fois dans
'le Range voulu (ici, C2 à C28 sur la feuille active)
With ActiveSheet
With .Range("C2:C28").Validation
.Delete
.Add 3, 1, 1, Plage.Name
End With
End With
End Sub
C
Bonjour Theze ,
Le code fonctionne à merveille! . Il faut juste changer "Feuil4" par le nom donné à la feuille.
Merci