Erreur procédure .find dans un TS filtré

Bonjour la communauté,

Je me heurte à un souci bien embêtant et pour lequel j'aimerais votre aide : la procédure find ne fonctionne dans un tableau filtré que si et seulement si la valeur recherchée est visible.

Une solution consiste en la désactivation de mes filtres pour les réactiver à la suite, mais ca n'est pas mon souhait. Peut on faire autrement ?

Voici un jeu de données

AnnéeSemaine#Previous
202442244200001
202442244200002
202442244200003
202442244200004
202442244200005243400007
202442244200006243400008
202434243400002
202434243400003242800003
202434243400004242800004
202434243400005242800005
202434243400006242800006
202434243400007242800007
202434243400008242800008
202428242800002
202428242800003
202428242800004
202428242800005
202428242800006
202428242800007
202428242800008

Voici un exemple de code

Sub camarchepas()

Set lsto = ThisWorkbook.ActiveSheet.ListObjects(1)
col_diese = lsto.ListColumns("#").Index
cherche = "243400007"
trouve_index = lsto.ListColumns(col_diese).DataBodyRange.Find(what:=cherche, LookAt:=xlWhole).Row - lsto.HeaderRowRange.Row

End Sub

Il est fonctionnel sauf si l'on invisibilise la semaine 34

Merci d'avance

Bonjour,

Effectivement et j'aurais tendance à dire heureusement

Pour faire ce que vous souhaitez, pas d'autre choix que de faire une boucle sur toutes les lignes de votre TS et tester la valeur cherchée
Dans ce cas, les lignes peuvent être masquées sans souci.

A+

Je ne suis pas d'accord avec le "heureusement", la formule n'étant pas :

trouve_index = lsto.ListColumns(col_diese).DataBodyRange.SpecialCells(xlCellTypeVisible).Find(what:=cherche, LookAt:=xlWhole).Row - lsto.HeaderRowRange.Row

Pour info j'ai essayé avec

trouve_index = lsto.ListColumns(col_diese).DataBodyRange.Find(what:=cherche, LookIn:=xlFormulas, LookAt:=xlWhole).Row - lsto.HeaderRowRange.Row

Pour le même résultat...

Re,

Certains fichiers sont utilisés par plusieurs personnes et protégé pour différentes raisons

Le fait de ne pas pouvoir trouver une valeur masquée, est pour moi une bonne chose

Donc, faites ce que vous voulez... je vous ai donné la solution

Contrairement à ce que laisse supposer l'aide microsoft, passer par LookIn:=XlFormulas ne fonctionne pas ici.

Solution de contournement évidente, rapide, et dans mon cas bien plus adaptée (car je récupère un index de databodyrange) : passer par Application.Match.

Sub camarche()

Set lsto = ThisWorkbook.ActiveSheet.ListObjects(1)
col_diese = lsto.ListColumns("#").Index
cherche = "243400007"
trouve_index = Application.Match(cherche, lsto.ListColumns(Col_diese).DataBodyRange, 0)

End Sub

Une autre possibilité consiste à créer une fonction personnalisée, qui aura en plus le mérite d'accélérer (et de loin) les performances, en bouclant sur un array. Je suis persuadé que Jacques BoisGontier aura développé une telle fonction.

Merci et à bientôt

Rechercher des sujets similaires à "erreur procedure find filtre"