Compléter une liste déroulante

Bonjour,

J'aimerais faire un menu déroulant dynamique dans la cellule B6

La liste du menu déroulant devra être complétée par les futures données que l'utilisateur mettra dans la cellule B6.

Par exemple si l'utilisateur mettra dans la cellule B6 le mot "TEST" ce mot devra compléter la liste déroulante comprise dans la colonne G.

Voir pièce jointe

Pouvez-vous me dire comment faire ?

Merci pour votre aide.

17comptes-03b.xlsm (19.34 Ko)

Salut

comme ceci, sans doute...

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%, iOK%, sItem$
'
If Not Intersect(Target, Range("B6:B" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    Target.Validation.Delete
    If Target <> "" Then
        iOK = 10
        sItem = Target.Value
        iRow = Range("G" & Rows.Count).End(xlUp).Row
        If iRow > 9 Then
            iOK = iRow + 1
            If WorksheetFunction.CountIf(Range("G10:G" & iRow), sItem) > 0 Then iOK = 2
        End If
        If iOK > 2 Then Range("G" & iOK).Value = sItem
    End If
End If
'
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim iRow%
'
If Not Intersect(Target, Range("B6:B" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    iRow = Range("G" & Rows.Count).End(xlUp).Row
    If iRow > 9 Then
        If iRow > 10 Then Range("G10:G" & iRow).Sort key1:=Range("G10"), order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlNo
        With Target.Validation
            .Delete
            .Add xlValidateList, , , Formula1:="=G9:G" & iRow
        End With
    End If
End If
'
End Sub

A+

10comptes-03b.xlsm (23.36 Ko)

Merci curulis57,

Mais peut tu me dire comment insérer cette macro dans mon fichier et comment la faire démarrer.

Merci pour ton aide

3comptes-03b.xlsm (18.70 Ko)

Salut Langa68,

les macros doivent être collées dans le module VBA de la feuille contenant cette liste de validation.

Cette liste de validation se "construit" automatiquement lorsque tu cliques en colonne [B:B] "Libellé" pour autant qu'il y ait une date en [A:A].

Si tu cliques sur la valeur "vide", tu peux alors ajouter une nouvelle entrée qui ira s'ajouter (triée et "Majusculée") à ta liste.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%, iOK%
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("B6:B" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    Target.Validation.Delete
    If Target <> "" Then
        iOK = 10
        Target = WorksheetFunction.Proper(Target)
        iRow = Range("G" & Rows.Count).End(xlUp).Row
        If iRow > 9 Then
            iOK = iRow + 1
            If WorksheetFunction.CountIf(Range("G10:G" & iRow), Target) > 0 Then iOK = 2
        End If
        If iOK > 2 Then Range("G" & iOK).Value = Target
        Target.Offset(0, -1).Select
    End If
End If
'
Application.EnableEvents = True
'
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim iRow%
'
If Not Intersect(Target, Range("B6:B" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    iRow = Range("G" & Rows.Count).End(xlUp).Row
    If iRow > 9 Then
        If iRow > 10 Then Range("G10:G" & iRow).Sort key1:=Range("G10"), order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlNo
        With Target.Validation
            .Delete
            .Add xlValidateList, , , Formula1:="=G9:G" & iRow
        End With
    End If
End If
'
End Sub

Rien de sorcier là-dedans...

A+

7langa.xlsm (23.46 Ko)

bonjour

une contribution sans vba tout en souplesse

13langua-68.xlsm (23.86 Ko)

cordialement

Super Tulipe et un grand MERCI . C'est exactement ce qu'il me fallait.

Seulement il y a un Hic: Je ne comprend pas la formule.

Pourrait tu me l'expliquer?

Merci

bonsoir

c'est dur car le concept est assez abstrait

1) excel ne fonctionne qu'avec des codes numériques , ce qui permet de reprerer ,trier .... un tas de trucs

2)INDEX marche avec des positions , ici ,c'est Equiv qui les donne

3) le grand principe est de repérer la position d'une valeur qui n'a pas encore "detectée" dans les 2 plages (la colonne et la liste) , donc 0 , c'est pour cela que les criteres de NB.SI (plage,liste ) commencent une cel en amont de la liste ainsi au fur et à mesure de l'incrementation donc des mots qui ne seront plus comptés

4) Equiv , mais dans quoi , eh bien dans une matrice virtuelle composée de valeurs de classements (code numerique) c'est la partie NB.SI (plage; "<"& plage ) qui renvoie un nb de valeurs par rapport à" l'alphabet "de la plage , à laquelle on va oter les "fraichement découverte (liste ) c'est SOMME(nb.si(plage;liste) ,ainsi rien ne se repete

il ne faut pas oublier que EQUIV recherche un 0 (le premier)

Doliprane ?????

cordialement

Bonsoir,

Un exemple

Boisgontier

Merci à tulipe 4 et à Boisgontier

Rechercher des sujets similaires à "completer liste deroulante"