ListBox en fonction du choix d'une combobox

  • Initiateur de la discussion Initiateur de la discussion apdf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apdf

XLDnaute Occasionnel
Bonsoir à tous,

Voila j'ai un USF avec 1 combobox et une Listbox je recherche avec ma combobox dans la colonne "B" les code postaux et j'aimerais que les noms ville correspondant aux code se trouve dans la listbox.
En sachant que la liste des Code postaux et des villes font environ 38000 lignes.

Merci d'avance
 

Pièces jointes

Dernière édition:
Re : ListBox en fonction du choix d'une combobox

Bonsoir apdf,

Voici ron fichier mis à jour.

Remarque : il serait bon de revoir le code pour remplissage de la liste des codes postaux. L'utilisation d'un tableau ou d'une collection permettrait de supprimer les multiples doublons. Je n'ai pas le temps d'y regarder maintenant mais plus tard si tu le désires.

En te souhaitant une bonne soirée.

Cordialement.
 

Pièces jointes

Re : ListBox en fonction du choix d'une combobox

Bonsoir Papou,

Je te remercie et si plus tard tu peut, je peut joindre mon code peut être se seras plus clair.

Code:
Option Explicit
Private Sub CheckBox1_Click()
With Sheets("Feuil1")
  If .AutoFilterMode = True Then .AutoFilterMode = False
  If Me.CheckBox1 Then
    Me.CheckBox1.Caption = "Ville"
    Label_ville_cp1 = "Ville :"
    tb1 = .Range("A2:A" & derlg)
    ComboBox_ville_cp1.List = tb1
    Label_ville_cp2 = "Code Postal :"
    Set TbCp = Nothing
    cp_doublon
    ComboBox_ville_cp2.List = tablo
     Label2 = "Recherche par Ville :"
    
  Else
    Me.CheckBox1.Caption = "CP"
    Label_ville_cp1 = "Code Postal :"
    Set TbCp = Nothing
    cp_doublon
    ComboBox_ville_cp1.List = tablo
    tb1 = .Range("A2:A" & derlg)
    Label_ville_cp2 = "Ville :"
    ComboBox_ville_cp2.List = tb1
    Label2 = "Recherche par Code Postal :"
    
End If
ComboBox_ville_cp1.ListIndex = -1
ComboBox_ville_cp2.ListIndex = -1
TextBox_dept = ""
TextBox_Region = ""
TextBox_Sp = ""
TextBox_Prefect = ""
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
End With
End Sub
 
Private Sub CmdAnnuler_Click()
Unload Me
End Sub
 
Private Sub ComboBox_ville_cp1_Change()
Application.ScreenUpdating = False
Dim verif As Boolean
ComboBox_ville_cp2.Clear
With Sheets("Feuil1")
  If CheckBox1 Then
    .Range("$A$1:$I$1").AutoFilter
    .Range("$A$1:$I$" & derlg).AutoFilter Field:=1, Criteria1:=ComboBox_ville_cp1
    tb2 = .Range("A2:I" & derlg).SpecialCells(xlCellTypeVisible)
    ComboBox_ville_cp2.AddItem tb2(1, 2)
    TextBox_dept = tb2(1, 3)
    TextBox_Region = tb2(1, 4)
    TextBox_Sp = tb2(1, 6)
    TextBox_Prefect = tb2(1, 5)
    TextBox1 = tb2(1, 7)
    TextBox2 = tb2(1, 8)
     TextBox3 = tb2(1, 9)
    
    .AutoFilterMode = False
  Else
    If Len(ComboBox_ville_cp1) = 5 Then
      .Range("$A$1:$I$1").AutoFilter
      .Range("$A$1:$I$" & derlg).AutoFilter Field:=2, Criteria1:=ComboBox_ville_cp1
      tb2 = .Range("A2:I" & derlg).SpecialCells(xlCellTypeVisible)
      For x = 1 To UBound(tb2, 1)
        ComboBox_ville_cp2.AddItem tb2(x, 1)
      Next x
      TextBox_dept = tb2(1, 3)
      TextBox_Region = tb2(1, 4)
      TextBox_Sp = tb2(1, 6)
      TextBox_Prefect = tb2(1, 5)
      ComboBox_ville_cp2.ListIndex = 0
      TextBox1 = tb2(1, 7)
      TextBox2 = tb2(1, 8)
      TextBox3 = tb2(1, 9)
      
      .AutoFilterMode = False
    End If
  End If
  If Len(ComboBox_ville_cp1) = 5 Then
    verif = False
    For y = 1 To UBound(tb2, 1)
      If Str(tb2(y, 2)) = Str(ComboBox_ville_cp1) Then
        verif = True: Exit For
      End If
    Next y
    If verif = False Then
      MsgBox "aucune correspondance trouvée"
      ComboBox_ville_cp2.Value = "INCONNU"
      ComboBox_ville_cp2.Clear
      TextBox_dept = ""
      TextBox_Region = ""
      TextBox_Sp = ""
      TextBox_Prefect = ""
    End If
  End If
End With
Application.ScreenUpdating = True
End Sub
 
Private Sub UserForm_Activate()
Set TbCp = Nothing
With Sheets("Feuil1")
  If .AutoFilterMode = True Then .AutoFilterMode = False
  derlg = .Range("A" & .Rows.Count).End(xlUp).Row
  Me.CheckBox1.Caption = "CP"
  Label_ville_cp1 = "Code Postal :"
  cp_doublon
  ComboBox_ville_cp1.List = tablo
  tb1 = .Range("A2:A" & derlg)
  Label_ville_cp2 = "Ville :"
  ComboBox_ville_cp2.List = tb1
End With
End Sub
Bonne soirée
 
Re : ListBox en fonction du choix d'une combobox

RE apdf,

Comme promis, voici une version qui élimine les doublons.

Par ailleurs, je crois comprendre que les Cantons ne doivent pas apparaître dans la liste, seules les communes doivent y figurer. Voici qui est fait.

Espérant avoir répondu à ta demande.

Cordialement.
 

Pièces jointes

Re : ListBox en fonction du choix d'une combobox

Re,

Je reviens sur notre code qui est nickel et rien à dire, juste lui apporter une petite modification si tu le permets. Quand on affiche dans la ListBox la liste des villes, la première ligne qui est intitulé "Canton de .........." n'est pas dans la ListBox est c'est normal !
Peut-on l'ajouter dans le TexBox qui se trouve au-dessus de la ListBox ?
Et rajouter au label nommé "Label_Canton_de" le nom du chef-lieu

Cela dit si tu veux bien et que t'on emploie du temps te le permet.

Je te remercie d'avance

Ci joint mon fichier modifier.
 

Pièces jointes

Re : ListBox en fonction du choix d'une combobox

Bonjour,

Voir PJ

Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("feuil1")
  Set mondico = CreateObject("scripting.dictionary")
  Set code = f.Range("b2:b" & f.[b65000].End(xlUp).Row)
  temp = code
  For i = 1 To UBound(temp, 1)
     If temp(i, 1) <> "" Then mondico(temp(i, 1)) = ""
  Next i
  Me.ComboBox1.List = mondico.Keys
End Sub

Private Sub ComboBox1_Change()
  Me.ListBox1.Clear
  Set c = [B:B].Find(Me.ComboBox1, , , xlWhole)
  If Not c Is Nothing Then
    premier = c.Address
    Do
      Me.ListBox1.AddItem c.Offset(, 9).Value
      Set c = [B:B].FindNext(c)
    Loop While Not c Is Nothing And c.Address <> premier
  End If
  Me.TextBox1 = Me.ListBox1.List(0)
  Me.ListBox1.RemoveItem 0
End Sub

ou

Code:
Dim mondico
Private Sub UserForm_Initialize()
  Set f = Sheets("feuil1")
  Set mondico = CreateObject("scripting.dictionary")
  temp = f.Range("b2:b" & f.[b65000].End(xlUp).Row)
  temp2 = f.Range("k2:k" & f.[k65000].End(xlUp).Row)
  For i = 1 To UBound(temp, 1)
     If temp(i, 1) <> "" Then
        mondico(CStr(temp(i, 1))) = mondico(CStr(temp(i, 1))) & temp2(i, 1) & "*"
     End If
  Next i
  Me.ComboBox1.List = mondico.Keys
End Sub

Private Sub ComboBox1_Change()
  clé = Me.ComboBox1
  Me.ListBox1.List = Split(mondico(clé), "*")
  Me.TextBox1 = Me.ListBox1.List(0)
  Me.ListBox1.RemoveItem 0
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : ListBox en fonction du choix d'une combobox

Bonjour

Voila j'ai un USF pour faire la recherche CP, Ville, Arrondissement, Cantons ect... Qui m'a été réaliser par Papou-Net que je remercie et que je salut au passage et si tu passe par ici et que tu as quelques minutes à m'accorder.
J'aimerais finaliser mon code, j'ai ajouté quelques modififications les Arrondissements, Nbes de Cantons et Nbres de villes par cantons qui marche très bien mais je but sur une combobox pour alimenter les villes correspondant au code postal
Je vous remercie papounet de l'aide qui ma accorder et les autres
 

Pièces jointes

Re : ListBox en fonction du choix d'une combobox

Bonjour Max,

Pas bien sûr d'avoir compris la question,

Alors regarde si la proposition ci-jointe te convient.

Par contre, je ne comprends pas la logique concernant les chef-lieux de canton qui ne correspondent pas aux codes postaux. Il y a sûrement des modifications à prévoir ?

Bonne journée.

Cordialement.
 

Pièces jointes

Re : ListBox en fonction du choix d'une combobox

Bonjour Papou-net

Je te remercie beaucoup d'avoir répond. Pour les chefs lieu, ils sont tous bidons j'ai mis au hasard après je ferais la modif en temps voulu.
Si non c'est exactement ma demande a part que si c'était possible d'avoir la recherche dans les deux sens si je ne suis pas trop exigent. Je m'explique, de la façon que cela est fait je cherche la ville d'après le N° de code postal OK, j'aimerais faire le contraire chercher le N° de code postal par apport au N° de la ville.

je te remercie infiniment du temps passer et te souhaite une bonne journée
 
Re : ListBox en fonction du choix d'une combobox

Bonjour Papou-net,

Génial exactement la recherche, juste un bémol quand tu recherche dans le sens "CP vers ville" tu visualise bien les noms des cantons dans la listbox ainsi que les divers texbox tous marche nickel.
Dans l'autre sens c'est à dire "ville vers CP"les noms des cantons dans la listbox ainsi que les divers texbox ne marche pas je pense qu'il y a du avoir un oubli. Mais je te remercie beaucoup et te souhaite une bonne journée.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
6
Affichages
321
Retour