IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] ListBox et Codes postaux


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut [VBA-E] ListBox et Codes postaux
    Bonjour a tous

    Voila mon problème :

    Lors de la saisie d'un code postal, il affiche directement la ville cependant il y a plusieurs villes qui ont le meme code postal. Ce que j'ai pensé faire c'est créer une listbox avec le nom des villes qui ont le code postal saisie...

    Probleme : les codes postaux sont sur une feuille excel donc et lorsqu'il rencontre une ville possedans le meme code postal il les stock dans la list box MAIS pour les premieres villes cela fonctionne mais il ne m'ajoute pas la derniere ville ce qui m'agace !!
    Je sais pourquoi il n'ajoute pas la derniere ville mais je ne sais pas comment resoudre le problème

    Je vous montre le code que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    j=2
    If Txt_Cp.TextLength = 5 Then
     
      For i = 1 To 38621
     
        If ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value = Txt_Cp.Text And Ville = "" Then
          If ThisWorkbook.Worksheets("CodesPostaux").Cells(j, 1) <> ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1) Then
            Ville = ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value
          Else
            UserForm4.ListBox_CodesPostaux.AddItem (ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value)
          End If
        End If
        j = j + 1
      Next i
    Else
      Lbl_Ville.Caption = ""
    End If
    J'espere avoir été clair
    Merci d'avance

  2. #2
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Hello!
    Je ne comprend pas tout.
    Si tu mettais les balises de code, en indentant , ça serait plus lisible.
    Il vaut combien, J, au début ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut
    desolé pour les balises

    j = 2 au depart

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut
    Voilà j'ai renommer le titre...

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    C'est bien !

    Je regarde ta question

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans ce test :
    If Txt_Cp.TextLength = 5 Then
    Qu'est-ce que "Txt_Cp"
    Je sais pourquoi il n'ajoute pas la derniere ville mais je ne sais pas comment resoudre le problème
    Dis nous déjà pourquoi, ça nous aidera... Et même, cela pourra dte donner la solution...

    A+

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    moi je comprends pas ce que tu fais avec ton J ...? et pourquoi tu ne rajoute pas tout simplement dans ta list box toutes les villes qui ont le bon code postal ...?

    à la limite en fin de traitement tu peu tester le nb d'élément dans ta liste pour le transférer automatiquement s'il n'y en as qu'un...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if UserForm4.ListBox_CodesPostaux.ListCount = 1 then
      Lbl_Ville.Caption = UserForm4.ListBox_CodesPostaux.List(0)
     Else
     '... a voir affiche userform..4 liste de choix
      Userform4.show
      if UserForm4.ListBox_CodesPostaux.ListIndex >= 0 then
      Lbl_Ville.Caption = UserForm4.ListBox_CodesPostaux
     end if
     
    end if

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Oui, ou un list box à deux colonnes... Tu répètes le code postal pour les villes ayant le même...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut
    Ben en fait c'est vrai j'ai pensé tout charger au demarrage de l'application mais vu le nombre de code postaux mais c juste pour eviter d'avoir un temps d'accès trop long...

    pour repondre a ouskel'n'or :

    Txt_Cp est la boite de texte de la Userform1

    et pour la connaissance de mon probleme le voici et je ne sais pas si je vais etre clair dans mon explication lol :

    en fait ce qu'il se passe c que tant qu'il trouve un code postal egale a la ligne suivante il ajoute la ville a la ListBox mais dès qu'il arrive au dernier enregistrement forcément la ligne suivante sera differente donc il ne l'ajoutera pas a la List_Box.

    Donc il y aura toujours le dernier enregistrement qui manquera dans la ListBox.

    Comment faire pour prendre en compte cet enregistrement ?

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tiens voila le code complet que je te propose...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Private Sub Txt_Cp_Change()
     
    If Txt_Cp.TextLength = 5 Then
    ' On rempli la list box...
     For i = 1 To 38621
             If ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value =  Txt_Cp.Text Then
                     UserForm4.ListBox_CodesPostaux.AddItem (ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value)
             End If
      Next i
    if UserForm4.ListBox_CodesPostaux.ListCount <= 0 then exit sub 
     
     
     If UserForm4.ListBox_CodesPostaux.ListCount = 1 Then
       Lbl_Ville.Caption = UserForm4.ListBox_CodesPostaux.List(0)
      Else
      '... a voir affiche userform..4 liste de choix
       UserForm4.Show
       If UserForm4.ListBox_CodesPostaux.ListIndex >= 0 Then
       Lbl_Ville.Caption = UserForm4.ListBox_CodesPostaux
      End If
     
     End If
    End if
    end Sub


    [edit] modification du code pour le mettre dan txt_change...

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    dès qu'il arrive au dernier enregistrement forcément la ligne suivante sera differente donc il ne l'ajoutera pas a la List_Box
    Pourquoi ? Si pouvais expliquer en mettant ton code...
    Mais essaie le code de bbil. On verra après

    A+

  12. #12
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Tu ne pourrais pas aussi nous montrer un morceau de l'onglet Excel où sont stockés les codes postaux et les noms des villes.
    J'ai comme un doute...

    Merci.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut
    Citation Envoyé par ouskel'n'or
    dès qu'il arrive au dernier enregistrement forcément la ligne suivante sera differente donc il ne l'ajoutera pas a la List_Box
    Pourquoi ? Si pouvais expliquer en mettant ton code...
    Mais essaie le code de bbil. On verra après

    A+
    alors pourquoi ? je m'explique
    ps : Desolé pour l'indentation mais j'arrive pas a le faire sur le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    If Txt_Cp.TextLength = 5 Then
     
        For i = 1 To 38621
     
            If ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value = Txt_Cp.Text And Ville = "" Then 'IL VERIFIE SI L'ENREGISTREMENT EN COURS EST BIEN EGALE AU CP SAISIE
                If ThisWorkbook.Worksheets("CodesPostaux").Cells(j, 1) <> ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1) Then ' VERIFIE SI L'ENREGISTREMENT SUIVANT EST DIFFERENT DE L'ENREGISTREMENT EN COURS (en gros si le code postale est unique)
                    Ville = ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value
                Else 'SI LE CODE POSTAL EXISTE PLUSIEURS FOIS ALORS IL AJOUTE LES VILLE DANS LA LISTBOX
                    UserForm4.Show
                    UserForm4.ListBox_CodesPostaux.AddItem (ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value)
                End If
            End If
            j = j + 1
        Next i
    Else
        Lbl_Ville.Caption = ""
    'End If
    J'ai commenté un peu mon code pour savoir ce qu'il se passe

    Maintenant j'illustre le tout par des explications supplémentaires et a l'aide d'un exemple:

    Admettons qu'il y ai 5 CP en tout comme

    45123
    45145
    45145
    45145
    48170
    50000

    lors de mon test pour savoir si le CP existe plusieurs fois
    on a le compteur i qui equivaut a l'enregistrement en cours et le compteur j qui est l'enregistrement suivant (i = 1 ; j = 2)

    lorsque i = 2 j vaut 3
    donc le cp existe deja alors il va ajouter l'enregistrement i dans la listbox

    mais quand i = 4 j vaut 5 or cette fois ci j sera different de l'enregistrement i alors il ne l'ajoutera pas dans la listbox

    voila j'espere que vous comprenez un peu mieux

    sinon pour le code de bbil il ne fonctionne pas correctement

    a savoir que le code est effectuer dans la procedure


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Private Sub Txt_Cp_Change()
    Et lorsque j'executer son code je tape 1 chiffre il m'affiche la liste des CP

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par forsay1
    sinon pour le code de bbil il ne fonctionne pas correctement

    a savoir que le code est effectuer dans la procedure


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Private Sub Txt_Cp_Change()
    Et lorsque j'executer son code je tape 1 chiffre il m'affiche la liste des CP
    bon j'ai modifié le code en fonction

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Par défaut
    Ca y'est j'ai enfin trouvé solution a mon problème

    voici le code pour les interéssés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    If Txt_Cp.TextLength = 5 Then
     
        For i = 1 To 38621
     
            If ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value = Txt_Cp.Text And Module1.Ville = "" Then
                If ThisWorkbook.Worksheets("CodesPostaux").Cells(j, 1).Value <> ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value And ThisWorkbook.Worksheets("CodesPostaux").Cells(i - 1, 1).Value <> ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value Then
                    Module1.Ville = ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value
                Else
                    If Txt_Cp.Text = ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 1).Value Then
                        UserForm4.ListBox_CodesPostaux.AddItem (ThisWorkbook.Worksheets("CodesPostaux").Cells(i, 2).Value)
                    End If
                End If
            End If
            j = j + 1
        Next i
     
        If UserForm4.ListBox_CodesPostaux.ListCount >= 1 Then
            UserForm4.Show
        End If
     
    Else
        Lbl_Ville.Caption = ""
        Module1.Ville = ""
    End If
     
    If Module1.Ville = "" And Txt_Cp.TextLength = 5 Then
        MsgBox "Code postal inexistant !", vbExclamation, "Code Postal"
        Txt_Cp.Text = ""
    Else
        Lbl_Ville.Caption = Module1.Ville
    End If

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] listbox et code vba
    Par david.guedes dans le forum Excel
    Réponses: 8
    Dernier message: 06/03/2014, 15h10
  2. Se procurer bases de données ISBN, UCP, Codes postaux...
    Par zatomik dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 26/10/2010, 19h55
  3. Liste des villes et codes postaux
    Par CynO dans le forum Services
    Réponses: 11
    Dernier message: 27/09/2007, 01h07
  4. Tri par Codes Postaux + Noms d'entreprises
    Par matperino dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2005, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo