Rechercher une cellule dans tout le classeur

Résolu
aoron Messages postés 2 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2010 - 28 oct. 2010 à 12:52
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 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.

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
28 oct. 2010 à 13:15
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
3
aoron Messages postés 2 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2010
28 oct. 2010 à 14:22
Ok merci c'est parfait.

Reste juste a trouver comment pointer vers la feuille ou l'argument est trouver.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
28 oct. 2010 à 15:13
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
0
Rejoignez-nous