VBA: Trouvez une formule dans une feuille

MJ13

XLDnaute Barbatruc
Bonjour à tous

En utilisant l'enregistreur de macros, j'ai ce code pour trouver la formule =ligne() dans une feuille.

Voici le code généré sur XL2007, pour les autres versions, il me semble qu'il faille retirer , SearchFormat:=False:

Code:
Range("A1").Select
Cells.Find(What:="=LIGNE()", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=True, SearchFormat:=False).Activate

Or, si je lance la macro, il me met une erreur91, Variable objet ou variable bloc width non défini. Je ne comprend plus !

Merci pour votre aide.
 

Roland_M

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

re:

essayer comme ceci

Dim R As Range
Range("A1").Select
Set R = Cells.Find(What:="LIGNE()", After:=ActiveCell, LookIn:=xlFormulas, _
lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)

et ...
If Not R Is Nothing Then 'suite si ok
 

Roland_M

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

re:

salut pierrejean ! tu as raison ! on l'oublie facilement !

ceci fonctionne chez moi (avec =LIGNE() simplement dans une cellule)

Code:
Dim R As Range
Range("A1").Select
Set R = Cells.Find(What:="=ROW()", After:=ActiveCell, LookIn:=xlFormulas, _
        lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=True, SearchFormat:=False)
If Not R Is Nothing Then
   MsgBox R.Row & vbLf & R.Column
End If
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

Re Roland, Bonjour Pierre-jean

Roland: Ok cela à l'air de fonctionner.

Pierre-Jean: Merci pour l'astuce (je pense que je vais m'en rappeller :rolleyes:).

Voici un fichier avec vos 2 codes (alt+F8 pour lancer les macros).

Bonne journée :).
 

Pièces jointes

  • Trouve_Formule_Ligne.xls
    29 KB · Affichages: 34

pierrejean

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

Re

Attention: Je preconise tout de même le lookat:=xlWhole
En effet si une recherche precedente a été faite avec xlPart la nouvelle se fera egalement avec xlPart
De même il est prudent de s'assurer que la recherche a abouti (genre not is nothing) sous peine de bug si la recherche n'a pas été fructueuse
 

MJ13

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

Re PierreJean

Ok bien noté. EN effet si on a choisi une autre option dans la recherche, il y a un bug. Donc dans mon cas, ce serait:

Code:
Cells.Find(What:="=row()", LookIn:=xlFormulas, lookat:=xlWhole).Select

Encore Merci ;).
 

Roland_M

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

re:

voir avec cette macro pour avoir le nombre d'occurences !
que l'on peut d'ailleurs mettre en tableau si on souhaite avoir les adresses !?

Code:
Sub EssaiFind2()
Dim R As Range, TotFind As Long, SuiteAdres As String
Range("A1").Select
With Cells
 Set R = .Find(What:="=ROW()", After:=ActiveCell, LookIn:=xlFormulas, _
     lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
     MatchCase:=True, SearchFormat:=False)
 If Not R Is Nothing Then
    SuiteAdres = R.Address
    Do: TotFind = TotFind + 1: Set R = .FindNext(R)
    Loop While Not R Is Nothing And R.Address <> SuiteAdres
 End If
End With
MsgBox TotFind
End Sub
 

MJ13

XLDnaute Barbatruc
Re : VBA: Trouvez une formule dans une feuille

Re Roland

Merci pour ta contribution

Pour avoir une liste des formules dans des variables qui pourront me servir pour boucler sur d'autres macros, je viens de faire ce code à partir du tiens.

J'aime bien ces petits codes sympas:).

Code:
Sub EssaiFind2()
Dim R As Range, TotFind As Long, SuiteAdres As String
Range("A1").Select
Dim adr(1000)
Stop
With Cells
 Set R = .Find(What:="=ROW()", After:=ActiveCell, LookIn:=xlFormulas, _
     lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
     MatchCase:=True, SearchFormat:=False)
 If Not R Is Nothing Then
    SuiteAdres = R.Address
        Do: TotFind = TotFind + 1:  N = N + 1: adr(N) = R.Address: Set R = .FindNext(R)
     Loop While Not R Is Nothing And R.Address <> SuiteAdres
 End If
End With
For i = 1 To N
MsgBox adr(i)
Next i
MsgBox TotFind
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 160
Messages
2 085 841
Membres
103 002
dernier inscrit
LERUS