Vba access

Fermé
pamela - 20 févr. 2006 à 11:19
 PAMELA - 21 févr. 2006 à 15:13
salut je suis debutante dans le prog sous access en vb et j'aurai besoin d'aide !!!
je dois crrer un code qui va me permettre d'extraire une partie de caractere de mon champs et le retranscrire dans 2 nouveau champs
exemple

g un champ intitulé description
avec a l'interieur : 50 chemin du bourg 54574 luions et je dois le separer en 3 avec d'une part l'adresse (creation champ adress)
un champ Cp(54574)
un champ Ville (luions)

que faire de l'aide merci bcp

5 réponses

Bonjour,

Pour traiter les chaînes de caractère, il importe, avant tout, de disposer d'un argument qui permette de distinguer, à coup sûr, les informations que vous souhaitez extraire.
Ainsi un séparateur tel que ';' autorise une programmation méthodique. Exemple :

50 chemin du bourg ; 54574 ; luions

Bien sûr, on peut faire autrement, mais ce ne serait pas "carré".

Cordialement
La science ne fait que découvrir ce qui existe depuis toujours.
Hubert REEVES.
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
21 févr. 2006 à 09:33
S'il y a beaucoup d'enregistrements, ça risque d'être fastidieux.

Il y a moyen de rechercher une chaîne de 5 chiffres identifiant le code postal puis de "distribuer" les données.

Je n'ai pas trouvé de moyen très "propre" mais en principe ma méthode fonctionne...
Il faut d'abord ajouter un champ CP à la table

For X = 1 To Len(ChampADécomposer)
If Right(Left(Champ, X + 4), 5) > 1 And Right(Left(Champ, X + 4), 5) < 99999 And (Right(Left(Champ, X + 4), 1)) <> " " Then
CP = Right(Left(champ, X + 4), 5)
End If
Next
Ensuite, il faut bien sûr ajouter une boucle pour traiter tous les enregistrements et extraire les données "rue" et "ville" avec les instructions Left et Right en utilisant la valeur de X comme pivot
0
tout ce que tu m dis me semble very hard peut etre parce que je suis blonde tu pourrais m'aider plus .....
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
21 févr. 2006 à 13:39
Je suis loin d'être "au top" et il y a probablement moyen de faire plus simple...

Le principe est de rechercher une suite de 5 chiffres qui ne peuvent correspondre qu'au code postal puis de décomposer les résultats dans 3 champs destination que tu auras crées dans ta table: par exemple: "Rue" "CodePostal" et "Ville".

Pour cela, je te propose de faire une boucle For-Next qui va prendre 5 par 5 les caractères de la gauche vers la droite et tester s'ils sont bien numériques.
For X = 1 To Len(Champ à tester) pour que la boucle s'arrête au dernier caractère
on prend la partie droite du champ: Right(Champ, 5 caractères soit X + 4) puis on ne garde que le partie gauche de de champ: Right(Champ),5). Pour simplifier, on peut imbriquer les deux expressions.
Ensuite, on vérifie si ce sont des chiffres (>1 et <99999). Il faut aussi exclure la présence d'espaces sinon des nombres de moins de 5 chiffres peuvent être trouvés.
La boucle implémente la valeur de X et comme cela tout le champ est exploré.
Quand la valeur de X renvoie le code postal, on peut l'utiliser pour définir la valeur des nouveaux champs de la table:
CodePostal= Right(Left(champ, X + 4), 5)
Rue= Left(Champ,X-1)
Ville=Right(Champ,X+5)

Essaie de voir si ça fonctionne sur un enregistrement et tiens-moi au courant...

Ajoute les champs à ta table, crées un formulaire avec l'assistant et ajoute un bouton de commande. Dans les propriétés, sous l'onglet événements, choisis "procédure événementielle" sur clic et fais un copier-coller du code que je te propose plus haut. Il faut bien sûr veiller à modifier les mons des champs en fonction de ceus que tu as choisi. N'oublie pas que s'ile comportent des caractères spéciaux ou des espaces, tu dois les mettre entre crochets [].

Bon courage...

Encore une fois, je ne suis pas du tout certain que ce soit le moyen le plus simple. Si tu as peu d'enregistrements, la méthode proposée par Jacques est plus facile.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
j'essaye et je te tiens au courant merci
0