Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Recherche sur Toutes les feulles d'un classeur

5 réponses
Avatar
penelope
bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

....
With Workbooks(i & ".htm").Worksheets(1).Cells
Set c = .Find(what:="Libellé", After:=ActiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:=False)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
.....

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles avant de
lancer la recherche ?

Merci

5 réponses

Avatar
JB
Bonjour,

Exemples de recherche multi-feuilles:

Sub chercheFindMultiFeuillesValeur()
x = "ABCD"
For Each s In ActiveWorkbook.Sheets
With Sheets(s.Name).Cells
Set c = .Find(x, LookIn:=xlValues)
If Not c Is Nothing Then
premier = c.Address
Do
c.Interior.ColorIndex = 4
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
Next s
End Sub

ou

x = "ABCD"
For Each s In Array("Feuil1", "Feuil2")
With Sheets(s).Cells
Set c = .Find(x, LookIn:=xlValues)
If Not c Is Nothing Then
premier = c.Address
Do
c.Interior.ColorIndex = 4
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
Next s
End

JB

On 15 jan, 08:52, penelope wrote:
bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

....
With Workbooks(i & ".htm").Worksheets(1).Cells
    Set c = .Find(what:="Libellé", After:tiveCell,
LookIn:=xlFormulas _
        , LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
        MatchCase:lse)
    If Not c Is Nothing Then
Range(c.Address).Activate
    ActiveCell.Offset(1, 0).Activate
.....

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles  avant de
lancer la recherche ?

Merci  


Avatar
FFO
Salut penelope

Pour éviter de compter toutes les feuilles pour déterminer l'indice de
l'onglet qui t'interresse tu peux mettre en préambule ce bout de code :

For j = 1 To Workbooks(i & ".htm").Sheets.Count
If Sheets(j).Name = "Nom" Then
Indice = j
Exit For
End If
Next

Puis de corriger ta ligne :

With Workbooks(i & ".htm").Worksheets(Indice).Cells

Celà devrait faire

Dis moi !!!


bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

.....
With Workbooks(i & ".htm").Worksheets(1).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
......

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles avant de
lancer la recherche ?

Merci



Avatar
Ellimac
Bonjour,

Le code suivante entre la valeur 1 en A1 de toutes les feuilles :

Sub Toto()
For cpt = 1 To Sheets.Count
Sheets(cpt).Range("a1") = 1
Next
End Sub

Camille


bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

.....
With Workbooks(i & ".htm").Worksheets(1).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
......

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles avant de
lancer la recherche ?

Merci



Avatar
papou
Bonjour
Non, tu n'auras pas à compter tes feuilles.
Modifie comme ceci :

Dim Nbf As Integer
For Nbf = 1 To Workbooks(i & ".htm").Sheets.Count
With Workbooks("i & ".htm"").Worksheets(Nbf).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell, _
LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse)
End With
If Not c Is Nothing Then
'.....etc etc...
End If
Next Nbf


Par contre petite remarque pour la suite du code( ...etc etc...) : tu
devrais éviter la sélection de cellules.
Ca sera d'autant plus délicat que tu dois parcourir toutes tes feuilles,
alors attention aussi à bien désigner la feuille sur laquelle tu vas
effectuer des opérations.

Cordialement
Pascal


<penelope> a écrit dans le message de news:

bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

....
With Workbooks(i & ".htm").Worksheets(1).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
.....

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles avant de
lancer la recherche ?

Merci


Avatar
FFO
Rebonjour penelope

en relisant ta demande tu souhaites peut être traiter toutes les feuilles

Je te propose dans cette perspective de modifier ton code ainsi :

For j = 1 To Workbooks(i & ".htm").Sheets.Count
With Workbooks(i & ".htm").Worksheets(j).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
Next

Celà devrait faire

Dis moi !!!!



bonjour

j'aurais besoin d'une explication sur un bout de code

j'aurais besoin d'effectuer une recherche sur toutes les feuilles d'un
classeur.

j'avais dans une autre macro, un bout de code que je comptais
réutiliser

.....
With Workbooks(i & ".htm").Worksheets(1).Cells
Set c = .Find(what:="Libellé", After:¬tiveCell,
LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
Range(c.Address).Activate
ActiveCell.Offset(1, 0).Activate
......

mais on est obligé de passer en parametre l'indice de la feuille ???

ca veut dire qu'il faut que je compte toutes les feuilles avant de
lancer la recherche ?

Merci