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 :
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 ?).