Rechercher des données dans un tableau à partir d'un autre

Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Dans le cadre de mon boulot j'aurais besoin de retrouver des données contenues sous Excel 2003 dans un Tableau 1 à partir d'un second Tableau 2.

Pour mieux vous illustrer la situation, le premier tableau contient toutes les infomations sur les employés: Nom, Adresse, Téléphone, Date d'embauche ...

Le second tableau contient uniquement des noms de Rues.

J'aurais besoin de retrouver tous les employés référencés dans le Tableau 1 (plusieurs milliers) qui résident dans les Rues mentionnées dans le Tableau 2 (plusieurs centaines).

Un grand merci d'avance !

5 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Si l'info du tableau 2 ne se situe pas dans le tableau 1 ça va être difficile !
L'adresse est-elle décomposée (n°, Rue, CP, Ville) ?
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Dans le premier dans lequel je dois retrouver des données l'adresse et du type N° et rue/Ville/code postal dans 3 colones séparées.
Dans le second il s'agit simplement du nom des Rues.

En fait il ne s'agit pas d'un nom de Rue à retrouver dans le Tableau 1 mais de plusieurs centaines.

Est-il possible de retrouver les ligne du Tableau 1 qui contiennent les noms des rues du Tableau 2 ?
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Il faudrait pouvoir extraire le partie "rue" du champ "N° et rue" ce qui ne sera pas facile à cause des Bis, Ter et autre n° particuliers.
De plus, si les deux sources de données ne sont pas harmonisées j'ai bien peur que les résultats ne soient pas très bons : par exemple il sera difficile d'identifier la «Rue du Général de Gaulle» à l'adresse «13 Bis, Rue du Gal de Gaulle»
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Auriez-vous une formule qui permettrait d'effectuer ces recherches ? Même s'il y a des erreur (comme cité avec l'exemple de Rue du Gal de Gaulle). Il me faudrait au moins un résultat approximatif ...
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
Bonjour

Il faut préparer votre tableau 1 pour pouvoir l'exploiter
pouvez-vous ajouter des colonnes dans ce tableau
et par formule extraire le N°, les indices (bis,ter,...) et le nom de la rue
une fois le traitement éffectué faire un copier coller valeurs sur les colonnes créés pour supprimer les formules ayant servis à l'extraction.
Vous pourez mettre un filtre automatique sur votre base et filtrer sur le nom de la rue et là vous aurez toutes les personnes habitant cette rue
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Est-ce possible d'extraire en une seule fois les personnes résidants non plas dans une seule rue mais dans une liste de rues ? (environ 550 rues)
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
Oui cela est possible avec le filtre il est possible de choisir ce que l'on veut
cela va être fastidieu vu la quantité de nom à sélectionner (550)
est ce que ces rues font parties d'un arrondissement ou un quartier défini pouvant être retrouvé dans votre base pour simplifier le filtre
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Malheureusement non ce sont des rues précises, il n'y a aucun arrondissement qui est pris dans sa totalité.
Je dois extraire du fichier du personnel tous ceux qui risident dans ces rues. Pourriez-vous m'indiquer la marche à suivre ?
Merci d'avance !
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

Le mieux serait de joindre un extrait du classeur , ne serait ce pour voir la ou les colonnes de l'adresse avec des noms bidons (par ex. : zaza1,zaza2......) dans les 2 tableaux.

pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse

apparemment, vu les nombres annoncés, on peut penser à une solution par VBA mais...


Michel
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Ci-dessous le lien cjoint:

https://www.cjoint.com/?3JplpLYQQak

Merci d'avance !
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
OK,

Dans le tableau1, je suppose qu'il faut chercher dans les 2 colonnes (2 & 3) comme par exemple ligne 24: Boulevard Marcel Sauvaire ?

As tu des noms avec des références parcellaires ?

Pourquoi parfois des parenthèses dans le tableau 2: on distingue ou pas ? par ex: route de Galice lignes 12 et 18

Solution VBA vu les nombres (plusieurs milliers de nom) et 550 rues...

Je serais absent une partie de l'après midi...donc, patience
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
En effet, l'idéal serait de chercher dans les deux colones ...

Qu'est-ce que des noms avec des références parcellaire ?

Les parenthèses ne représentent rien, pas la peine de les distinguer, les noms des rues sont bien à prendre en compte.

En attendant merci pour le coup de pouce !
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Certains noms de rues qui sont en fait des "périmètres" ne donneront sûrement rien lors de la recherche, mais ce n'est pas grave
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
..."merci pour le coup de pouce3...

disons plutôt
"merci pour l'usine à gaz!" :o)
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
Bonjour

Comme je vous l'avez dit c'est long et fastidieu pour mettre une base à jour
Par divers formules avec recherche, trouve, gauche, droite je suis arrivée au résultat ci-joint, je vous laisse le choix entre majuscule et minuscule, une fois un premier contrôle vous devrez faire un copier /coller valeur des colonnes vertes et supprimer en suite les colonnes C, D, & G inutiles (en rouge)
j'ai mis un contrôle sur la feuille ZUS et une seule rue a été trouvé je suis inquiet à vous de voir

le fichier https://www.cjoint.com/?3JqlfMr9PSK

Il y a encore beaucoup de travail à faire
0
Maestro_4M Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci pour le tableau, j'y vois déjà beaucoup plus clair ! Le fait qu'il n'y est qu'un seul résultat ne m'étonne pas du tout.

A quoi corresponde les non des rues en rouge dans le tableau ZUS ?
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
sur ZUS des nom qui étaient entre parenthèses
sur base à des modifications faites manuellement pour obtenir le résultat escompté en minuscule (accent ou strophe ...)
0

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

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
ci joint macro proposée regroupant les habitants par rue dans la zone zus

Option Explicit  
Option Base 1  
Dim T_base, T_zus  

Sub selectionner_habitants()  
Dim T_ame()  
Dim Cptr As Integer, Lig As Integer, Col As Byte, Cpt As Integer, chmp As Byte  
     Application.ScreenUpdating = False  
     Call harmoniser_ecritures  
     ReDim T_ame(7, 1)  
       
     For Cptr = 1 To UBound(T_zus)  
          For Lig = 1 To UBound(T_base)  
               For Col = 2 To 4  
                    If InStr(T_base(Lig, Col), T_zus(Cptr, 1)) Then  
                         Cpt = Cpt + 1  
                         ReDim Preserve T_ame(7, Cpt)  
                         For chmp = 1 To 7  
                              T_ame(chmp, Cpt) = T_base(Lig, chmp)  
                         Next chmp  
                         Exit For  
                    End If  
               Next Col  
          Next Lig  
     Next Cptr  
       
     With Sheets(3)  
          With .Range("A2:G" & Cpt)  
               .Value = Application.Transpose(T_ame)  
               .Borders.Weight = xlThin  
          End With  
          .Select  
     End With  
End Sub  

Sub harmoniser_ecritures()  
Dim derlig As Integer, Lig As Integer, Col As Byte  
Dim zus As String  

With Sheets(1)  
     derlig = .Columns("A").Find("*", , , , , xlPrevious).Row  
     T_base = .Range("A2:G" & derlig).Value  
     For Lig = 1 To derlig - 1  
          For Col = 1 To 3  
               T_base(Lig, Col) = UCase(Trim(T_base(Lig, Col)))  
          Next Col  
     Next Lig  
End With  

With Sheets("zus")  
     derlig = .Columns("A").Find("*", , , , , xlPrevious).Row  
     T_zus = .Range("A2:A" & derlig).Value  
     For Lig = 1 To derlig - 1  
          zus = T_zus(Lig, 1)  
          T_zus(Lig, 1) = UCase(Trim(enlever_accents(zus)))  
     Next  
End With  
End Sub  

Function enlever_accents(texto As String) As String  
Dim accents As String * 14, caract As String * 1, lettre As String * 1  
Dim Cptr As Integer, pos As Integer  

     accents = "âäàêëéèîïôöûüù"  
     For Cptr = 1 To Len(texto)  
          caract = Mid(texto, Cptr, 1)  
           pos = InStr(accents, caract)  
           If pos > 0 Then  
               lettre = Choose(pos, "a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "u", "u", "u")  
                texto = Replace(texto, caract, lettre)  
          End If  
     Next  
     enlever_accents = texto  
End Function


Durée 1,43 sec pour 848 habitants (ram 512 Mo, proc 3Ghz)

maquette
https://www.cjoint.com/?3Jqpyld8LLg

Michel
0
PHILOU10120 Messages postés 6445 Date d'inscription   Statut Contributeur Dernière intervention   824
 
Bonjour Michel_m

j'ai lancé la macro sélection des habitants cela me donne une liste de 24 adresses comment paramétrer-vous pour avoir 848 ou qu'elle est la procédure
j'ai mis un bouton pour lancer la macro ne sachant pas la combinaison de touche à utiliser
mais c'est super boulot
0