recherche de code insee

sri75

XLDnaute Occasionnel
bonjour, j'au un fichier excel de 36000 communes issu du site de l'insee mais ou le code insee, normalement de 5 chiffres est sur 2 colonnes ( 2 1er en colonne A et les 3 autres en colonne B ). j'ai réussi à forcer l'affichage , mais je n'arrive pas à concatener mes deux colonnes pour avoir en visuel mon code à 5 chiffres.

Deuxième chose, je voudrais pouvoir utiliser une sorte de moteur de recherche dans mon fichier ( userform ? ) pour taper tout ou partie du nom de la commune et voir s'afficher les codes insee correspondants.

J'ai récupéré des bouts de code sur le forum que je vais tenter d'adapter mais en attendant je suis preneur de toutes vos idées.

le meme fichier existe aussi au format txt et dbf si cela peut aider.

Merci d'avance à tous pour vos conseils
 

Pièces jointes

  • codes-insee.xls
    15 KB · Affichages: 475

sri75

XLDnaute Occasionnel
Re : recherche de code insee

Merci pour vos réponses, j'ai trouvé comment faire mais avec un code trouvé sur le forum , mais meme compressé le fichier fait 180ko et je ne peut l'uploader.

c'est un spreadsheet mais le pb c'est qu'il recherche dès le premier caractère tapé et donc comme c'est sur 36000 lignes ca rame à mort.

voila le code

Sub aaa()
Spreadsheet1.Calculation = xlCalculationManual
Spreadsheet1.ScreenUpdating = False


Spreadsheet1.Range("a2:d40000").ClearContents
ville = TextBox1.Value & "*"

If ville = "*" Then GoTo vider

Dim r As Range

Dim code

For Each r In Sheets(1).Range("b6:b40000")


If r.Value Like ville And ville <> "" And ville <> 0 Then
code = Replace(Sheets(1).Cells(r.Row, 3).Value, "'", "")

For i = 3 To 40000
Set rs = Spreadsheet1.Cells(i - 2, 2)

ligne = rs.Row

Select Case code
Case Is <> 0
Spreadsheet1.Cells(ligne + i - 2, 1).EntireRow.Insert
Spreadsheet1.Cells(ligne + i - 2, 1).EntireRow.ClearFormats
Spreadsheet1.Cells(ligne + i - 2, 1).Value = Sheets(1).Cells(r.Row, 2).Value
Spreadsheet1.Cells(ligne + i - 2, 2).Value = code
Spreadsheet1.Cells(ligne + i - 2, 3).Value = Sheets(1).Cells(r.Row, 4).Value
GoTo suite
Case Is = 0
GoTo suite
End Select

Next

End If
suite:
Next


GoTo sortie

vider: Spreadsheet1.Range("a3:d40000").ClearContents


sortie:

Spreadsheet1.Range("a2:d40000").Sort columnkey:=2, Order:=xlAscending
Spreadsheet1.Range("a1").Select


Spreadsheet1.ScreenUpdating = True
End Sub


Pour alleger la recherche il faudrait qu'elle ne commence qu'a partir du 3 eme ou 4eme caractère tapé au lieu du premier. Mais là je sèche !

Qu'en pensez vous ?
 

sri75

XLDnaute Occasionnel
Re : recherche de code insee

VOILA LE TXT, après etude finalement je n'ai besoin que de la zone dep et du code à 3 chiffres comme donnée à récuperer en recherchant le nom de la commune.

je n'ai pas besoin de concatener pour avoir 5 chiffres.

A suivre

nb peut être pour simplifier la recherche pourrait on d'abord saisir les deux premiers chiffres du département, pour ensuite limiter la recherche indexée sur les communes de ce département dont le nom commence par ...
 

Pièces jointes

  • INSEE.zip
    1 KB · Affichages: 135
  • INSEE.zip
    1 KB · Affichages: 142
  • INSEE.zip
    1 KB · Affichages: 147
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : recherche de code insee

Re

Je n'avais demandé le .txt que pour avoir l'integralité et pour pouvoir ainsi juger de la vitesse d'execution

Voila un essai
Teste et dis-nous (entrer les 1eres lettres ds la textbox du haut puis selectionner dans la listbox , resultat dans les texbox du bas)
 

Pièces jointes

  • codes-insee.zip
    12.2 KB · Affichages: 141

sri75

XLDnaute Occasionnel
Re : recherche de code insee

Extra, je viens de le tester avec mes 36000 lignes et ca rame beaucoup moins

Voila le fichier complet sur megaupload

Ce lien n'existe plus

Je reste ouvert a toute amélioration en terme de rapidité, mais en tout cas c'est déja super d'avoir ce programme. Je vous remercie tous et particulièrement pierrejean pour votre aide précieuse.
 

pierrejean

XLDnaute Barbatruc
Re : recherche de code insee

Re

Tu avais évoqué la possibilité de commencer la recherche a partir 3 caracteres
C'est assez facile de cette façon

Code:
Private Sub TextBox3_Change()
[COLOR=red]If Len(TextBox3) = 3 Then
[/COLOR]TextBox1 = ""
TextBox2 = ""
TextBox3 = UCase(TextBox3)
tableau = Range("A2:C" & Range("A65536").End(xlUp).Row)
ListBox1.Clear
For n = LBound(tableau, 1) To UBound(tableau, 1)
  If Left(tableau(n, 3), Len(TextBox3)) = TextBox3 Then
    ListBox1.AddItem tableau(n, 3)
  End If
Next n
[COLOR=red]End If
[/COLOR]End Sub

J'ai fait le test a partir de 4 caracteres et c'est assez spectaculaire
remplacer 3 par 4 dans cette ligne:

Code:
[COLOR=#ff0000]If Len(TextBox3) = 3 Then[/COLOR]
 

sri75

XLDnaute Occasionnel
Re : recherche de code insee

Bizarrement avec cette modif l'indexation ne fonctionne plus au dela du nombre de caractères choisi
( ex pour 4 si je tape mars ok j'ai une liste, je rajoute un a pour marsa, ma liste ne se met plus à jour ).

Peut être faut il un on change qq part ?

Un autre pb au dela du nb de caractères est que l'on perd les majuscules

Merci d'avance
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : recherche de code insee

Re

En controlant , je m'aperçois qu'il existe plusieurs MARSAC et que malheureusement la 1ere mouture ne les differencie pas
Voila une nouvelle version ( A tester bien sur !!!)
 

Pièces jointes

  • codes-insee_v2.zip
    19.4 KB · Affichages: 196

florentfrantz

XLDnaute Nouveau
Re : recherche de code insee

Sur Ce lien n'existe plus vous pouvez trouver : code postal des villes et arrondissements de France, données INSEE, départements, coordonnées. La base est en .csv et j'ai pu l'ouvrir sur Excel et en faire ce que je voulais (site de vente en ligne).
Sa marche nikel et je vais gagner un temps fou
Si sa peux servir a quelqu'un
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 413
Messages
2 088 200
Membres
103 762
dernier inscrit
rouazali