Code VBA - Outil de recherche personnel

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.

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

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.

Bonsoir à tous,

le "afficher tout" est activé par la suppression du filtre

ActiveSheet.ShowAllData

qui déclenche une erreur si pas de filtre en cours, c'est pourquoi on ajoute avant

On Error Resume Next

donc 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 Sub

simple 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 - de pouvoir utiliser un fichier absolument génial.

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

58yvouille-1.zip (51.30 Ko)

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é . Par exemple le nouvel essai sur la feuille 2.

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é

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 ) ; prend vraiment le dernier code inscrit dans mon fichier ci-joint.

107festysonic.zip (84.81 Ko)

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.

Rechercher des sujets similaires à "code vba outil recherche personnel"