Code VBA - Outil de recherche personnel
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
Tu peux toujours entrer une date précise sur la ligne jaune
Salut Claude,
Au préalable je clique sur "Afficher tout", en C1 j'inscris 1950, en C2 1952, en C4 je cherche le 05.08.1951. Les deux lignes comportant cette date sont bien trouvées et affichées.
Comme je voudrais pouvoir chercher n'importe quelle date, j'inscris 1900 en C1 et 2010 et C2. Si je cherche le 05.08.1951 et ça trouve et affiche la première ligne renseignée, la ligne 6, avec la date du 06.03.1971. De même si j'efface au préalable les cellules C1 et C2.
Si je me rends compte qu'une date est fausse et que je clique dessus pour la corriger, ça l'inscrit en C4 sans que je le veuille et ça sélectionne la ligne correspondante. Je ne peux alors pas corriger la date en Cxxx, celle-ci étant toujours réinscrite automatiquement sur la base de la date fausse (que j'efface au préalable la date en C4 ou non).
Dans ton "Aide" en A1, tu as écrit : " ....quand tu vois à l'écran ce que tu cherches, cliquer sur la date de naissance, il ne reste plus qu'une seule ligne et cette ligne peut être éventuellement extraite sur une autre feuille."
Ne serait-il aussi pas possible d'annuler cette fonction qui ne m'est malheureusement pas utile et qui semble à la source de bien des soucis mentionnés ?
A te relire.
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
Pour la saisie semi-automatique, quand tu tape 1 ou 2 lettres il te propose
un nom entier ou même une phrase, il te suffit de cliquer la touche "Suppr"
pour ne conserver que tes 2 lettres.
Tu peux toujours supprimer le Private Sub "date de naissance" (si çà te gène)
édit: pour saisir une date sur la ligne jaune, saisir au format date "jj/mm/aa"
Claude
Salut Claude,
Merci beaucoup pour tes dernières informations. La recherche par date est maintenant possible et l'on peut corriger une date directement dans les lignes, c'est génial
Il reste quand même deux problèmes irrésolus :
1) Si l'on efface manuellement un champ de recherche - soit dans la ligne C, soit dans la barre de formule - l'ouverture des lignes dure toujours quelques longues secondes. Ne serait-il pas possible, dans de tels cas, de forcer le démarrage de ton code AfficherTout qui est bien plus rapide ?
2) Je ne comprends toujours pas pourquoi la saisie semi-automatique fonctionne avec la colonne "Prénom" et non pas avec la colonne "Nom". Mais ne serait-il pas possible de désactiver cette option uniquement pour ce fichier ?
Ce travail en l'état actuel :
A te relire
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
1) Si l'on efface manuellement un champ de recherche
et pourquoi effacer ? , tu tape par dessus le nouveau critère
faut savoir ce qu'on veut et ce qu'on recherche !
Je suis pris ailleurs sur un casse-tête, pas le temps de finaliser ton fichier, désolé !
Amicalement
Claude
Salut le Forum,
Salut Claude, Merci pour ton aide.
dubois a écrit :faut savoir ce qu'on veut et ce qu'on recherche !
Il se peut par exemple que l'on recherche une personne par son nom et, si l'on obtient aucun résultat, que l'on recherche par le prénom.
dubois a écrit :...et pourquoi effacer ? , tu tape par dessus le nouveau critère
Comme mon fichier sera utilisé par plusieurs personnes différentes, c'est difficile de devoir expliquer tout ce qu'il faut faire et ne pas faire.
Si on avait réussi à automatiser la réouverture des lignes - non pas uniquement en cliquant sur ton bouton, mais également lors de l'effacement manuel des cellules - ça aurait évité un tas de problèmes et de questions.
Si tu n'as plus le temps de t'occuper de mon problème, j'espère que quelqu'un d'autre reprenne le flambeau.
Ou est-ce que j'aurais mieux fait de partir dans la direction d'un UserForm, comme le préconisaient Cousinhub et Bob ?
A vous relire.
Bonsoir Yvouille, Claude, Fourm
je consulte le post de loin mais dans la macro
Private Sub Worksheet_Change(ByVal Target As Range)
si tu supprime
' If Target.Count > 1 Then Exit Sub
il me semble que cela correspond à ce que tu cherche à faire
Salut Bob,
Merci pour ta proposition, mais ça ne joue pas.
Avec le code en place : Si j'efface un seul champ (aussi par la barre de formule), ça mouline plusieurs secondes afin d'ouvrir à nouveau toutes les lignes (alors que le code en place de Claude ouvre les lignes en moins d'une seconde). Si j'efface plusieurs champs, la sélection en place reste en place et une nouvelle recherche est possible.
En supprimant If Target.Count > 1 Then Exit Sub tel que proposé : Ca mouline dans tous les cas !
Encore merci pour ton aide et bonnes salutations.
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir à tous,
le "afficher tout" est activé par la suppression du filtre
ActiveSheet.ShowAllDataqui déclenche une erreur si pas de filtre en cours, c'est pourquoi on ajoute avant
On Error Resume Nextdonc on peut ajouter çà en début de macro
Private Sub Worksheet_Change(ByVal Target As Range)
If Flag Then Exit Sub
If Not Application.Intersect(Target, Range("a4:g4", "c1:c2")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
'--- filtre sans dates ---
If Range("c1") = "" And Range("c2") = "" Then
Range("base").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("a3:g4"), Unique:=False
Else 'avec dates
Range("base").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("a3:h4"), Unique:=False
End If
Application.Goto Range("a1"), Scroll:=True
Target.Activate
End If
End Subsimple logique !
Claude
Salut Claude, salut Bob, salut le Forum,
DU CHOC DES IDEES JAILLIT LA LUMIERE !
Claude,
Ton nouveau code fonctionne presque à merveille. Grace à celui-ci, je peux effacer un champs et les lignes s'ouvrent à nouveau en un éclair ou je peux effacer plusieurs champs et la sélection en place ne se modifie pas jusqu'à ce que tape de nouveaux critères de recherche. Ca serait tout à fait utilisable ainsi.
Bob,
J'ai à nouveau essayé de supprimer le passage que tu préconisais ('If Target.Count > 1 Then Exit Sub) et le nouveau code de Claude fonctionne maintenant à mon entière satisfaction : que j'efface un ou plusieurs champs ou que j'utilise le bouton "Afficher tout", l'entièreté des lignes s'ouvre en une fraction de seconde.
Merci à vous deux qui m'avez permis - aux forceps
Voici la version finale :
Bonjour,
Sur la base des discussions ci-dessus, j’utilise actuellement le fichier «Entrées hebdomadaires» ci-joint.
Je voudrais maintenant utiliser les macros en place dans ce fichier pour le nouveau fichier «Nouveaux assurés», mais mes macros à disposition sont tellement emberlificotées et mélangées avec d’autres codes permettant d’autres fonctions que je ne m’en sors pas. De plus, certaines parties de codes devenues inutiles au fil de l’évolution du premier fichier n’ont pas été effacées.
Pourriez-vous aussi m’aider à transférer d’un fichier à l’autre uniquement les codes utiles aux fonctions ci-dessous (ou éventuellement recommencer le tout à zéro) :
- Recherche par l’un ou l’autre ou plusieurs critères possibles à inscrire dans la ligne 2, soit avec des débuts de chaines, soit avec des * (Par exemple recherche de Jean-Pierre avec «Jea» ou «*Pie», voir à ce sujet la feuille «Aide» placée dans le fichier «Entrées hebdomadaires»),
- Réouverture de toutes les lignes en cas d’effacement des critères de sélection.
A vous relire
Bonjour Yvouille
Ton fichier en retour avec l'adaptation du code qui se trouvait dans la feuille Base
A noter que :
- je ne vois as à quoi pouvais servir l'intersect sur le Range(C1:C2)
- j'ai modifié ta feuille essai en descendant les lignes
Amicalement
Salut Dan,
Merci beaucoup pour ta réponse, c'est exactement ce que je désirais.
J'avais inscrit que certaines parties de ce code étaient d'anciennes tentatives avortées qui n'avaient jamais été effacées ; c'était exactement le cas pour ces cellules C1:C2.
Sur la base de ton code, j'ai donc à nouveau essayé de le transformer pour d'autres usages et y suis - grâce à toi - arrivé
J'ai alors une nouvelle question : à quoi sert cette ligne cachée (ligne 3 sur la feuille 2) ? Je n'en comprends vraiment pas l'utilité
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir,
les lignes 1 et 2 sont la zone de critères (filtre)
la ligne 3 est la ligne d'en-tête de la base à filtrer
pour l'esthétique, on la masque. (surtout pas la supprimer)
à noter que pour être sûr d'avoir les mêmes en-têtes,
en général, je mets en "A3" =A1
pareil sur toute la ligne
Amicalement
Claude
Salut Claude,
Merci à toi aussi pour cette précision. Je crois que j'ai posé ma question un peu vite ; il me semblait qu'aucune partie du code ne faisait référence à la ligne 3 alors que c'est tellement évident .....
Range("A3:G" & ........Encore merci à vous tous et bonnes salutations.
Bonjour,
Ta solution ma bien plus, pour une utilisation future, mais pourquoi que quand je veut l’étendre a plus de critère cela ne fonctionne pas ?
La tu fait des recherche a partir des colonnes (A) jusqu’à (G), et si on veut jusqu'à (j) par exemple ça ne marche pas. même en remplacent (G) par (j).
Private Sub Worksheet_Change(ByVal Target As Range)
'If Flag Then Exit Sub ' Public Flag As Boolean' (dans Module)
If Not Application.Intersect(Target, Range("a4:J4")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Range("a5:J500").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("a3:J4"), Unique:=False
Application.Goto Range("a1"), Scroll:=True
Target.Activate
End If
End Sub
Ou alors j'ai rien compris ( c'est fort probable...).
Merci d'avance,Amicalement
dubois a écrit :Bonsoir à tous,
Comme je recherche toujours la simplicité alliée à l'efficacité, je te propose ceci:
Une seule base pour tout, (j'ai ajouté en dernier une colonne "Année")
pas besoin de trier
à lire le commentaire "Aide"
ceci n'est qu'une ébauche (principe), mais peut être complété et amendé.
Je ne connais pas de moteur de recherche + efficace,
(3 clics et tu as le résultat)
à toi de voir !
Amicalement
Claude
Salut Festysonic,
Je pense que ce fichier est facilement modifiable pour d'autres utilisations. (c'est en fait ce que j'ai cherché à faire avec mes dernières demandes).
Selon l'exemple ci-joint, il est possible de l'utiliser pour des données depuis la colonne A à la colonne J.
Attention : Il faut aussi modifié la ligne 3 qui est normalement cachée !!
NB : Je n'ai pas contrôlé quel code tu as utilisé (il y a eu beaucoup de modifications
Salut,
Grand merci Yvouille de ton explication (je n'avais fais attention à la ligne caché n°3 ) c'est pour ça que sa voulait pas marcher.
Merci aussi a Claude pour le début du code "simple mais efficace".
Bon week-end a tous
Yvouille a écrit :Salut Festysonic,
Je pense que ce fichier est facilement modifiable pour d'autres utilisations. (c'est en fait ce que j'ai cherché à faire avec mes dernières demandes).
Selon l'exemple ci-joint, il est possible de l'utiliser pour des données depuis la colonne A à la colonne J.
Attention : Il faut aussi modifié la ligne 3 qui est normalement cachée !!
NB : Je n'ai pas contrôlé quel code tu as utilisé (il y a eu beaucoup de modifications
) ; prend vraiment le dernier code inscrit dans mon fichier ci-joint.