ComboBox et TextBox en cascade

  • Initiateur de la discussion Initiateur de la discussion jkv
  • 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 !

J

jkv

Guest
Bonjour le Forum,
Je fais encore appel à votre savoir-faire.

Dans le zip joint, il y a deux fichiers: Usagers.xls et CP_PAYS.xls
J'aimerais pouvoir peupler un ComboBox d'un des fichiers avec les codes postaux contenus dans l'autre fichier.
Les autres objets de l'UserForm devraient se remplir automatiquement en fonction du code postal choisi dans le ComboBox.
Pour voir le détail de ma demande, je vous invite à ouvrir l'UserForm du fichier Usagers.xls.

En vous remerciant d'avance, je vous adresse mes cordiales salutations.

jkv
 

Pièces jointes

  • CP.zip
    CP.zip
    12.3 KB · Affichages: 57
  • CP.zip
    CP.zip
    12.3 KB · Affichages: 61
  • CP.zip
    CP.zip
    12.3 KB · Affichages: 66
Re : ComboBox et TextBox en cascade

Bonjour,

Attention:
-Nom de champ BD à définir dans CP_PAYS.xls
-On suppose que les code postaux sont numériques. Si texte, modifier SQL
(' à ajouter)


Code:
Private Sub UserForm_Initialize()
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & ThisWorkbook.Path & "\" & "CP_PAYS.xls"
  Set rs = cnn.Execute("SELECT code FROM BD WHERE code<>0 GROUP BY code")
  Me.ComboBoxCP.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub

Private Sub ComboBoxCP_Change()
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & ThisWorkbook.Path & "\" & "CP_PAYS.xls"
  Set rs = cnn.Execute("SELECT Lieu FROM BD WHERE code=" & Me.ComboBoxCP)
  Me.ComboBoxLieu.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub

Private Sub ComboBoxLieu_Change()
  Dim rs As ADODB.Recordset
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & ThisWorkbook.Path & "\" & "CP_PAYS.xls"
  Sql = "SELECT canton,pays,cant,pay FROM BD WHERE code=" & Me.ComboBoxCP & " AND lieu='" & _
    Me.ComboBoxLieu & "'"
  Set rs = cnn.Execute(Sql)
  Me.TextBoxCanton = rs("canton")
  Me.TextBoxPays = rs("Pays")
  Me.TextBoxCant = rs("cant")
  Me.TextBoxPay = rs("pay")
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
Re : ComboBox et TextBox en cascade

Bonjour le Forum, Eric, Boisgontier,
Tout d'abord merci pour vos réponses. Les deux fonctionnent à la perfection.

L'approche de Boisgontier correspond plus à ma demande dans ce sens que le ComboBoxLieu est filtrée par le choix du code postal.

Cependant, il existe un problème. Dans les deux exemples, les codes postaux de la France (01500) ne figurent pas dans la liste déroulante de la ComboBoxCP.

Boisgontier: je ne pas compris ton message: où est-ce qu'il faut ajouter un " ' "? j'ai essayé sur la ligne sql du ComboBoxLieu_Change mais il ne se passe rien.

Pour votre gouverne, la colonne A (codes postaux) du fichier CP_PAYS.xls contient aproximativement 40'000 valeurs et est en format Standard pour permettre aux zéros des codes postaux français d'exister (01500). Les codes postaux suisses ont quatre chiffres et aucun commence par zéro.

Eric: ne t'en fais pas pour le bouton valider, il s'agit juste d'un échantillon et vos exemples seront inclus dans mon projet original.

Encore mil merci à vous. jkv
 
Re : ComboBox et TextBox en cascade

Bonsoir,

Dans le fichier des codes, certains codes postaux en colonne A sont numériques, d'autres texte. Il faudrait remettre de l'ordre.

-S'ils sont tous numériques, pas d'apostrophe dans les requêtes SQL

Select code,pays where code=1234

-S'ils sont tous texte, il faut une apostrophe dans les requêtes SQL

Select code,pays where code='1234'

JB
 
Re : ComboBox et TextBox en cascade

Re Eric,
J'ai dû convertir les numéros des codes postaux au format texte car si non les zéros disparessent et au lieu d'avoir 01500 j'ai 1500. J'ai rajouté les codes français et ton code marche très bien.

Cependant, celui de Boisgontier bogue avec le format texte mais je n'ai toujours pas compris devant quelle ligne de code il faut mettre l'apostrophe dont il parlé dans son précédent post.

Merci de ta réponse.
 
Re : ComboBox et TextBox en cascade

Bonsoir Boisgontier,
Nos messages se sont croissés.
Dans l'Initialize, après code= j'ai mis '0' et maintenaint l'erreur s'est déplacé au code du ComboBoxCP_Change, dans la ligne (soulignement en jaune)

Set rs = cnn.Execute("SELECT Lieu FROM BD WHERE code=" & Me.ComboBoxCP)

Désolé mais je ne vois pas où mettre les apostrophes. Merci de ton aide.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Y
  • Question Question
Réponses
2
Affichages
2 K
yeti_yeti
Y
B
Réponses
35
Affichages
5 K
B
Retour