Faire une recherche dans le classeur excel [Résolu]

Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
- - Dernière réponse : shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
- 13 janv. 2014 à 08:48
Bonjour,

je souhaite à partir d'un bouton, effectuer une recherche de mot/nombre apparaissant dans tout le classeur.

je m'explique.
mon classeur comporte plusieurs feuilles (DATA, 1, 2, 3, 4, 5). sachant que la feuille DATA servira à mettre notre bouton.

j'ai trouvé ce type de code sur le web:
rivate Sub CommandButton2_Click()
Dim cel As Range, plage As Range
Dim CommandButton2 As String
Dim dlg As Long, i As Long

    dlg = ActiveSheet.UsedRange.Rows.Count
    CommandButton2 = Sheets(1).Range("D4").Value

For i = dlg To 1 Step -1
    If Not Cells(i, 1) Like "*" & CommandButton2 & "*" Then
    Cells(i, 1).EntireRow.Hidden = True
    End If
Next i

End Sub

Private Sub CommandButton3_Click()
Cells.EntireRow.Hidden = False
End Sub


j'aimerais un petit coup de main qui me permettrais de masquer les lignes dans tout le classeur sauf de la feuille DATA.

merci de votre aide.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
1
Merci
tiens:



Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)

If Not rFnd Is Nothing Then
 rFirstAddress = rFnd.Address
 Do Until rFnd Is Nothing
  iArr = iArr + 1
  ReDim Preserve arMatches(iArr)
  arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
  Set rFnd = oSht.Range(sRange).FindNext(rFnd)
  If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
 Loop
   FindAll = True
  Else
   ' ----------------------
   ' No Value is Found
   ' ----------------------
   FindAll = False
  End If
  ' -----------------------
  ' Error Handling
  ' -----------------------
Err_Trap:
  If Err <> 0 Then
    MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
    Err.Clear
    FindAll = False
    Exit Function
  End If
End Function



Sub Exemple_util_Findall()
'Recherche dans la feuille Feuil1 de toutes les cellules contenant
' le mot : test


 'variable tableau pour la fonction Findall
Dim arTemp() As String

'Valeur cherchée
Dim ValCherchee As String
ValCherchee = "test"

'Nom de la feuille où se fait la recherche
Dim Nom_Feuil As String
Nom_Feuil = "Feuil1"

'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------

If bFound = True Then 'si on a trouvé des valeurs...
  Debug.Print "Nb occurences : " & UBound(arTemp)
  For X = 1 To UBound(arTemp)
    'Numéros de lignes ou le text a été trouvé:
    Debug.Print arTemp(X)
  Next
End If

End Sub



Il te reste à boucler sur tes différentes feuilles et à adapter la sub Exemple_util_Findall à tes besoins (valeur cherchée, l'inclure dans ta boucle sur les feuilles..)

Bonne Prog.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de jordane45
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Bonjour,
pourquoi masquer les lignes de TOUTES les feuilles (sauf DATA) ?
Pourquoi ne pas plutôt masquer les feuilles directement ?

exemple:
Sub masquerFeuilles()
Dim Sh As Worksheet
'On boucle sur les feuilles du classeur
For Each Sh In ThisWorkbook.Sheets
 'on ne peut masquer les feuilles que si il en reste au moins une..
 ' Et si le nom de la feuille différent de DATA
 If Sh.Name <> "DATA" And NbFeuilVisible > 1 Then
    Sh.Visible = xlSheetHidden
 End If
Next

End Sub

Function NbFeuilVisible()
'fonction permettant de connaitre le nombre de feuilles visibles
Dim Sh As Worksheet
Dim nbF As Integer
'On boucle sur les feuilles du classeur
For Each Sh In ThisWorkbook.Sheets
 If Sh.Visible = xlSheetVisible Then
   nbF = nbF + 1
 End If
Next
NbFeuilVisible = nbF
End Function


Cordialement,
Jordane
Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
0
Merci
merci pour ta réponse jordan45.

pour te répondre, mon classeur est composé de 6 feuilles (comme expliqué dans le premier message).
la feuille DATA ne comporte aucuns renseignement, seulement (pour l'instant) un bouton don l'action est d'ouvrir un userform et de part ce dernier choisir le thème A, B, ... en fonction des informations a remplir dans les feuilles 1, 2, ...
dans chacune des feuille il y a des paramètre "qui peuvent" réapparaître, comme par exemple le nom d'un client.
voilà pourquoi je souhaite effectuer ce genre de chose. ou alors récupérer ces information dans une feuille supplémentaire suite à ce trie.
Commenter la réponse de shadowskill067
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Donc ta question n'est pas (comme je l'avais comprise au départ) "comment masquer 'toutes' les lignes dans les feuilles du classeur"
mais : "comment masquer certaines lignes dans les feuilles" ?

Donc, en reprenant l'exemple que je t'ai donné... Tu boucles sur tes feuilles... et si le nom n'est pas DATA tu caches les lignes en utilisant ton bout de code.


Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
0
Merci
oui effectivement tu as bien compris.

merci pour les informations je vais voir de ce pas.
Commenter la réponse de shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
0
Merci
hello,
excuse moi je ne suis pas très bon en programmation...
j'ai donc un peu de mal d'appliquer ton application à mon besoin.

la manière la p lus simple serais d'utiliser la fonction ctrl+F et rechercher dans tout le classeur. Existe-t-il une fonction VB pour ce même principe?
Commenter la réponse de shadowskill067
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
Je viens de relire ta demande initiale.. Donc en fait tu ne souhaites pas JUSTE masquer les lignes dans le classeur (sauf de la feuille DATA) mais celles qui correspondraient à des mots/nombres précis... c'est bien ça ?
(COmme quoi .. la rédaction des questions de façon clair et compréhensible argumentées éventuellement d'exemples est indispensable....! ).

Enfin bon... le CTRL+F dans Excel peut se traduire par la méthode FIND ( ton aide VBA t'en donnera les explication et un exemple).

Pour ta macro il va te falloir :

1 - Boucler sur toutes les feuilles de ton classeur (tu peux t'appuyer sur mon code)
2 - Rechercher les valeurs qui t'interessent ( via FIND)
3 - Masquer tes lignes
4 - Poursuivre ta boucle sur la feuille suivante.

Si tu veux plus d'aide :
-Commence par essayer d'écrire ton code
-Reviens expliquer en détail ce que tu souhaites faire ( valeurs cherchées, dans quelles colonnes/lignes, Pour en faire quoi..etc...)
- indique nous où tu coince dans ton code...


Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
0
Merci
Excusez moi pour le temps de réponse assez long.
J'était sur un autre problème.

J'ai étudier le programme et je pense que j'ai émis des informations. je vais donc re-formuler ma demande.

Mon fichier excel contient maintenant 9 onglets.
seulement 7 onglet serons accessible pour l'utilisateur X.
Dans chacun des onglets on retrouve le nom du client, le numéro de série du produits et du projet, ...

Lorsque le classeur Excel s'ouvre, on retrouve un intitulé en B1 nommé : Utilisator. Cet "Utilisator", ne peux seulement naviguer dans les différents onglets et à accès au options filtres.

La première feuille de mon classeur s'appel : DATA.
De cette feuille, l'"Utilisator" pourra cliquer sur un bouton "Search DATA", pour qu'il puisse rechercher une information X souhaité dans tout le classeur.
Le X est une variable définie par la personne souhaitant rechercher un mot ou une référence en particulier.

Je sais très bien que l'option filtre étant activé cela facilite déjà pas mal l'utilisateur sachant que le nombre de feuille ne dépasse pas 6. Sa recherche est déjà bien accrus par le billet de ce classeur.
On sais tous que les personnes, sachant utiliser Excel, connaissent la fonction ctrl+F. Je souhaite toute fois l'activer depuis un "commandbutton" (d'où mon Search DATA) si possible.

Merci d'avance et en espérant avoir était beaucoup plus claire.

PS: J'ai déjà tenter d'enregistrer une macro pour en récupérer le code, mais rien n'y fait.
Commenter la réponse de shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Dernière intervention
13 janvier 2014
0
Merci
l'utilisateur mon certifié qu'il n'était pas nécessaire et qu'une option de "filtre" disponible dans les tableau excel est satisfaisante et suffisant.

merci pour le coup de main.
Commenter la réponse de shadowskill067

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.