Fonction recherche

Bonjour (Je débute en VBA),

J'ai une base de données dans l'intégralité de mon classeur.

Dans une case de mon 1er onglet "Nomenclature des livres" je voudrais affecter à une cellule la fonction de barre de recherche.

Ainsi en entrant en A1 par exemple "Charlie" puis entrer

On se retrouverait directement dans l'onglet "BD" dans lequel se trouve "Charlie"

Le but est d'éviter d'utiliser Ctrl+F aux autres utilisateurs pour trouver une valeur

Je vous remercie d'avance,

Axel P

Bonjour Axel,

Peux-tu mettre un fichier en exemple? Merci

ddetp88

Voilà j'ai créé un autre document plus simple mais le principe est le même

14exemple.xlsx (15.41 Ko)

Vois cet exemple.

Cordialement

ddetp88

Bonjour Axel, Ddetp, bonjour le forum,

Une autre proposition où seules apparaissent dans la base de données les lignes contenant le mot (en entier ou en partie) édité en B1.

À la sortie de l'onglet BD les lignes sont à nouveau toutes visibles.

Le code de l'onglet Recherche :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim B As Worksheet 'déclare la variable b (Base)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Byte 'déclare la variable NC (Nombre de colonnes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

'si le changement a lieu ailleurs q'en B1 ou si B1 est effacée, sort de la procédure
If Target.Address <> "$B$1" Or Range("B1").Value = "" Then Exit Sub
Application.ScreenUpdating = True 'masque les rafraîchissement d'écran
Set B = Sheets("BD") 'définit l'onglet base B
B.Rows.Hidden = False 'affiche toutes les lignes de l'onglet B
TC = B.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
    For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau de cellules TC
        'condition : si la valeur de la cellule B1 est contenue dans la valeur ligne I colonne J de TC
        If InStr(1, TC(I, J), Range("B1"), vbTextCompare) <> 0 Then
            ReDim Preserve TL(K) 'redimensionne le tableau de lignes TL
            TL(K) = I 'récupère le numéro de ligne I contenant la valeur en A1
            K = K + 1 'incrémente K
            Exit For 'sort de la boujcle 2
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
B.Rows.Hidden = True 'masque toutes les lignes de l'onglet B
B.Rows(1).Hidden = False 'affiche la ligne 1 de l'onglet B
If K > 0 Then 'condition : si au moins une occurrence a été trouvée
    For I = LBound(TL) To UBound(TL) 'boucle sur tous les éléments du tableau de lignes TL
        B.Rows(TL(I)).Hidden = False 'affiche la ligne TL(I) de l'onglet B
    Next I 'prochaine élément de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissement d'écran
Else 'sinon
    MsgBox "Aucunne occurrence trouvée !" 'message
End If 'fin de la condition
B.Select 'sélectionnela base B
ActiveCell.Range("A1").Select 'sélectionne la cellule A1 de la base B
End Sub

Le code de l'onglet BD :

Private Sub Worksheet_Deactivate()
Rows.Hidden = False
End Sub
13axel-v01.xlsm (25.38 Ko)

Bonjour et Merci à tous les 2,

Cela-dit, je me suis peut-être mal exprimé, "Charlie" est un exemple.

Je voudrais être capable de taper "Tintin 2" ou "Livre 3" et les retrouver dans mon classeur en fait.

pourtant ça colle

charlie
ddetp88 a écrit :

pourtant ça colle

Effectivement

plus sérieusement, l'exemple que j'ai fait ne fonctionne pas?

Non parce qu'en tapant livre 1 une boite de dialogue s'affiche en disant que la recherche n'est pas valide

Re,

Axel, le fichier exemple que tu as fourni comporte deux bases de données. Une nommée Livre, l'autre nmmée BD ?!

Il me semble que dans ton premier post tu ne parlais que de l'onglet BD comme étant l'onglet de la rechercher... Et si tu tapes Livre 1 il est normal que tu aies un message te disant qu'il n'y a pas d'occurrence trouvé puisque Livre 1 ne se trouve pas dans l'onglet BD. Sinon il faut que tu nous expliques clairement ce que tu veux et pas changer entre ton premier et ton second post...

Ok, effectivement mais ta demande initiale portée sur l'onglet BD. Comme livres x sont dans l'autre onglet, il faut faire la recherche sur les deux onglets de données.

Avant d'aller plus loin, auras-tu d'autres onglets où les recherches devraient se faire?

Si oui, il faudrait fournir un exemple le plus proche possible de ton fichier original. Ca évite pas mal de tracas par la suite

ddetp88

Voici le type de présentation que j'utilise (avec plus d'onglet et de sous parties)

Mais en somme, je voudrais que si un autre utilisateur cherche le magazine "chasse et pêche : La truite", ma fonction recherche l'amène vers l'onglet concerné.

Merci d'avance

6exemple.xlsx (236.06 Ko)

Un code tout simple qui passe en revue les colonnes A se tous les onglets hormis le premier qui est l'onglet d'où démarre la recherche.

Bonne suite.

ddetp88

Merci beaucoup.

Cela dit, il y a une limite dans ce que tu as posté.

En effet, si tu recherche "Livre 1" par exemple, comme Livre 1 est présent dans plusieurs régions la fonction ne le trouve pas.


Ou "Magazine 2" par exemple

Re,

Effectivement, je n'ai pas deviné que tu pouvais le trouver à plusieurs endroit.

On peut faire la recherche sur tous les onglets il n'y a pas de problème.

Mais alors une question désormais se pose.

Peut-il y avoir le même nom plusieurs fois dans le même onglet?

Exemple:

livre 1 peut-il apparaitre plusieurs fois dans le même onglet?

J'adapterai le code en fonction de ta réponse.

Cordialement

ddetp88

Re,

Oui excuse moi j'aurais du précisé.

Oui dans mon cas certains noms apparaissent à plusieurs endroits y compris dans 1 seul onglet.

Concrètement je voudrais que la commande Ctrl + F en cochant dans tout le classeur soit mise directement dans une cellule afin qu'un autre utilisateur n'ait pas à faire cette manipulation.

Merci d'avance.

Axel P

Re,

Oui excuse moi j'aurais du précisé.

Oui dans mon cas certains noms apparaissent à plusieurs endroits y compris dans 1 seul onglet.

Concrètement je voudrais que la commande Ctrl + F en cochant dans tout le classeur soit mise directement dans une cellule afin qu'un autre utilisateur n'ait pas à faire cette manipulation.

Merci d'avance.

Axel P

Voici une proposition qui répond à ta demande.

Elle recherche dans tous les onglets et recherche s'il y a plusieurs fois la même occurrence dans la feuille.

Bonne suite à ton projet.

cordialement

ddetp88

Wow,

Très bien

C'est même mieux que ce que je voulais, merci beaucoup.

Je n'ai plus qu'à comprendre ton code, le copier et l'adapter à mon vrai document.

Bravo!

Rechercher des sujets similaires à "fonction recherche"