Remplir automatiquement le nom d'une comune en fonction d'un code postal.

Soyez le premier à donner votre avis sur cette source.

Vue 8 512 fois - Téléchargée 603 fois

Description

Ce source permet à partir de deux TEdit de récupérer le nom d'un comune.

Dans le premier TEdit vous rentrez un code postal, et en cliquant sur le deuxième TEdit, le nom de la comune est remplie automatiquement dans ce dernier.

Dans le fichier .zip j'ai mis le fichier .txt contenant tous les codes postaux de France.

PS: dans mon source le TEdit du code postal est "Edit4" celui du nom de comune est "ComboBox3" et le code est à mettre dans le "OnExit" du "TEdit4".

PS(bis): je débute un peu en delphi, donc veuillez excuser mes erreurs, j'ai essayé de commenter au maximum mon source.

Source / Exemple :


var
ListCP         :TStringList;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListCP := TstringList.Create;
  if fileexists('CpList.txt') then ListCP.LoadFromFile('CpList.txt') else
  begin
   MessageDlg('Fichier "CpList.txt" non trouvé.',mtError,[mbOk],0);
   application.Terminate;
  end;
end;

procedure TForm1.Edit4Exit(Sender: TObject);
var
  i           :Integer;
  CodePostal  :String;
  Commune     :String;
begin
  if length(Edit4.Text)<>5 then exit;
  ComboBox3.Clear;

  // permet suivant le code postal, d'aller directement plus loin dans la liste,
  // ce qui divise le temps de parcours de la liste
  if(Edit4.Text > '21121')then i:=7876
  else if(Edit4.Text > '38350')then i:=15758
  else if(Edit4.Text > '57370')then i:=23638
  else if(Edit4.Text > '71960')then i:=31513
  else if(Edit4.Text > '99100')then i:=39185
  else i:=0;

  while not ((i=ListCP.Count) or (CodePostal=Edit4.Text))do
  begin
    i:=i+1;
    Codepostal := Copy(ListCP.Strings[i], 1, 5);    // récupération du code postal
  end;

  while not ((i=ListCP.Count) or (Codepostal<>Edit4.Text))do
  begin
    Codepostal := Copy(ListCP.Strings[i], 1, 5);    // récupération du code postal
    Commune := Copy(ListCP.Strings[i], 7, Length(ListCP.Strings[i])); // récupération du nom de la comune
    if((Codepostal=Edit4.Text) and (Edit4.Text < '98891'))then
    begin
      ComboBox3.Items.Add(Commune);   // ajout de la commune dans la combobox
      Edit6.Text := 'France';
    end
    else if((Codepostal=Edit4.Text) and (Edit4.Text > '98891'))then Edit6.Text := Commune;
    i:=i+1;
  end;

  ComboBox3.Text := ComboBox3.Items[0];
end;

Conclusion :


- Comme vous le verrez dans les commentaires plus bas il y a le problème de bureau de distribution qui s'annonce très embétant à traiter, mais qui ne m'interresse pas dans mon cas puisque mon code s'intégre dans un masque de saisie où l'utilisateur choisira la commune dans laquelle il habite.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
Pour accélérer le traitement de chaque ligne lue dans le fichier, il serait préférable de remplacer les boucles par des appels à la fonction copy :

Codepostal := Copy(Ligne, 1, 5);
Commune := Copy(Ligne, 7, Length(Ligne));
JulioDelphi
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
11 -
hello

voila mon source a moi !

http://diabloporc.free.fr/creations.php#cp

Merci a toi pour la liste :D
cedflow
Messages postés
30
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
8 novembre 2004
-
JulioDelphi tu pourrais pas me passer le source, ca m'éviterais de me faire chier à coder même si g déjà ma petite idée sur le codage (c tjrs du temps de gagné)

sinon, je ne c pas ce que tu as utilisé, mais je penses quand stockant le txt dans un StringList au démarrage du prog, on peut obtenir une bonne vitesse de fonctionnement car on accède directement au lignes.
cedflow
Messages postés
30
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
8 novembre 2004
-
Delphiprog t commandes ayant à peu près la même fonctions que mes boucles, cela n'a pas amélioré de façon notable la vitesse d'exécution, par contre g pus rendre plus simple mon code, donc c cool.

en fait la perte de temps est due à la recherche dans le txt et non aux filtres appliqués sur la String (m'enfin si on peut gagner la aussi ;-) )
JulioDelphi
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
11 -
euh... c'est ecrit "voila mon source a moi" donc il te suffit de le telecharger ...
et oui effectivement j'ai mis le txt ds un TStringList.

donc va sur l'url pour prendre mon source ! c tout bete :|

ps : je vois que tu as pris l'executable mais le lien juste a coté c'est "la source" ... suffisais de lire mais on va dire qu'il est tard ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.