Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

besoin code pour fonction vb - récupération valeur d'un tableau

4 réponses
Avatar
Sandrine
Bonjour,

Quel serait le code pour récupérer via une fonction VB, la voire les valeur
d'une table.

Disons que j'ai un fichier EXCEL (ou txt tabulé) avec CP et VILLE

Dans un logiciel permettant de traiter des fonctions VB à travers une boite
de dialogue,
comment faire pour qu'en saisissant un code postal, il m'indique dans la
ville ??

Merci beaucoup

Sandrine

4 réponses

Avatar
jean-marc
"Sandrine" a écrit dans le message de
news:eavmk4$a50$
Bonjour,

Quel serait le code pour récupérer via une fonction VB, la voire les


valeur
d'une table.

Disons que j'ai un fichier EXCEL (ou txt tabulé) avec CP et VILLE

Dans un logiciel permettant de traiter des fonctions VB à travers une


boite
de dialogue,
comment faire pour qu'en saisissant un code postal, il m'indique dans


la
ville ??



Bonjour,

il faut faire en 2 etapes:
- Charger les données en mémoire
- Ecrire la fonction qui à partir d'un CP donne la ville.

Je ne sais pas de quels pays sont les codes postaux dont tu
parles, on va supposer que ce sont des codes postaux français
donc sur 5 chiffres.

Une astuce consisite à déclarer un tableau de 99.999 entrées.
Il suffit de lire dans le fichier les couples (CP;ville) et de
stocker la ville dans la case correspobdant à la valeur de CP.
Exemple: Rennes (35000) ira à la position 35000 du tableau.

POur faire simple, on va écrire une fonction DonneVille() qui
se chargera elle même de s'initialiser.
Voice le code pour faire cela (c'est un exemple):



Option Explicit

'--------------------------------------------------------------
' Procedure : DonneVille
' DateTime : 4/08/2006 20:00
' Author : Jean-Marc
' Purpose : Retourne la Ville correspondant à un code postal donné
' Note: la fonction se charge elle même de son init
'--------------------------------------------------------------
'
Public Function DonneVille(CodePostal As String) As String
Const MAX_CP As Long = 99999
Dim DataFile As String
Static InitFaite As Boolean
Static Villes(MAX_CP) As String
Dim ValCP As Long
Dim result As Boolean

' mettre ici l'emplacement du fichier de données
DataFile = App.Path & "cpville.txt"

' si l'init n'est pas faite
If Not InitFaite Then
' on la fait
result = InitDonnees(DataFile, Villes)
' on vérifie que tout c'est bien passé
If Not result Then
' si non on affiche par exemple un message d'erreur
MsgBox "Une erreur s'est produite."
' Ici on peut quitter ou faire ce qu'on veut
End If
' et on note que l'init est faite
InitFaite = True
End If
' on convertit le code postal passé en paramètre sous forme
' d'une chaine en une valeur numérique
ValCP = Val(CodePostal)
' et on retourne la valeur du tableau à cet endroit
DonneVille = Villes(ValCP)
End Function


'-----------------------------------------------------------------------
----------------
' Procedure : InitDonnees
' DateTime : 4/08/2006 20:01
' Author : Jean-Marc
' Purpose : Initialisation de la fonction DonneVille
' Le fichier de données est un fichier tablué de la forme:
' code_postal;ville
'-----------------------------------------------------------------------
----------------
'
Private Function InitDonnees(szDataFile As String, _
szAnArray() As String) As Boolean
Dim f As Integer
Dim CP As String
Dim Ville As String
Dim szData As String
Dim p As Long

' trap l'erreur si par exemple le fichier
' n'existe pas
On Error GoTo InitDonnees_ERR

' ouvre
f = FreeFile
Open szDataFile For Input As #f
' lire en boucle jqa la fin
While Not EOF(f)
' lire une ligne
Line Input #f, szData
' si pas vide
If szData <> "" Then
' decouper en CP, VIlle
p = InStr(szData, ";")
If (p > 0) And (p < Len(szData)) Then
CP = Mid$(szData, 1, p - 1)
Ville = Mid$(szData, p + 1)
' ecrire dans le tableau à la bonne position
szAnArray(Val(CP)) = Ville
End If
End If
Wend
' on referme
Close #f
' tout est ok
InitDonnees = True
' et on quitte
InitDonnees_END:
Exit Function

InitDonnees_ERR:
' ici une erreur s'est produite
' la focntion va sortir en retournant FALSE
Resume InitDonnees_END
End Function

Private Sub Command1_Click()
Dim CP As String
Dim Ville As String

'
' Exemple d'utilisation
'
CP = "56000"
Ville = DonneVille(CP)
MsgBox "CP = " & CP & " Ville=" & Ville

End Sub

Et voila, espérant t'avoir aidé.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
SAISAS
Juste une petite remarque :

il n'y a pas bijection entre code postal et ville, c'est à dire que
plusieurs villes peuvent avoir un même code postal, et qu'un même code postal
correspond à plusieurs villes.

Bonne réception.

"Sandrine" a écrit :

Bonjour,

Quel serait le code pour récupérer via une fonction VB, la voire les valeur
d'une table.

Disons que j'ai un fichier EXCEL (ou txt tabulé) avec CP et VILLE

Dans un logiciel permettant de traiter des fonctions VB à travers une boite
de dialogue,
comment faire pour qu'en saisissant un code postal, il m'indique dans la
ville ??

Merci beaucoup

Sandrine





Avatar
Vincent Guichard
SAISAS a écrit :
Juste une petite remarque :

il n'y a pas bijection entre code postal et ville, c'est à dire que
plusieurs villes peuvent avoir un même code postal, et qu'un même code postal
correspond à plusieurs villes.

Bonne réception.




Sans oublier qu'une ville peut avoir plusieurs codes postaux (selon les
arrondissements par exemple), même si cela ne posera pas de problèmes
dans le cas présent, puisqu'on part du CP.

Vincent Guichard
Avatar
jm
"Vincent Guichard" wrote in message
news:44db3feb$0$872$
SAISAS a écrit :
Juste une petite remarque :

il n'y a pas bijection entre code postal et ville, c'est à dire que
plusieurs villes peuvent avoir un même code postal, et qu'un même code
postal correspond à plusieurs villes.

Bonne réception.




Sans oublier qu'une ville peut avoir plusieurs codes postaux (selon les
arrondissements par exemple), même si cela ne posera pas de problèmes dans
le cas présent, puisqu'on part du CP.



Hello,

A ce propos vous vouvez télécharger une DB très sympa ici
http://officesystem.access.free.fr/ex_codes_postaux.htm

Elle contient entre autre une table de "toutes" les communes de france avec
leur CP associé.

On peut voir des choses amusantes, notamment le fait par exemple que le code
postal 55300 correspond à 46 communes distinctes.

De même, la ville STE COLOMBE a 13 codes postaux, car elle existe dans 13
départements!

Dans cette table, Il ya en fait 38646 communes pour seulement 6049 CP.

A noter: certains CP existants ne sont pas repris dans cette table qui n'est
donc pas strictement "complète", mais il ya déjà de quoi faire!

--
Jean-marc