[EXCEL] Liste clients -> recherche géographique

Liste clients -> recherche géographique [EXCEL] - VB/VBA/VBS - Programmation

Marsh Posté le 29-07-2009 à 00:25:17    

Bonsoir,
 
Désolé pour pour le titre peu explicite de mon post, j'ai pas trouvé mieux... :D  
 
Voici mon problème:
Je souhaite créer un listing de client avec pour chaque client, différentes infos: nom société, nom contact, tel, adresse, fax, email,...mais surtout le département où se trouve la société en question.
La création de cette "base de données" ne devrait pas trop me poser trop de soucis. Par contre, j'aimerais mettre en place une fonction recherche avancée qui donnerait en sortie:
- la liste des clients pour un département donné (1ère option)
- la liste des clients pour un département donné et les départements limitrophes (2nde option)
- idem ci-dessus + départements limitrophes aux département limitrophes... :sweat:  
 
J'avais initialement pensé à une recherche par la région du département concerné , mais je me suis rendu compte que cela poserait problème.
 
Comment auriez-vous traité cette problématique?
 
Merci!


Message édité par samurai_kagemusha le 29-07-2009 à 00:31:27
Reply

Marsh Posté le 29-07-2009 à 00:25:17   

Reply

Marsh Posté le 29-07-2009 à 08:21:47    

A mon avis il faut que tu fasses une matrice qui contient les départements en colonne et sur les lignes et à l'intérieur la distance qui les séparent. Donc ta matrice est symétrique par la diagonale.

 

Ensuite t'as une liste dans excel pour choisir le type et une pour le dépt. Suivant le dept choisi ça va remplir une colonne de distance pour chaque ligne de ton tableau. Il ne reste plus qu'à filtrer sur cette colonne en fonction de la distance.

 

Ca se fait en VBA la mécanique, je pense pas qu'on puisse le faire direct avec Excel.


Message édité par Deamon le 29-07-2009 à 08:23:37
Reply

Marsh Posté le 29-07-2009 à 17:52:51    

Merci pour ta réponse.
 
J'ai un peu du mal à comprendre ta réflexion. Comment évaluer la distance entre 2 départements?

Reply

Marsh Posté le 30-07-2009 à 06:54:07    

samurai_kagemusha a écrit :

Merci pour ta réponse.
 
J'ai un peu du mal à comprendre ta réflexion. Comment évaluer la distance entre 2 départements?


Tout bêtement, tu n'as qu'à compter "1" pour chaque département limitrophe, "2" s'il faut traverser un autre département entre celui de départ et celui d'arrivée, etc. Ça ne tiendra évidemment pas compte des distances en km, mais ça sera beaucoup plus rapide à mettre en place, et ça a l'air de répondre à tes 2nde et 3ème options.


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 30-07-2009 à 07:57:08    

J'ai pensé à cela, mais vu le nombre de départements (100), ca va me faire un sacré tableau à remplir.
 
J'ai pensé à une autre solution également qui consisterait à schématiser la carte de la France sous forme de tableau, mais c'est pas évident non plus.

Reply

Marsh Posté le 30-07-2009 à 08:06:47    

samurai_kagemusha a écrit :

J'ai pensé à cela, mais vu le nombre de départements (100), ca va me faire un sacré tableau à remplir.
 
J'ai pensé à une autre solution également qui consisterait à schématiser la carte de la France sous forme de tableau, mais c'est pas évident non plus.


Houla, ton autre solution me parait encore plus compliquée qu'un gros tableau de 100*100/2 = 5000 cases à remplir  :p  
Tu pourrais optimiser en ne remplissant que les "1", c'est-à-dire les départements directement limitrophes, et en utilisant une fonction récursive ensuite.


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 30-07-2009 à 08:22:35    

De tout façon je ne vois pas comment on peut remplir automatiquement le tableau donc commence maintenant. ;)
 
La fonction récursive Turkleton n'est vraiment pas évidente. Faut un algo qui calcule la plus courte distance.

Reply

Marsh Posté le 30-07-2009 à 08:54:29    

Deamon a écrit :

De tout façon je ne vois pas comment on peut remplir automatiquement le tableau donc commence maintenant. ;)
 
La fonction récursive Turkleton n'est vraiment pas évidente. Faut un algo qui calcule la plus courte distance.


Tu trouves ?  :??:  Mince, je pensais au contraire que c'était un moyen simple de pas se prendre la tête avec des notions de distance kilométrique, ou de remplissage de gros tableaux. Ou peut-être voulais-tu dire que la récursivité n'est pas facile à appréhender quand on débute en programmation (je ne sais pas quel est le niveau de samurai_kagemusha) ?


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 30-07-2009 à 09:00:20    

Explique ta méthode alors car je vois pas bien comment tu veux faire.

 

Car si tu prends les voisins de chaque département limitrophe tu vas te retrouver avec par exemple des départements de niveau 1 qui seront considérés comme des niveaux 2 ou plus. Après faut voir si c'est génant.

Message cité 1 fois
Message édité par Deamon le 30-07-2009 à 09:03:40
Reply

Marsh Posté le 30-07-2009 à 09:17:14    

Deamon a écrit :

Explique ta méthode alors car je vois pas bien comment tu veux faire.
 
Car si tu prends les voisins de chaque département limitrophe tu vas te retrouver avec par exemple des départements de niveau 1 qui seront considérés comme des niveaux 2 ou plus. Après faut voir si c'est génant.


Je suis peut-être resté trop vague, je vais m'expliquer.  ;)  
 
On crée un tableau à deux dimensions exactement comme tu l'as dit avec les départements en colonne et ligne, et la distance à l'intersection des deux. Mais pour cette distance, on ne remplit que les cases des départements limitrophes, avec un "1". Exemple : le_tableau[Finistère][Morbihan]=1, ainsi que le_tableau[Finistère][Côtes-d'Armor]. Par contre, on laisse à "0" toutes les autres cases de le_tableau[Finistère][XXX], ça sera ça de remplissage en moins.
 
Ensuite, on crée une fonction récursive, avec entre autres en paramètre le niveau d'exploration qu'on veut : 1 = juste le département demandé (option 1 dans le premier post), 2 = départements limitrophes à celui demandé (option 2), 3 = départements limitrophes aux départements de l'option 2 (option 3), etc si on veut aller plus loin.
 
Dans cette fonction, on retourne tous les clients du département demandé, on décrémente la variable d'exploration, et tant qu'elle n'est pas égale à 0, on fait une boucle pour tester tous les "le_tableau[département_demandé][département_de_la_boucle]". Si c'est égal à "1" alors on rappelle récursivement cette fonction, avec toujours la variable d'exploration en paramètre (qui est décrémentée localement à chaque passage), et le nouveau département à traiter. Et normalement, ça fonctionne comme sur des roulettes.  :)


Message édité par Turkleton le 30-07-2009 à 09:25:09

---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 30-07-2009 à 09:17:14   

Reply

Marsh Posté le 30-07-2009 à 09:29:38    

Tu vas avoir une boucle infinie si tu n'enregistres pas les départements déjà sélectionnés pour les supprimer de la boucle.  
Car sinon par exemple on suppose que les 5 valeurs sont des départements avec A qui touche à B1 et B2 :
A B1 C1
   B2 C2
Ton algo va faire par exemple : A -> B1 -> C1 -> C2 -> B2 -> B1 ->...
B2 sera considéré en plus comme un dépt à une distance 4 alors qu'il est limitrophe.

Reply

Marsh Posté le 30-07-2009 à 10:01:52    

Deamon a écrit :

Tu vas avoir une boucle infinie si tu n'enregistres pas les départements déjà sélectionnés pour les supprimer de la boucle.  
Car sinon par exemple on suppose que les 5 valeurs sont des départements avec A qui touche à B1 et B2 :
A B1 C1
   B2 C2
Ton algo va faire par exemple : A -> B1 -> C1 -> C2 -> B2 -> B1 ->...
B2 sera considéré en plus comme un dépt à une distance 4 alors qu'il est limitrophe.


Rha  oué, ça marcherait (en limitant juste à ne pas explorer le département "parent" ) que s'ils étaient limitrophes un à un, mais un département peut être limitrophe de plusieurs, ça peut faire une boucle au 2è niveau d'exploration toussa...  :sweat:  
Y'a plus qu'à rajouter un tableau pour y enregistrer tous les département déjà explorés et faire un test dessus dans la fonction. Ça commence à ressembler à une usine à gaz, mais je reste néanmoins sur mon idée que c'est plus simple que les autres solutions (en tout cas, moi je partirais sur celle-ci si je devais faire une telle application  :D Mais j'aime bien me prendre la tête aussi...)


---------------
If you think it could look good, then I guess it should
Reply

Marsh Posté le 30-07-2009 à 10:15:31    

Oui moi aussi je préfère ta solution même si ça prend plus la tête plutôt que de remplir bêtement un tableau. ;)

Reply

Marsh Posté le 30-07-2009 à 10:37:25    

Deamon a écrit :

Oui moi aussi je préfère ta solution même si ça prend plus la tête plutôt que de remplir bêtement un tableau. ;)


Bin c'est surtout que le remplissage du tableau ne se fait pas du tout "bêtement" (ça serait si simple...) ! D'énormes difficultés vont surgir si tu veux remplir autrement que juste en mettant les départements limitrophes.
Si tu prends l'option distance kilométrique, quel point de référence prends-tu à l'intérieur d'un département ? Faut calculer toutes les distances entre chaque départements ensuite, v'la le boulot...
Si tu prends l'option distance en terme de nombre d'autres départements à traverser pour arriver d'un point A à un point B, c'est super subjectif suivant le chemin que tu prends.
 
Reste plus qu'à savoir ce qu'en pense samurai_kagemusha  ;)


---------------
If you think it could look good, then I guess it should
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed