ajouter dans la liste déroulante en ordre alphabétique

terpick

XLDnaute Occasionnel
Bonsoir le Forum,

Je essaie de créer un logiciel pour gérer ma collection de cartes.

La question: comment faire pour ajouter un mot dans la liste déroulante dans l'ordre alphabétique?

Actuellement je rajoute tout simplement une ligne dans ma liste dans la première position. Ca va, s'il y a peu d’enregistrements, mais quand j'aurai 100.... dure à chercher le mot nécessaire :)

Ci-joint mon fichier. On commence sur la feuille Accueil avec le bouton Wüst. Ensuite, on choisie Paramétrage, puis - Nouveau Jeu

Cijoint.fr - Service gratuit de dépôt de fichiers

Merci par avance !

A+
 

Etienne2323

XLDnaute Impliqué
Re : ajouter dans la liste déroulante en ordre alphabétique

Salut terpick,
à moins de n'avoir rien compris de ta question, pourquoi tu ne fait pas simplement, après avoir ajouter ton mot, un tri sur la plage qui contient tes données afin de les mettre en ordre alphabétique ??? Cela sera directement répercuté dans ta liste déroulante ...

Sinon, autre solution facile serait de déclencher une macro événementielle sur la colonne qui contient ta plage de données. Ainsi, dès que tu ajoutes un nouveau mot, la plage de données se met automatiquement en ordre alphabétique.

Cordialement,

Étienne
 

terpick

XLDnaute Occasionnel
Re : ajouter dans la liste déroulante en ordre alphabétique

salut Etienne,

le problème avec le tri, c'est qu'il faut le refaire à chaque fois après l'ajout du nouveau mot.

Par contre, la Macro événementielle serait pu être intéressant, mais je ne sais pas comment la construire, pourrais-tu me donner qques indices

Merci d'avance

Cijoint.fr - Service gratuit de dépôt de fichiers

PS le premier fichier était endommagé
 
Dernière édition:

terpick

XLDnaute Occasionnel
Re : ajouter dans la liste déroulante en ordre alphabétique

salut Etienne,

le problème avec le tri, c'est qu'il faut le refaire à chaque fois après l'ajout du nouveau mot.

Par contre, la Macro événementielle serait pu être intéressant, mais je ne sais pas comment la construire, pourrais-tu me donner qques indices

Merci d'avance

Cijoint.fr - Service gratuit de dépôt de fichiers

PS le premier fichier était endommagé
 

naru31

XLDnaute Nouveau
Re : ajouter dans la liste déroulante en ordre alphabétique

Salut,

Dans VBA,pour ta liste dans ta ComboBox, si tu ajoute le code suivant dans ton userform [Consultation_wust], ta liste se fera par rapport à tes donnée de A4 à A65534 :

Code:
Private Sub Userform_initialize()
Dim Plage As Range
With Sheets("C.L.Wüst")
    Set Plage = .Range("A4:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox.List = Plage.Value
End Sub

Et pour le tri automatique à partir de ta ligne 4, toujours dans VBA, tu peux rajouter soit dans la feuille [ThisWorkbook] le code suivant qui activera cette fonction dès que tu ouvre ton classeur

Code:
Sub worbook_open()
ActiveWorkbook.Worksheets("C.L.Wüst").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("C.L.Wüst").Sort.SortFields.Add Key:=Range("A4:A65536") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("C.L.Wüst").Sort
        .SetRange Range("A4:K65536")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

soit dans la feuille [C.L.Wüst] le code suivant qui activera cette fonction dès que tu basculera (=activera) ta feuille ton classeur

Code:
Sub worsheet_activate()
ActiveWorkbook.Worksheets("C.L.Wüst").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("C.L.Wüst").Sort.SortFields.Add Key:=Range("A4:A65536") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("C.L.Wüst").Sort
        .SetRange Range("A4:K65536")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

En espérant que ça t'aide :D
 

terpick

XLDnaute Occasionnel
Re : ajouter dans la liste déroulante en ordre alphabétique

Bonjour le Forum,
Salut naru31, je te remercie pour ta réponse, mais, malheureusement, rien ne se passe, si j'ajoute deux premières macros.

La première j'ai du placer dans une déjà existante:

Private Sub Userform_initialize()
Sheets("C.L.Wüst").Activate
Dim DerCell As String
Dim Plage As Range
With Sheets("C.L.Wüst")
Set Plage = .Range("A3:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox.List = Plage.Value
DerCell = Range("A3").End(xlDown).Address
ComboBox.RowSource = "A3:" & DerCell
End Sub

j'ai enregistré qques lignes, pas d'effet.

Je joins le fichier modifié:

Cijoint.fr - Service gratuit de dépôt de fichiers

Merci beaucoup

A+
 

klin89

XLDnaute Accro
Re : ajouter dans la liste déroulante en ordre alphabétique

Bonsoir le forum,
Bonsoir terpick,

Pour t'aider, dans le lien ci-dessous, j'ai repris le fichier du post #5# et décliner le code de Pierrot 93
https://www.excel-downloads.com/thr...eur-dans-la-liste-source-dun-combobox.157234/

VB:
Private Sub UserForm_Initialize()
With Sheets("Feuil1")
    ComboBox1.List = .Range("D1", .Range("D65536").End(xlUp)).Value
End With
End Sub

Private Sub CommandButton1_Click()
If ComboBox1.Value <> "" Then
  If IsError(Application.Match(ComboBox1.Value, ComboBox1.List, 0)) Then
    If MsgBox("Attention, ajout ?", vbYesNo) = vbYes Then
      Sheets("Feuil1").Range("D65536").End(xlUp)(2).Value = ComboBox1.Value
      ComboBox1.AddItem ComboBox1.Value
      With Sheets("Feuil1").Range("D1", Range("D65536").End(xlUp))
        .Sort key1:=Sheets("Feuil1").Range("D1")
      End With
    End If
  End If
End If
End Sub

Ou l'événement BeforeUpdate de la ComboBox :

VB:
Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If ComboBox1.Value <> "" Then
  If IsError(Application.Match(ComboBox1.Value, ComboBox1.List, 0)) Then
      Sheets("Feuil1").Range("D65536").End(xlUp)(2).Value = ComboBox1.Value
      ComboBox1.AddItem ComboBox1.Value
      With Sheets("Feuil1").Range("D1", Range("D65536").End(xlUp))
        .Sort key1:=Sheets("Feuil1").Range("D1")
      End With
  End If
End If
End Sub

Tu peux l'adapter à ton cas.

Pour une macro événementielle, vois la solution de boisgontier ci-dessous.

https://www.excel-downloads.com/threads/menu-deroulant-auto-incrementer.107158/

Klin89
 
Dernière édition:

Discussions similaires