Lien entre Combobox Code postal et Combobox Ville ne se fait pas

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Je sollicite votre aide à nouveau car j'essaie d'adapter un code qu'un dénommé Robert m'avait sympathiquement proposé il y a quelque temps.

Le tout est assez basique :
Sur une feuille Source j'ai en colonne B des codes postaux et en colonne C le nom des villes correspondantes
Certaines villes partagent le même code postal.

J'ai un formulaire avec 2 combobox
Combobox1 (liste déroulante pour le choix d'un code postal)
Combobox 2 (liste déroulante pour le choix de la ville (qui s'ajuste en fonction du code postal, c'est à dire que si le code postal correspond à plusieurs villes alors la combobox2 n'affiche que les villes qui partagent le même code postal, si il n'y a qu'une occurrence du code postal alors la combobox2 n'affiche que le nom de la ville qui correspond)

Code:
Private Sub ComboBox1_AfterUpdate()
'Code de Robert Excel Download dit titiborregan5
  ' Efface le choix de la liste déroulante "Code postal"
  Me.ComboBox1.ListIndex = -1
  ' Efface les éléments de la liste déroulante "Ville"
  Me.ComboBox2.RowSource = ""
  ' Avec la feuille source
  With Sheets("Source")
    ' Une variable prend la valeur du Code Postal saisie
    sCP = Me.ComboBox1
    ' On trouve le code postal en colonne B
    Dlig = .Range("B" & Rows.Count).End(xlUp).Row
    ' Pour chacune des lignes de la source
    For Lig = 2 To Dlig
      ' Vérifier si le code postal correspond à celui saisi ou sélectionné
      ' Cela permet de gérer les cas où un même code postal est attribué à plusieurs communes
      If .Range("B" & Lig) = sCP Then
      MsgBox ("pour ce code postal : " & sCP & " C'est cette ville " & .Range("C" & Lig))
      'Si c'est le cas alors la liste déroulante "Ville" fera apparaître toutes ces communes au même code postal
        Me.ComboBox2.AddItem .Range("C" & Lig)
      End If
    Next Lig
  End With
End Sub

Merci beaucoup pour votre aide
 

Pièces jointes

  • CPVille.xls
    25 KB · Affichages: 105
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour,

après avoir choisi un code postal, on efface la combo 1 puis on donne à la variable sCP la valeur de la combo 1 ( qui est vide !!)
en supprimant cette ligne : Me.ComboBox1.ListIndex = -1 , ça marche mieux.

Je ne connais pas l'utilisation de ce code, mais je pense qu'il serait mieux dans la proc Private Sub ComboBox1_Change()

Bonne suite
 

Dranreb

XLDnaute Barbatruc
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour.

Avec ma fameuse grosse machinerie en dehors de l'userform, où tout devient assez simple pour qu'on le complique à loisir par toutes sortes d'autres choses…
 

Pièces jointes

  • CbxLiésCPVille.xls
    181 KB · Affichages: 123
  • CbxLiésCPVille.xls
    181 KB · Affichages: 128
  • CbxLiésCPVille.xls
    181 KB · Affichages: 133

fb62840

XLDnaute Impliqué
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour,

Voilà des codes qu'il va me falloir examiner pendant des heures avant d'espérer en comprendre le fonctionnement... j'en ferai l'effort mais j'avoue qu'une solution plus modeste me conviendrait tout autant.

En tout car un grand merci pour votre aide.
 

fb62840

XLDnaute Impliqué
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Oui en effet ça marche mieux.

Par contre j'ai un souci lorsque je cherche à changer de code postal car la deuxième ComboBox reste alimentée avec la sélection correspondant à la première sélection dans la liste. Je souhaite obtenir un "vidage" de la 2nde combobox à l'activation de la première.

J'ai essayé plusieurs choses notamment un .Visible = False pour la ComboBox de la ville mais ça ne marche pas...

Des idées ?

Bonjour,

après avoir choisi un code postal, on efface la combo 1 puis on donne à la variable sCP la valeur de la combo 1 ( qui est vide !!)
en supprimant cette ligne : Me.ComboBox1.ListIndex = -1 , ça marche mieux.

Je ne connais pas l'utilisation de ce code, mais je pense qu'il serait mieux dans la proc Private Sub ComboBox1_Change()

Bonne suite
 

Dranreb

XLDnaute Barbatruc
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Mon module de classe ComboBoxLiés le vide en principe. Pour être sûr vous pouvez mettre sa propriété MatchRequired à True: il en tient compte. Vous pouvez aussi ajouter un bouton "Effacer" où il vous suffira d'exécuter CBL.Nettoyer.
Pourquoi voulez vous examiner comment il procède ? Ça peut attendre tant que vous n'avez rien que de très ordinaire à lui demander.
Dès lors qu'il est déclaré WithEnvents, CBL figure dans la liste de gauche qui surmonte la fenêtre de code. Regardez dans celle de droite les évènement qu'elle décrète et que vous pouvez gérer par des procédures appropriés dont les modèles vous seront implantés.
 
Dernière édition:

fb62840

XLDnaute Impliqué
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Re-bonjour,

Je n'ai pas dit que je n'allais pas l'examiner... bien au contraire cela m'intéresse considérablement et je vais faire les efforts suffisant pour tâcher de comprendre.

Je suis donc en train de faire 2 versions : une version "basique" avec des codes simplistes, et je vais développer une version avec votre code (plus complexe mais qui fonctionne très bien).

Voici comment dans ma version "bloody jerk" je parviens à vider les combobox qui dépendent du code postal :

Code:
Private Sub ComboBox1_Change()
  Me.ComboBox2.ListIndex = -1
  Me.ComboBox3.ListIndex = -1
End Sub
 

mikachu

XLDnaute Occasionnel
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour,

Une version minimaliste qui a l'air de faire ce que vous demandez.
j'ai ajouté un bouton pour lancer l'userform et désactivé la macro "afterupdate"

Je vous laisse le soin de l'adapter au besoin.

mikachu
 

Pièces jointes

  • CPVille[1].xls
    32 KB · Affichages: 90

fb62840

XLDnaute Impliqué
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour,

Merci pour cette proposition elle fonctionne avec les données initiales, mais voyez comment, si j'ajoute d'autres données, cela ne fonctionne plus pour celles qui viennent d'être ajoutée... c'est à n'y rien comprendre.

J'ai ajouté 2 lignes :
Id 26 / 59000 / Lille
Id 27 / 62000 / Arras

ça marche pour toutes les autres mais pas si je sélectionne 59000 ou 62000
i
 

Pièces jointes

  • CPVille(2).xls
    28 KB · Affichages: 64

ChTi160

XLDnaute Barbatruc
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Bonjour fb62840
Bonjour le fil
Bonjour el Forum

je pense que ton problème vient peut être du fait que tu utilises la propriété RowSource pour alimenter ton combobox1
en pièce jointe une autre version (Tableau)

Le Fichier : Regarde la pièce jointe CPVille-1-1.xls

Bonne fin de journée
Amicalement
Jean Marie
 
Dernière édition:

mikachu

XLDnaute Occasionnel
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Apparemment c'est lié au fait que, pour les cellules qui fonctionnent, les CP sont stockés sous forme de texte.
En entrant '59000 au lieu de 59000 et '62000 au lieu de 62000, cela fonctionne.
 

ChTi160

XLDnaute Barbatruc
Re : Lien entre Combobox Code postal et Combobox Ville ne se fait pas

Re
pour palier au problème de texte ou pas mettre ceux ci .
VB:
If CStr(Sheets("Source").Cells(j, 2).Value) = .ComboBox1.Value Then
.ComboBox2.AddItem Sheets("Source").Cells(j, 3).Value
End If
Bonne Fin de journée
Amicalement
Jean marie
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 195
Membres
103 153
dernier inscrit
SamirN