Transformer un filtre numérique en filtre textuel

Salut la commu !

J'ai un p'tit problème dans une de mes macros.

J'ai un USF qui me permet de rechercher une valeur de type "string" dans une plage donnée, en appliquant un simple filtre.

Mais mon filtre ne fonctionne pas dans les colonnes ne contenant que des nombres. Ca vient du fait que ce filtre est "numérique" et non "textuel".

Y a-t-il un moyen de transformer un filtre de numérique à textuel ? (voir les images jointes.)

Je joins également le tableau qui m'a permis les captures d'écran. Il y a le code de la recherche dedans.

ce dont j'ai besoin partout :

img1

ce que j'ai quant la colonne est QUE numérique :

img2

Qui qui peut m'aider !

merci !

Bonjour,

Vous pouvez les convertir en texte avant de faire votre trie ? Je ne penses pas que vous pourrez faire de filtre textuel si vous les laisser en numérique

Non, ça ne marche pas.

D'ailleurs, pour les dates, même souci, c'est un mode filtre mais chronologique.

Sauf que dans mon exemple, dans la colonne NUM OT, je veux pouvoir laisser visible tous ceux qui contiennent "2866" par exemple.

genre un like "*2866*"

bonjour,

Sub CommandButton1_Click()
     With ActiveSheet.Range(Cells(2, 1), Cells(10, 6))     'la plage
          a = Filter(Application.Transpose(.Columns(1).Value), "64", 1, 1)     'filtrer les valeurs de la première colonne qui contiennent un "64"
          If UBound(a) <> -1 Then .AutoFilter 1, a, xlFilterValues
     End With
End Sub

OK.

Cool. je vais essayer.

tu pourrais me donner des infos sur les fonctions de Ubound et le autofilter, 1, a, xlfiltervalues stp ?

J'ai pas pigé en lisant même si je me dis que c'est quelquechose que j'ai déjà vu.

Le problème étant que si je ne comprends pas ce que je tape, je le retiens mal.

Merci.

un autofilter, on peut utiliser 2 variables oubien une list, cela est le cas ici. La liste est l'array a. Si il n'y a rien dans l'array le ubound = -1.

Donc on filtre votre plage sur la 1ière colonne sur la base de la liste dans l'array a, à condition que cet array n'est pas vide.

J'ai essayé de l'adapter mais ça ne fonctionne pas.

Il me renvoie une erreur "tableau attendu". J'en ai déduit que la variable "a" était une range. Mais apparemment ce n'est pas ça non plus.

j'ai déclaré un "Dim r_Range as Range"

2022 09 01 080914

est-ce que la var. "a" est autre chose ?

merci pour le coup de pouce ;)

bonjour,

c'est un Variant, pas un Range, donc efface le "as Range". C'est une matrice, un "array" virtuel en mémoire, pas une plage

Super !

ça fonctionne nickel. Je vais clore le sujet.

Il y a un tuto quelque part pour les Array ? j'ai pas trouvé.

Bonjour,

La bible du VBA :

http://boisgontierj.free.fr/

comme je ne suis pas vraiment francophone .... https://www.automateexcel.com/vba/filter-arrays-function/

Merci.

J'ai eu du mal à l'adapter à mon programme mais j'ai finalement réussi.

     With ActiveSheet.Range(Cells(6, 1), Cells(l_CellBas, iCellDroite))     'la plage
          v_Variant = Filter(Application.Transpose(.Columns(r_Cell.Column).Value), s_Filtre, 1, 1)     'filtrer les valeurs de la première colonne qui contiennent un "64"
          If UBound(v_Variant) <> -1 Then .AutoFilter r_Cell.Column, v_Variant, xlFilterValues
     End With

où r_Cell est une range

s_Filtre est un string de la valeur recherchée.

Ce que je n'avais pas compris, c'est dans le if UBound. Le 1er argument est la colonne de tri.

Merci pour tout. ;)

l'Ubound correspond avec l'index du plus haut élément de l'array "v_Variant". Pour compliquer le comptage, le 1ier élément (=le LBound) a index 0, donc s'il y a N valeurs correspondants, l'Ubound sera N-1. Si la matrice "v_Variant" est vide, zéro matches, alors l'Ubound est -1, donc la première ligne, "If ....", est un teste pour voir si le résultat n'est pas vide.

     If UBound(v_Variant) <> -1 Then     'il y a des cellules qui correspondent avec le valeur souhaité
          .AutoFilter r_Cell.Column, v_Variant, xlFilterValues     'appliquez le filtre
          MsgBox Join(v_Variant, vbLf)     'montrez les valeurs filtres
     End If

ee

Rechercher des sujets similaires à "transformer filtre numerique textuel"