XL 2016 filtre avec une valeur dans une cellule

iliess

XLDnaute Junior
bonjour
j'ai un tableau "Ta" de 8 lignes
format des chiffre utilisé dans le mon tableau et la cellule G2 est nombre avec séparation des milliers
je souhaite faire un filtre dans la 7eme ligne avec la valeurs qui se trouve dans la cellule G2
voici mon macro
=====================================================================
Sub filtre()
Dim str As String
str = Format(Sheets("feuil1").Range("g2").Value, "#,##0.00")
ActiveSheet.ListObjects("Ta").Range.AutoFilter Field:=7, Criteria1:=Array(2, str)
End Sub

======================================================================
mon problème que le macro fonctionne avec les nombre inférieure de 999,99 .mais égale a 1 000,00 ou supérieure ça marche pas
je suis sure que le format "#,##0.00" est compatible avec les nombre inférieure de 999,99 mais plus je ne sais pas
voici mon fichier démo
https://drive.google.com/open?id=1nkm3DBjC_yd_YJWW_bkrnbOvrPz44LWu
 

chris

XLDnaute Barbatruc
Bonjour

Pour vous éviter de perdre du temps :
Déjà vu sur 2 autres forums où on a déjà expliqué à iliess qu'on ne peut filtrer des nombres avec une variable string et qu'on lui demande ce que doit exactement faire son filtre sans réponse claire de sa part quand ce n'est pas sans réponse du tout...
 

iliess

XLDnaute Junior
Merci Mr Chris
Et pour les autres qui ont la même question voici une Solution proposer par Mr Daniel
Sub filtre()
Dim str As String
str = Format(Sheets("feuil1").Range("g2").Value, "# ##0,00")
ActiveSheet.ListObjects("Ta").Range.AutoFilter Field:=7, Criteria1:=[G2].Text
End Sub
 

M12

XLDnaute Accro
Bonjour à tous

dans ce cas, Mr Daniel a oublié de retirer les deux lignes soulignées, qui ne servent à rien
Sub filtre()
Dim str As String
str = Format(Sheets("feuil1").Range("g2").Value, "# ##0,00")

ActiveSheet.ListObjects("Ta").Range.AutoFilter Field:=7, Criteria1:=[G2].Text
End Sub
 

iliess

XLDnaute Junior
Bonjour
Pour vous éviter de perdre du temps :
Déjà vu sur 2 autres forums où on a déjà expliqué à iliess qu'on ne peut filtrer des nombres avec une variable string et qu'on lui demande ce que doit exactement faire son filtre sans réponse claire de sa part quand ce n'est pas sans réponse du tout...
Mr Chris je n'est pas perdu du temps et c'est pour ça que j'ai poster mon ca dans plusieurs forums et j'ai réponds a tous les questions.
 

Lone-wolf

XLDnaute Barbatruc
Bonjour chris, M12

@chris : Le fitre fonctionne, même en déclarant la variable string. Test la colonne I (double-clic) 223.- (en réalité 222.5). Il faut mettre .text et non .value comme la montré M12. Clique en colonne K pour enlever le filtre.
 

Pièces jointes

  • Base.xlsm
    11.5 KB · Affichages: 14
Dernière édition:

chris

XLDnaute Barbatruc
Re

Il y a donc un 4ème forum !

Néanmoins j'ai regardé de plus près après la réponse tant attendue sur un autre forum de iliess sur ce qu'il voulait exactement filtrer.

Il semble y avoir un bug dans Excel quand on utilise le format à 2 décimales, que ce soit nombre ou comptabilité, avec ou sans séparateur de milliers.

Le filtre automatique numérique ne fonctionne pas sans précision des décimales, et le cas échéant du séparateur de milliers.

Il faut effectivement une chaîne strictement au format du nombre alors que le filtre avancé fonctionne sans problème.

Dans un cas comme celui-ci il est donc conseillé d'utiliser le filtre avancé soit en ajoutant le nom de la colonne à filtrer en G1 soit en créant une plage de critères temporaire
Code:
Sub Filtre()
    Range("XFD1") = ActiveSheet.ListObjects("Ta").ListColumns(7).Name
    Range("XFD2") = [G2].Value
    Range("Ta[#All]").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("XFD1:XFD2"), Unique:=False
    Range("XFD1:XFD2") = ClearContents
End Sub

Edit : @Lone-wolf : ce n'est pas M12 mais un certain Mr Daniel qui a donné le [G2].text.
Mais pour ma part je considère cela comme un bug du filtre auto...
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Un autre essai en gardant le filtre automatique. Sélectionner une valeur dans la cellule I1.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Valeur As String
   If Not Intersect(Target, Range("i1")) Is Nothing Then
      Valeur = Replace(CDbl([i1]), ",", ".")
      ActiveSheet.ListObjects("Ta").Range.AutoFilter Field:=7, _
         Criteria1:=">=" & Valeur, Operator:=xlAnd, Criteria2:="<=" & Valeur
   End If
End Sub
 

Pièces jointes

  • iliess- filtre- v1.xlsm
    17 KB · Affichages: 8

chris

XLDnaute Barbatruc
Re
Re

@chris : lorsque, comme moi, on formate un nombre 222.50 en 223.-, ce n'est plus un nombre mais du texte vu le .-
À moins de dire une bêtise.
Le souci c'est qu'Excel utilise le format américain donc le . mais je ne vois pas d'où tu sort le .-

Quand à [G2].text, c'est bien M12 qui l'a écrit.
regarde le #5...

@mapomme : j'avais aussi cherché du côté du format US mais pas l'idée du compris entre pour une seule valeur...

La différence de logique entre le Filtre Auto et le filtre Avancé reste un non sens...

Cela fait 3 solutions...
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Chris, le Forum :)

mais je ne vois pas d'où tu sort le .-

As-tu déjà oublié que je suis en Suisse? ;) De plus, le Format monétaire et date par défaut (Système) en Suisse est le point
et non la virgule et le /. Et dans certaines surfaces, le prix sur les articles est inscrit 158.50.-

format.gif


Pour le .Text, Sorry. Je n'ai pas fait attention.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
288 581
Messages
1 893 168
Membres
169 777
dernier inscrit
Bazilecr
Haut Bas