Rechercher une cellule dans tout le classeur [Résolu]

Messages postés
2
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2010
- - Dernière réponse : jordane45
Messages postés
25973
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
- 28 oct. 2010 à 15:13
Bonjour,

Je débute et la je ne trouve pas de solution.
Voilà le problème :
Sous Excel je voudrais un Sub qui recherche la valeur de la cellule A1 de la feuille ("1") dans toutes les feuilles du classeur.
Indiquer le nombre de feuille trouver... S'il y en a qu'une executer la suite sinon arreter.
Lorsque que la valeur est trouver dans une des feuilles du classeur faire worksheet("Feuille trouve").range("A1:G50).copy puis worksheet("1").cells(1,1).select puis worksheet("1").cells(1,1).PasteSpecial (xlPasteValues)

S'il trouve pas de feuille message d'erreur (ca c'est bon je sais faire).

Merci d'avance.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
25973
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
313
3
Merci
Bonjour,
voici ce que je te propose : (inspiré d'une autre source)
[list]
Une fonction de recherche (recherche TOUTES les occurences d'un mot)
Un sub pour l'utiliser
/list

'******************************************************************************************
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 cherch()
Dim arTemp() As String 'Temp Array
Dim bFound As Boolean 'Flag
Dim i1 As Integer 'Array Counter
Dim ChercheX As String
Dim ma_plage As String

ma_plage ="A1:Z100" ' Plage de cellules dans laquelle chercher
ChercheX = Sheets(1).Range("A1").value

NbFeuilles = Thisworkbook.sheets.count
For F = 2 to NbFeuilles -1 ' on parcrour toutes les feuilles du classeur sauf la 1
Nom_Feuil = Sheets(F).Name
'---------------------------------------------------------------
bFound = FindAll(ChercheX, Sheets(Nom_Feuil), ma_plage, arTemp())
'---------------------------------------------------------------
If bFound = True Then
' Affichage dans la fenetre de debugage
 Debug.Print "Nb occurences : " & UBound(arTemp)
 ' // Suite du code si trouvé...
  ' Par exemple, incrémenter un compteur...
  Cmpt = Cmpt + UBound(arTemp)
End if
Next

'//  Ici tu gères si une seule répose trouvé ou plusieurs
Select case Cmpt ' test combien d'occurences trouvées...
Case > 1 then ' si plusieurs
' ..// code à faire
Case 1	' si seulement 1
' ..// Code à faire
Case 0 ' si aucune
' ..// Code à faire
End select
end Sub





Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI

Dire « Merci » 3

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

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
2
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2010
0
Merci
Ok merci c'est parfait.

Reste juste a trouver comment pointer vers la feuille ou l'argument est trouver.
Commenter la réponse de aoron
Messages postés
25973
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
313
0
Merci
Bonjour,
Reste juste a trouver comment pointer vers la feuille ou l'argument est trouver

Tu pourrais, par exemple, te créer un tableau de variables avec une colonne : Nom de la feuille et une colonne pour le N° de la ligne.

Tu trouveras ICI un tuto sur l'utilisation des tableaux en VBA


ps : voici le lien où j'avais trouvé le code pour le "FIndALL" : FindALl

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45