Methode Find + Cellules filtrées

julicraps

XLDnaute Nouveau
Bonjour à tous,

J'ai un petit soucis avec la méthode Find.
en effet, j'utilise des filtres (auto) sur ma feuille xls, mais lorsque j'utilise la méthode find, le parcours ne se fait que sur les cellules filtrées.

Alors que je voudrais le faire sur l'entièreté des lignes.

Ci joint un bout de mon code, si besoin:
Code:
x = Cells(Target.Row, 2).Value
Application.EnableEvents = False
With ActiveSheet.Columns(2)
    Set f = .Find(What:=x, LookIn:=xlValues, MatchCase:=True)
    MsgBox (f.Address)
    If Not f Is Nothing Then
        firstaddress = f.Address
        Do
            Set f = .FindNext(f)
                If (f.Address = firstaddress) And Range(f.Address).Offset(0, 16).Value = "DOCOK" Then
                    'Mettre en évidence les CR ok--------------------
                    With Range("rangeCR")
                        Set h = .Find(x, LookIn:=xlValues)
                        If Not h Is Nothing Then
                        firstaddress = h.Address
                        Do
                            Range(h.Address).Offset(0, 9).Interior.ColorIndex = 35
                            Set h = .FindNext(h)
                        Loop While Not h Is Nothing And h.Address <> firstaddress
                        End If
                    End With
                    'END Mettre en évidence les CR ok--------------------
                End If
        Loop While Not f Is Nothing And f.Address <> firstaddress And Range(f.Address).Offset(0, 16).Value = "DOCOK"
    End If
End With

Merci beaucoup,
Julicraps.
 

Gorfael

XLDnaute Barbatruc
Re : Methode Find + Cellules filtrées

julicraps à dit:
Bonjour à tous,

J'ai un petit soucis avec la méthode Find.
en effet, j'utilise des filtres (auto) sur ma feuille xls, mais lorsque j'utilise la méthode find, le parcours ne se fait que sur les cellules filtrées.

Alors que je voudrais le faire sur l'entièreté des lignes.

Ci joint un bout de mon code, si besoin:
Code:
x = Cells(Target.Row, 2).Value
Application.EnableEvents = False
With ActiveSheet.Columns(2)
    Set f = .Find(What:=x, LookIn:=xlValues, MatchCase:=True)
    MsgBox (f.Address)
    If Not f Is Nothing Then
        firstaddress = f.Address
        Do
            Set f = .FindNext(f)
                If (f.Address = firstaddress) And Range(f.Address).Offset(0, 16).Value = "DOCOK" Then
                    'Mettre en évidence les CR ok--------------------
                    With Range("rangeCR")
                        Set h = .Find(x, LookIn:=xlValues)
                        If Not h Is Nothing Then
                        firstaddress = h.Address
                        Do
                            Range(h.Address).Offset(0, 9).Interior.ColorIndex = 35
                            Set h = .FindNext(h)
                        Loop While Not h Is Nothing And h.Address <> firstaddress
                        End If
                    End With
                    'END Mettre en évidence les CR ok--------------------
                End If
        Loop While Not f Is Nothing And f.Address <> firstaddress And Range(f.Address).Offset(0, 16).Value = "DOCOK"
    End If
End With

Merci beaucoup,
Julicraps.
Salut
La méthode find ne fonctionne que sur les cellules visibles.
Donc, si tu veux une recherche sur la totalité des lignes, tu as 2 solutions :
- soit tu enlèves le modeautofilter,
- soit tu abandonnes l'utilisation de find au profit d'une boucle ligne par ligne ou d'une modification de l'autofilter
ça dépend de ta méthode de travail.
A+
NB un truc me gêne dans ta macro : tu imbriques 2 with, mais je ne suis pas sûr que
With ActiveSheet.Columns(2)
___ With Range("rangeCR")
donne le résultat escompté
 
Dernière édition:

julicraps

XLDnaute Nouveau
Re : Methode Find + Cellules filtrées

Hello Gorfael,

Effectivement, j'ai trifouillé mon With Range("rangeCR").
C'est bien ceci qu'il faut comprendre dans les 2 cas :)

Je m'attendais à une réponse d'utilisation d'une recherche ligne par ligne.
Grr, mon fichier fait 1000 lignes (fixe) et je ne peux pas enlever l'autofilter.

La méthode find est vraiment rapide, je crains vraiment de faire ralentir mon fichier avec un parcours double des 1000 lignes.
Car je dois tout d'abord faire un premier parcours pour vérifier des paramètres, et s'ils sont ok, alors je refais un autre parcours pour le signaler.

Merci en tout cas, pour ton regard sur le code, je pense mettre un fichier anonymisé pour vous monter ce que je fais.

Bien à vous,
Julian.
 

Gorfael

XLDnaute Barbatruc
Re : Methode Find + Cellules filtrées

julicraps à dit:
Hello Gorfael,

Effectivement, j'ai trifouillé mon With Range("rangeCR").
C'est bien ceci qu'il faut comprendre dans les 2 cas :)

Je m'attendais à une réponse d'utilisation d'une recherche ligne par ligne.
Grr, mon fichier fait 1000 lignes (fixe) et je ne peux pas enlever l'autofilter.

La méthode find est vraiment rapide, je crains vraiment de faire ralentir mon fichier avec un parcours double des 1000 lignes.
Car je dois tout d'abord faire un premier parcours pour vérifier des paramètres, et s'ils sont ok, alors je refais un autre parcours pour le signaler.

Merci en tout cas, pour ton regard sur le code, je pense mettre un fichier anonymisé pour vous monter ce que je fais.

Bien à vous,
Julian.
Salut
Pourquoi ne peux-tu pas enlever l'autofiltre ? Tu le modifies et tu le remets ?

Mais sinon, pourquoi 2 passages ?
un seul suffit : s'il y a corespondance, tu colories, sinon tu remets à blanc.

Si j'ai bien compris ta macro :
- tu recherhces la première ligne dont B est égal à B de la ligne modifiée et avec R = "DOCOK"
- ensuite tu colories à 9 colonnes à gauche du Champ RangeCr les lignes dont B target = Rangecr

A+
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 779
Messages
2 092 046
Membres
105 168
dernier inscrit
makari69