Création d'une liste déroulante dans une cellule,référence variable Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
C
ConstrucGEVAR
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 10 mars 2018
Version d'Excel : 2016

Message par ConstrucGEVAR » 20 avril 2018, 09:02

Bonjour à tous :D

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 :D
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 20 avril 2018, 10:12

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
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
C
ConstrucGEVAR
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 10 mars 2018
Version d'Excel : 2016

Message par ConstrucGEVAR » 20 avril 2018, 12:54

Bonjour Theze ,

Le code fonctionne à merveille! . Il faut juste changer "Feuil4" par le nom donné à la feuille. :D

Merci :mrgreen:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message