VBA - Autofilter qui transforme les nombres à virgules en nombres entiers ?

Bonjour à tous,

Je débute tout juste en VBA via un cours que je suis sur la plateforme Udemy. En parallèle de mon apprentissage, je tente d'appliquer ce que j'ai fraîchement appris sur des cas concrets au boulot. Et si d'habitude rechercher des solutions sur internet suffit à s'en sortir, je me heurte aujourd'hui à un problème pour lequel je ne trouve pas de solution.

La situation est relativement simple. Je souhaite juste pouvoir créer une macro pour calculer le premier décile d'une série de valeurs sur une colonne, et appliquer un Autofilter sur cette colonne pour extraire les valeurs inférieures ou égales à ce décile.

Pour ce faire, j'ai donc créé ce code :

Option Explicit

Sub Decile()

Dim Decile As Double

Decile = WorksheetFunction.Percentile(Range("A2:A13"), 0.1)

ActiveSheet.Range("A2:A13").AutoFilter _
Field:=1, _
Criteria1:=">" & Decile, _
VisibleDropDown:=True

End Sub

Vous trouverez en PJ un fichier exemple qui n'est pas mon vrai fichier de travail mais qui permet d'illustrer le problème.

Si je place une MsgBox qui renvoit la valeur de mon décile (variable appelée "Decile" dans mon code), elle renvoit 12,853. Mais une fois que j'applique l'Autofilter en reprenant comme argument ma variable Decile, le filtre donne le résultat suivant :

2019 12 10 13h25 44

La variable est exprimée comme un nombre entier. Je ne sais pas si le problème vient tout simplement de ma syntaxe au niveau du Criteria1.

• J'ai tenté de passer la variable en Single, Variant, ça ne marche pas.

• J'ai tenté le même code en écrivant la valeur de mon décile en case B1 et en reprenant B1 directement comme argument, même résultat.

• J'ai tenté de remplacer les virgules par des points via les options d'Excel même résultat

J'ai donc tenté la méthode de l'enregistrement de macro sur la base de la création manuelle de mon filtre. Le code généré automatiquement est :

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.Range("$A$1:$A$13").AutoFilter Field:=1, Criteria1:=">12,853", _
        Operator:=xlAnd
End Sub

Suite à la manipulation manuelle cela fonctionne, mais si je garde cette macro générée automatiquement et que je l'applique à nouveau à mon classeur, j'obtiens le même résultat qu'avec mon propre code à savoir : "Supérieur à 12853" (???).

Je m'en remets donc à vous pour éventuellement apporter quelques explications (et une solution ?) à ce problème

Merci d'avance.

Re,

J'ai finalement trouvé une solution en changeant le libellé de mes recherches de Google (et pourtant je pensais avoir épuisé les possibilités FR/EN).

Option Explicit

Sub Decile()

Dim Decile As Double

Decile = WorksheetFunction.Percentile(Range("A1:A13"), 0.1)

MsgBox Decile

ActiveSheet.Range("A1:A13").AutoFilter _
Field:=1, _
Criteria1:=">" & Str(Decile), _
VisibleDropDown:=True

End Sub

La modification du code se trouve au niveau du Criteria1 auquel j'ai du ajouter Str(). Sans déclarer la variable au format String, Excel n'indique pas d'erreur d'incompatibilité de type alors que l'on concatène du String et du Double, j'ai donc l'impression que le VBA convertit automatiquement la variable (mais en quoi alors ?).

Rechercher des sujets similaires à "vba autofilter qui transforme nombres virgules entiers"