Codes Postaux France

VIARD

XLDnaute Impliqué
Bonjour à tous

J'ai réalisé ce programme que je désire partager.
S'il y a des observations je suis preneur.

Salutation

Jean-Paul

Ce lien n'existe plus
 

david84

XLDnaute Barbatruc
Re : Codes Postaux France

Bonjour,
Je constate que :
- la liste de la combobox "code postal" n'est pas triée
>ex pour le département 1: 1er item 1440 suivi de 1000
>ex pour le département 2 : 1er item 2790 suivi de 2800 suivi de 2000, 2100, etc.
>ex pour le département 3 : 1er item 42620 suivi 3210
>ex pour le département 4 : 1er item 41300 suivi de 4000, 4100,..., à la fin de la liste 5110, 5130, 5160, 6260

Concernant le fait d'avoir la liste des choix de département et de code postal avec le format correct affiché (01 au lieu de 1 pour les départements, 01000 au lieu de 1000 pour les codes postaux) : selon les cas, soit utiliser la méthode Format, soit utiliser la propriété Text à la place de Value (ne pas oublier alors d'utiliser Cdbl pour modifier 01 en 1 lors de la recherche de la colonne afin de retrouver un nombre).

Quelques exemples de modification possible permettant d'afficher le bon format :
- dans la Sub Init1()
Code:
'-------- Chargement Combo CP --------
    For J = 1 To NoDept.Count
        Me.cboCP.AddItem Format(NoDept(J), "00000") 'ligne modifiée
        NoValeur = NoValeur + 1
    Next J
Nb = Sheets("Feuil2").Cells(65536, Cp).End(xlUp).Row
Label10.Caption = "Nombre de communes Q = " & Nb - 2
    [A1].Select

- Sub cboCom_Click
Code:
Private Sub cboCom_Click()
Dim Choix$, Cell As Variant
Dim Cp%
x = Me.cboCom.Value
Cp = Int(Label4.Caption)
'MsgBox choix
    Me.lstCP.Clear
    Sheets("Feuil2").Activate
'----------- Plage de recherche ----------
    Sheets("Feuil2").Range(Cells(3, Cp + 1), Cells(65536, Cp + 1).End(xlUp)).Select
    For Each Cell In Selection
        If Cell.Text = Choix Then Me.lstCP.AddItem Cell.Offset(0, -1).Text 'ligne modifiée
'        MsgBox Cell
    Next Cell
    [A1].Select
End Sub

- Sub ChargementCombo
Code:
Sub ChargementCombo()
Dim Bib As Worksheet
Dim NbBibli%, Y%
Dim Liste$

Set Bib = Sheets("Feuil2")
'------ Chargement Combo et Comptage des Bibli --------
For Y = 1 To 250 Step 2
    If Bib.Cells(1, Y).Value <> "" Then
        NbBibli = NbBibli + 1
        Liste = Bib.Cells(1, Y).Text 'ligne modifiée
        ComboBox1.AddItem (Liste)
    End If
Next Y
'------------------------------------------------------
Label9.Caption = "Nombre de Dépt (Q = " & NbBibli - 1 & ")" & " +1 N.C"
End Sub

- dans la Sub Combobox1_Change()
Code:
With ComboBox1
    Rubrique = CDbl(ComboBox1.List(.ListIndex, 0)) 'ligne modifiée
End With
A+
 

david84

XLDnaute Barbatruc
Re : Codes Postaux France

bonjour david84

dans le code que tu mis pour il manque la variable pour X ce n'est que mon avis

Pascal
Je n'ai pas écrit le code, juste utilisé la propriété Text à la place de Value par rapport au code initial, ce qui permet de récupérer le texte réellement écrit dans la cellule (01000) plutôt que la valeur retournée (1000).
A+
 

VIARD

XLDnaute Impliqué
Re : Codes Postaux France

Bonjour David, Staple, grisan, Jack à toutes et tous

Désolé je n'ai pas pu répondre, because WK chargé.
Je vous remercie tous pour le soutien que vous m'apporté à finaliser le projet
Bien sur je vais appliquer ces modifs et plus j'apprend quelques point de détail.
Toutefois j'ai une question sur le bout des lèvres.
Comme Jack l'a fait, j'arrive bien à supprimer le lien hypertexte d'une commune, mais comment
le faire pour 37000 communes d'un coup ?

Bon WK à tous
Jean-Paul
 

Jack2

XLDnaute Occasionnel
Re : Codes Postaux France

Bonjour VIARD, bonjour le fil,

Après ces quelques jours d'absence, je me mets à vérifier les liens par commune pour différencier le type "http... commune" et "htpp... commune_(département"), éventuellement les cas particuliers qui semblent rares. Je pense traiter ces cas particuliers à l'aide d'une troisième feuille ou l'on chercherait commune+ département (cellule1)= lien Wikipedia (Cellule2) à l'aide d'une fonction. Toute autre suggestion est la bien venue.

Je partage tout à fait la remarque de Staple1600 : mettre les infos adéquates pour Wikipedia. Outre l'aspect juridique, cela permettra de les faire connaître durant la période où ils sollicitent généralement des dons pour les soutenir (fin décembre).

Pour la validité des liens (36000), cà nécessitera plusieurs jours.

A+ jack2
 

Jack2

XLDnaute Occasionnel
Re : Codes Postaux France

Bonsoir le fil,

Pour pouvoir tester la validité des liens Wikipedia plus facilement j'ai essayé de faire une macro qui puisse me donner les villes qui apparaissent plusieurs fois (voir l'exemple dans le classeur). Je n'arrive pas à trouver le moyen de ne prendre directement que le contenu complet de la cellule pour ne lister que les villes de nom identique. S'il n'y a pas de solution, je serais obligé de comparer le contenu entier de la cellule avec la ville cherchée.

Merci et bonne nuit

Jack2
 

Jack2

XLDnaute Occasionnel
Re : Codes Postaux France

Bonjour le fil,

Je viens de m’apercevoir que j'ai oublié le fichier et le code...

Jack2
 

Pièces jointes

  • Codes_Postaux.zip
    697.3 KB · Affichages: 71
  • Codes_Postaux.zip
    697.3 KB · Affichages: 72
  • Codes_Postaux.zip
    697.3 KB · Affichages: 70

VIARD

XLDnaute Impliqué
Re : Codes Postaux France

Bonjour Jack, David et à tous

Jack, je n'ai pas encore eu le temps de regarder ce que tu as fait. Demain je regarde.
Bon j'ai fait quelques avancées, il me reste l'épineux problème du tri sur le CP.
Effectivement deux ou trois codes de début de tri ne sont pas pris en compte, pratiquement pour beaucoup de départements.
mais le reste est trié.
J'ai tenu compte des remarques de David, tout fonctionne.
Et de Staple pour la licence.
Voici la dernière mouture.

A+

Jean-Paul
 

Pièces jointes

  • CodesPostauxFrance-V10.zip
    822.8 KB · Affichages: 78
  • CodesPostauxFrance-V10.zip
    822.8 KB · Affichages: 85
  • CodesPostauxFrance-V10.zip
    822.8 KB · Affichages: 70

david84

XLDnaute Barbatruc
Re : Codes Postaux France

Bonsoir,
il me reste l'épineux problème du tri sur le CP.
Tu as différentes possibilités à ta disposition lorsque tu dois trier un Array (tableau VBA), et notamment :
- le quick sort : très rapide et surtout utile sur de grandes plages
> voir ici sur le site de Jacques Boisgontier
- l'utilisation de l'objet ArrayList, légèrement moins rapide dans l'absolu (quoique dans le cas présent c'est instantané) mais plus simple de compréhension par rapport au Quick Sort
> voir sur la même page que le lien ci-dessus à ArrayList

Je te propose cette 2ème solution (j'ai juste rajouté la partie liée à l'objet ArrayList dans le code sans retoucher le reste) :
Code:
Sub Init1()
Dim NoDept As New Collection
Dim A()
Dim i%, J%, NoValeur%
Dim Swap1$, Swap2$
Dim Cp%, Nb%
Dim AL As Object
Cp = Int(Label4.Caption)
'CP = 13
    Application.ScreenUpdating = False
    Sheets("Feuil2").Activate
    On Error Resume Next
    Range(Cells(3, Cp), Cells(65536, Cp).End(xlUp)).Select
    A = Selection.Value
    For i = 1 To UBound(A, 1)
        NoDept.Add A(i, 1), CStr(A(i, 1))
    Next i
'----------- Tri Communes ------------
    For i = 1 To NoDept.Count - 1
        For J = i + 1 To NoDept.Count
            If NoDept(i) > NoDept(J) Then
                Swap1 = NoDept(i)
                Swap2 = NoDept(J)
                NoDept.Add Swap1, before:=J
                NoDept.Add Swap2, before:=i
                NoDept.Remove i + 1
                NoDept.Remove J + 1
            End If
        Next J
    Next i

' partie modifiée
'-------- Chargement Combo CP --------
    Set AL = CreateObject("System.Collections.ArrayList")
    'chargement des CP formatés dans l'objet ArrayList
    For J = 1 To NoDept.Count
        AL.Add Format(NoDept(J), "00000") 'format des CP
    Next J
    AL.Sort 'tri des CP
    'on charge les CP triés dans le ComboBox des CP
    For J = 0 To AL.Count
        Me.cboCP.AddItem AL(J)
        NoValeur = NoValeur + 1 'cette ligne existait donc je l'ai laissée mais est-elle vraiment utile ?
    Next J
'fin de la partie modifiée
    
Nb = Sheets("Feuil2").Cells(65536, Cp).End(xlUp).Row
Label10.Caption = "Nombre de communes Q = " & Nb - 2
    [A1].Select
End Sub
Concernant la boucle permettant de charger les CP dans le Combo CP si jamais tu n'as pas besoin de
Code:
 NoValeur = NoValeur + 1
dont je ne saisis pas bien l'intérêt à 1ère vue (mais je n'ai pas étudié le code complet), tu peux alors t'en passer et charger directement l'ArrayList dans le comboBox. Remplace alors
Code:
    For J = 0 To AL.Count
        Me.cboCP.AddItem AL(J)
        NoValeur = NoValeur + 1 'cette ligne existait donc je l'ai laissée mais est-elle vraiment utile ?
    Next J
par
Code:
cboCP.List = AL.toarray
Teste bien de ton côté pour voir si c'est bon.
A+
 
Dernière édition:

VIARD

XLDnaute Impliqué
Re : Codes Postaux France

Bonjour David et à tous

Merci pour les codes proposés.
Du coup et par prudence, j'ai traité cette partie dans un dossier à part.
cela me fait mieux comprendre la partie objet --> ArrayList
que je n'utilise jamais.

Donc après divers manip, (NoValeur = NoValeur + 1) devient inutil comme tu le pensais.
et --> cboCP.List = AL.toarray remplace très bien la dernière boucle.

Encore merci pour la résolution de ce Pb.
J'enverrai la mise à jour plus tard après vérification.

A+ Jean-Paul
 

david84

XLDnaute Barbatruc
Re : Codes Postaux France

Bonsoir,
ci-joint ton fichier avec les modifications suivantes :
- liste des régions triées et les "_" remplacés par des "-"
- liste des communes du combobox cboCom triée
- liste des communes de la listbox lstVille : tri revu
- Numéros de département : 20A placé avant 20B
- les combobox1 et 2 (choix par numéro ou nom de département) "liées" : l'affichage d'un n° de département entraîne l'affichage du nom de département choisi et à l'inverse l'affichage d'un nom de département entraîne l'affichage du n° de département choisi.

Regarde de ton côté, garde ce que tu veux et jette le reste.
Si tu veux des explications complémentaires sur le code ajouté n'hésite pas à poser des questions.
A+
 

Pièces jointes

  • CodePostauxFrance.zip
    768.9 KB · Affichages: 85

Discussions similaires

Réponses
0
Affichages
239
Réponses
24
Affichages
2 K

Statistiques des forums

Discussions
312 492
Messages
2 088 902
Membres
103 982
dernier inscrit
krakencolas