Recherche d'un texte dans trois feuilles et renvoyer la liste

J

JCA06

Guest
Bonjour à tous,

J'aimerais retrouver un modèle à adapter pour un problème qui a certainement été traité.
Dans un même classeur, j'ai trois feuilles avec deux colonnes :
- Colonne A avec le nom patronymique, nom de naissance, prénom, alias...
- Colonne B avec un numéro de classeur.

Le but du jeu étant de savoir dans quelle classeur de quelle armoire chercher le dossier, il faudrait obtenir une liste des données qui correspondent avec trois informations :
- le nom de page qui donne le nom de l'armoire ;
- la valeur de la colonne A ;
- la valeur de la colonne B.

Je pense qu'un userform serait adapté, activé par un CommandButton "Lancer une Recherche" avec une textbox dans laquelle on saisirait le texte à rechercher et une listbox de résultat.
Je vois bien l'instruction InStr proposée à C@thy et probablement l'utilisation d'un tableau pour gérer les résultats (salut Yeahou §).

Mais bon, je retire la citation que j'ai faite à @+Thierry sur sa démo de rudiments sur les listbox ou je disais "grace à vous j'ai l'impression d'être intelligent"...

Je me rends bien compte que c'était juste une illusion, à peine une sensation, etc...

Je ne suis pas encore prêt à me lacher sans vous, mais je ne désespère pas d'y arriver !

Merci pour votre aide.
 
J

JCA06

Guest
Salut Thierry et le forum,

Grace à toi, je suis arrivé à ce que je voulais !

Je suis content car j'ai fait des progrès, même si ce n'est pas demain la veille que je pourrai pondre un code pareil tout seul, notamment le code de génération d'userform du module 2 !

Néanmoins je suis arrivé à en comprendre le fonctionnement à 95 %, notamment en cherchant à réparer les conséquences des modifications que j'ai tenté de faire !

Par exemple, j'avais voulu supprimer l'information de l'adresse récupérée dans Tablo en me disant que les utilisateurs principaux de ce fichier n'en auraient pas l'utilité, mais je n'avais pas vu que cette adresse servait à gérer le click sur la listbox.

J'ai aussi révisé les MsgBox avec ou sans parenthèses en ajoutant un bout de code au cas ou le Text n'est pas trouvé :
If I = 0 Then MsgBox "Le texte '" & Text & "' n'a pas été trouvé" & Chr(10) & Chr(10) & "Essayez avec une partie du nom.", vbOKOnly, "Résultat de la Recherche": Recherche: Exit Sub
Le Exit Sub étant là au cas où l'utilisateur clique sur Annuler.

Il me reste tout de même une question : comment paramétrer les boutons "Retour Accueil" (actuellement en Left 0 et Top 0 dans leurs propriétés) de mes feuilles de données de façon à ce qu'ils apparaissent toujours à l'écran même si je suis à la ligne 6 000 ?

J'ai bien essayé de chercher, mais j'ai des soucis depuis quelques jours avec l'aide du programme. C'est peut-être à force d'en dire du mal !!

Bonne soirée, et merci encore.
 
@

@+Thierry

Guest
Bonsoir ou Plutôt Bonjour JCA, Pat, le Forum

Pat t'inquiète un de ces quatres je débarque !!

JCA, le plus simple tu fais une Freeze Pane sur la première ligne où se trouve le bouton (sans VBA) depuis le menu Fenêtre d'Excel... Pas compliqué et en même temp tu récupères les "headings" de colonnes...

(sinon pour une certaine "Marion" j'ai fait un bouton "flottant" (tu cherches sur ce Forum) mais c'est injustifié de faire une usine à gaz telle que ça...)

Mais je vois que c'est bien, tu "épluches" bien et c'est en créant des erreurs qu'on arrive à les comprendre... Comme disait l'autre, il faut connaître son ennemi pour mieux le combatre !

Bonne Nuit
@+Thierry
 
J

JCA06

Guest
Bonjour Thierry, le Forum,

Bon sang mais c'est bien sûr !

Dire qu'il y a quelques semaines, au plus quelques mois, je ne connaissais quasiment pas les macros et je me prenais pour un bon sur Excel !

Aujourd'hui, j'en sais beaucoup plus et je sais que je suis mauvais !
Alors bon, si en plus je ne pense plus à ce que je savais faire sans vba !

Merci encore, et bonne journée (et bon café vu la faible valeur de DATEDIF entre ton dernier post d'hier et le premier d'aujourd'hui !)
 
J

JCA06

Guest
AAARRRGGGHH !

Je me suis fait piégé !

A peine le fichier mis sur la base, les premières questions arrivent !!

"Et si je connais le nom et le prénom ?"
"Et si je sais de quelle catégorie il est ?"
...

Je sens que je n'ai pas fini avec ce fil !

Bon alors, reprenons notre calme : pour la première question, je peux ajouter un Text2, mais comment ajouter la recherche de ce Text2 ?

Voici l'extrait du code :
With Sheets(S).UsedRange
Set C = .Find(Text, LookIn:=xlValues)
If Not C Is Nothing Then
Firstaddress = C.Address
Do
ReDim Preserve tablo(5, I)
tablo(0, I) = C.Value
tablo(1, I) = Sheets(S).Name
tablo(2, I) = C.Offset(0, 1).Text
tablo(3, I) = C.Row
tablo(4, I) = C.Address
I = I + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Firstaddress
End If
End With

J'ai bien essayé de remettre la ligne Set C avec Text2 avant l'alimentation du tableau, mais du coup il oublie la condition de Text. Sinon, j'ai essayé
If C.Find(Text2, Lookin:xlValue) = Nothing après le C.Address, mais je ne m'en sort pas !

vba est bien un langage :pour le moment, j'arrive à comprendre quelques phrases, mais de là à le parler !!

A plus.
 
@

@+Thierry

Guest
Bonsoir Jean Charles, le Forum

Heuh oui, j'ai l'impression d'être un peu décroché depuis la première version de cette démo...

En fait ce n'est pas bien grave qu'ils cherchent la Catégorie, le Nom ou le Prénom, le "Find" tel qu'il est établi va chercher toutes les occurrences possibles partout sur les feuilles... en fait ce n'est que le tablo(2, i) (troisième colonne du Tableau) qui risque de se retrouver vide selon la colonne où le "find" a été "trouvé" et a déterminé le Set de Range "C" ...

Maintenant oui, il y a moyen de faire un truc bien plus puissant qu'une simple InputBox pour paramétrer la Variable "Text" mais avant toute chose il me faudrait avoir confirmation que nous travaillons sur la même structure comme annoncée au début de ce Fil de Discussion :

Dans un même classeur, j'ai trois feuilles avec deux colonnes :
&nbsp;&nbsp;- Colonne A avec le nom patronymique, nom de naissance, prénom, alias...
&nbsp;&nbsp;- Colonne B avec un numéro de classeur.

Car le coup du "Et si je connais le nom et le prénom ?" me laisse présager la "naissance" d'une colonne supplémentaire...

En fait ce n'est pas grave, mais il faut maintenant déterminer définitivement ces paramètres et je te fait un UserForm de Recherche sur mesure...
A) Nombre Exacte de Colonnes dans les trois feuilles
B) Emplacement des Critères :(exemple)
&nbsp;&nbsp; ¤ Nom Patronymine (Colonne A)
&nbsp;&nbsp; ¤ Nom Naissance (Colonne B)
&nbsp;&nbsp; ¤ Prenom (Colonne C)
&nbsp;&nbsp; ¤ Marque de la Machine à Laver (Colonne D)
&nbsp;&nbsp; ¤ Bière préférée (Colonne E)
&nbsp;&nbsp; ¤ etc etc etc (on a 256 Colonnes)
&nbsp;&nbsp; ¤ Numéro de Classeur (Colonne X)

Seulement à partir de ce genre d'info on peut essayer de faire un truc qui tiendra la route...

Si je peux (je ne promets rien, si j'ai le tmp) demain midi je passe à l'Ambiance Café, comme çà on en discustera...

Bonne Fin de Journée
@+Thierry
 
@

@+Thierry

Guest
C'est re-moi

Pour le Fun je te mets en ligne les liens vers un "ro" moteur de recherche que j'ai fabriqué :


MON MOTEUR DE RECHERCHE:
Ce lien n'existe plus

MES DATABASES :
Ce lien n'existe plus

Ce lien n'existe plus

Ce lien n'existe plus

MODE D'EMPLOI


Notice de Montage
Télécharger et dézipper le tout dans un Unique et Seul Répertoire. Ouvrez le Fichier [USF-ThierryXLD-V02.02.xls] Puis depuis l'Onglet "Settings & Imports" Importez le TXT voulu....

Voilà, je pense que tu pourras mieux réaliser de quoi je parle pour les besoins de connaître la structure des feuilles à analyser....

Bonne Soirée
@+Thierry
 
J

JCA06

Guest
Bonsoir Thierry, le Forum,

A vrai dire, j'aimerais ne pas consacrer trop de temps sur ce dossier, ni mon temps à moi, mais encore moins le tien, d'une part parce que j'ai d'autres choses à faire, et d'autre part parce que je ne veux pas tomber dans le piège du "on peut faire toujours mieux".

Je te confirme les données de départ : un classeur, trois feuilles, une colonne avec nom, prénom... et une colonne avec le n° de classeur.

L'extrait du code est celui que tu as noté dans ton post du 16-07-04 18:12.

Voici une idée que j'ai eue :
1. Une plage éloignée de la page historik servirait de tampon à partir de la colonne AA par exemple ;
2. Cette plage est alimentée par la recherche de Text ;
3. Une nouvelle recherche est faite dans cette plage avec Text2
4. Le résultat alimente "normalement" la feuille historik ;
5. La plage intermédiaire est effacée.

Est-ce une bonne idée ?

Pour demain, c'est avec plaisir que je te retrouverai, mais je surveillerai les messages avant !!

Bonne soirée.
 
@

@+Thierry

Guest
Arf j'ai un peu merdouillé avec ma construction des Tag pour les liens... Je reprends !!!



MON MOTEUR DE RECHERCHE:


Ce lien n'existe plus


MES DATABASES :


Ce lien n'existe plus

Ce lien n'existe plus

Ce lien n'existe plus



MODE D'EMPLOI





Notice de Montage
Télécharger et dézipper le tout dans un Unique et Seul Répertoire. Ouvrez le Fichier [USF-ThierryXLD-V02.02.xls] Puis depuis l'Onglet "Settings & Imports" Importez le TXT voulu....


Ce devrait être plus net !!
@+Thierry
 
@

@+Thierry

Guest
Re Bonsoir Jean Charles,

Je ne trouve pas géniale l'idée de passer par deux fois sur les recherches, ou alors oui mais justement comme dans le moteur de recherche que je viens de mettre en ligne... En passant par une recherche "affinée" (Fine Search)...

Mais sinon si tu n'as que deux colonnes alors Prénom ou Nom ou Alias ou Patronyme fonctionnent directement non ? c'est juste au niveau d'une recherche sur du numéro de classeur que celà pose un problème ? non ?

Alors un bricolage rapidos inversera la valeur pour la 3ème colonne du Tablo comme suit :

With Sheets(S).UsedRange
Set C = .Find(Text, LookIn:=xlValues)
If Not C Is Nothing Then
Firstaddress = C.Address
Do
ReDim Preserve tablo(5, I)
tablo(0, I) = C.Value
&nbsp;&nbsp; If C.Column = 1 Then
&nbsp;&nbsp; tablo(1, I) = C.Offset(0, 1).Text
&nbsp;&nbsp; Else
&nbsp;&nbsp; tablo(1, I) = C.Offset(0, -1).Text
&nbsp;&nbsp; End If
tablo(2, I) = C.Row
tablo(3, I) = Sheets(S).Name
tablo(4, I) = C.Address
I = I + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Firstaddress
End If
End With

Peut-être celà te suffit-il alors ?
Bonne Soirée

Vers Midi je mettrai un Post ici sur mes disposnibilité de Lunch Time

@+Thierry
 
J

JCA06

Guest
Bonjour Thierry, le Forum,

La recherche fonctionne très bien, mais suivant le mot recherché, la liste de réponse peut être longue, et le fait de pouvoir préciser un autre mot permet de limiter le nombre d'occurences. C'est pourquoi j'ai pensé à une double recherche.

Une précision qui peut être utile : il n'est pas nécessaire de cherche dans la colonne B des feuilles qui contiennent le n° de classeur.

La solution est peut être d'extraire le code d'alimentation du Tablo dans une procédure appelée si la recherche de Text2 dans C aboutie ?

Autre idée, avec un bonjour à Yeahou : est-ce-qu'un premier tableau peut récupérer les n° de lignes de la recherche de Text et qu'un second tableau ne garderait que les n° de lignes pour lesquelles Text2 est trouvé ?

Pour midi aujourd'hui, il est possible que je rentre chez moi, je te le dirai en réponse à ton post de midi.

Bonne journée, sous le soleil !
 
@

@+Thierry

Guest
Bonjour JC, le Forum

Pour midi, je nesais pas encore, mais je suis déjà à la bourre alors çà me parait mal barré...

Pour une recherche primaire de dégrossissage, puis une seconde recherche raffinée (si besoin) sur deux tableaux (en ListBox), regarde le moteur de recherche (USF-ThierryXLD-V02.02) que j'ai mis en ligne ci-dessus... C'est exactement ceci...

Bon je file pour l'instant
@+Thierry
 
J

JCA06

Guest
Re bonjour,

J'ai téléchargé la bète avec les bases (sauf 2003 qui semble dépasser la taille qui nous est autorisée...).

J'en ai fait une double utilisation : j'ai tenté de lire les codes, ensuite j'ai pleuré un moment, puis j'ai utilisé l'application !

Je vais chercher sur le thème des doublons.

Pour midi aujourd'hui, je ne pourrai pas y être, j'espère que toi non plus, sinon je vais avoir des regrets !!

A plus.
 
J

JCA06

Guest
Re bonjour Thierry, le Forum,

Eureka !

Je crois avoir trouvé une solution simple :
- Text étant obligatoirement le nom (ou une partie du nom) ;
- Text2 étant le prénom (ou une partie du prénom) ;

Il suffit de faire la recherche de Text3 = "*" & Text & "*" & Text2 & "*"

Qu'est-ce-que tu en penses ? (là mon code est Finger.Cross = True !!)

Bon, d'un autre coté, je vais tout de même passer par un userform en prévoyant trois textbox car le nom saisi peut aussi être le nom de naissance, qui est saisi dans la liste après le prénom pour les personnes mariées !
Et aussi des Chekbox pour préciser la catégorie lorsqu'elle est connue.

C'est sûr que si j'avais créé la liste moi-même, j'aurai créé plusieurs colonnes (Nom, Prénom, Nom patronymique), mais bon, je n'ai pas envie de me retapper les 10 000 lignes du fichier !!

Bon allez, à plus et bon app.
 
@

@+Thierry

Guest
Re Bonjour Jean Charles, le Forum

Finalement je n'ai fait que grignoter sur le coin du clavier comme d'hab...

Bon alors pas convaincu avec ton Finger.Cross (lol), j'ai pensé qu'il était temps de faire une V02 de ce UserForm...

Et comme c'est tout de même une demande assez récurrente les UserForm de Recherche j'en ai fait un nouveau fil de discussion où je te donne rendez vous...

=> Lien supprimé

Tu me diras ce que tu en penses... En plus il est personaliser MC !

Bon Aprèm

@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 457
Messages
2 088 575
Membres
103 884
dernier inscrit
simon.corpataux