Filtrer date par macro VBA - pb de format
Résolu/Fermé9 réponses
J'ai galéré pendant des heures pour trouver !!!
Il y a une petite astuce pour que ça fonctionne.
Il faut formater la date dans VBA (dd/mm/yyyy) puis la transformer en chiffre via des TextBox de transition
13/05/2007 = 39215 dans VBA et Excel
Dans l'exemple ci dessous, je souhaite filtré ma colonne (n°4 donc D) entre 2 dates :
- date de début = TextBox1 (format dd/mm/yyyy)
- date de fin = TextBox2 (format dd/mm/yyyy)
- date de début = TextBox3 (format numérique)
- date de fin = TextBox4 (format numérique)
Il faut renseigner les TexBox 1 et 2.
Les 3 et 4 ne servent que de transition dans l'UserForm
Voici le code :
C'est un peu tiré par les cheveux... Mais ça marche !!!
++
Juan's
Il y a une petite astuce pour que ça fonctionne.
Il faut formater la date dans VBA (dd/mm/yyyy) puis la transformer en chiffre via des TextBox de transition
13/05/2007 = 39215 dans VBA et Excel
Dans l'exemple ci dessous, je souhaite filtré ma colonne (n°4 donc D) entre 2 dates :
- date de début = TextBox1 (format dd/mm/yyyy)
- date de fin = TextBox2 (format dd/mm/yyyy)
- date de début = TextBox3 (format numérique)
- date de fin = TextBox4 (format numérique)
Il faut renseigner les TexBox 1 et 2.
Les 3 et 4 ne servent que de transition dans l'UserForm
Voici le code :
'===== DEBUT CHOIX DE LA PERIODE 'fourchette de date startdate = CDate(Format(TextBox1.Value, "dd/mm/yyyy")) enddate = CDate(Format(TextBox2.Value, "dd/mm/yyyy")) 'TRANSFORMATION NUMERIQUE DE LA DATE Dim startdate2 As Single startdate2 = startdate TextBox3.Value = startdate2 Dim enddate2 As Single enddate2 = enddate TextBox4.Value = enddate2 'LANCEMENT DU FILTRE ============ Selection.AutoFilter Field:=4, Criteria1:=">=" & TextBox3.Value, Operator:=xlAnd, Criteria2:="<=" & TextBox4.Value '+++++ FIN CHOIX DE LA PERIODE
C'est un peu tiré par les cheveux... Mais ça marche !!!
++
Juan's
Pour utiliser une date, personnellement je fais comme cela et je ne suis pas ennuyé
DatePourLeFiltre = format(UneDate, "#")
DatePourLeFiltre = format(UneDate, "#")
La réponse ici pour les anglophones :
http://www.ozgrid.com/VBA/autofilter-vba-dates.htm
Pour les anglophobes :
Le problème se pose à cause du format de date non-américain. Pour y remédier, il faut transformer la date en variable "long" en utilisant la fonction "DateSerial".
Le code ci-dessous :
Enjoy
http://www.ozgrid.com/VBA/autofilter-vba-dates.htm
Pour les anglophobes :
Le problème se pose à cause du format de date non-américain. Pour y remédier, il faut transformer la date en variable "long" en utilisant la fonction "DateSerial".
Le code ci-dessous :
Dim dDate As Date Dim lDate As Long dDate = DateSerial(Year(dDate), Month(dDate), Day(dDate)) lDate = dDate Range("A1").AutoFilter Field:=1 Criteria1:=">" & lDate
Enjoy
PS : la fonction CDate convertit les dates au format par défaut de Windows. Il est donc inutile de leur appliquer le formatage "dd/mm/yy".
Ton code serait donc :
Papou
Ton code serait donc :
Selection.AutoFilter Field:=1, Criteria1:=">=" & CDate(TextBox1.Value), Operator:=xlAnd, Criteria2:="<=" & CDate(TextBox2.Value)
Papou
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sailorbop
Messages postés
2
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
16 mai 2007
1
16 mai 2007 à 16:39
16 mai 2007 à 16:39
JUAN'S
Avec ton code, j'ai trouvé que cela marchait également comme cela (un peu plus simple) :
=> En fait je ne passe pas par l'intermédiaire des textbox3 et 4 et je filtre directement dans la colonne de date (j'ai pas tout compris pourquoi ça fonctionne car je suis une bille en VBA mais bon...) :
Private Sub CommandButton1_Click()
Dim a As Single
Dim b As Single
a = CDate(TextBox1)
b = CDate(TextBox2)
Selection.AutoFilter Field:=1, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b
End Sub
(NB ça plante si rien n'est entré dans un textbox mais bon c'est un pt'it truc en + à mettre)
Merci encore !
Avec ton code, j'ai trouvé que cela marchait également comme cela (un peu plus simple) :
=> En fait je ne passe pas par l'intermédiaire des textbox3 et 4 et je filtre directement dans la colonne de date (j'ai pas tout compris pourquoi ça fonctionne car je suis une bille en VBA mais bon...) :
Private Sub CommandButton1_Click()
Dim a As Single
Dim b As Single
a = CDate(TextBox1)
b = CDate(TextBox2)
Selection.AutoFilter Field:=1, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b
End Sub
(NB ça plante si rien n'est entré dans un textbox mais bon c'est un pt'it truc en + à mettre)
Merci encore !
sailorbop
Messages postés
2
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
16 mai 2007
1
30 mars 2007 à 17:15
30 mars 2007 à 17:15
Re-Bonjour !!
Personne qui aurait une petite idée ?? Merci d'avance !!!
Personne qui aurait une petite idée ?? Merci d'avance !!!
Bonsoir sailorbop,
Pour récupérer des textes sous forme de date, il suffit de convertir les contenus comme suit :
Cordialement.
Papou
Pour récupérer des textes sous forme de date, il suffit de convertir les contenus comme suit :
CDate(TextBox1.Value)
Cordialement.
Papou
Merci beaucoup !
Alors de manière étrange pour ceux qui ont testé : une date fonctionne, deux dates ça ne marche plus sauf... pour des dates au 01/01/200xx... (1er janvier des années sélectionnées).
C'est bien un problème de traduction US => FR je pense.
Encore merci ! et désolé pour la prise de tête :o) !!
Alors de manière étrange pour ceux qui ont testé : une date fonctionne, deux dates ça ne marche plus sauf... pour des dates au 01/01/200xx... (1er janvier des années sélectionnées).
C'est bien un problème de traduction US => FR je pense.
Encore merci ! et désolé pour la prise de tête :o) !!
Modifié par redaiwa le 19/11/2014 à 10:09
Dommage que je ne puisse te donner qu'un seul point car tu en mérites au moins 10 !!!
Tu as certes aidé "Sailorbop", mais en réalité tu ne cesses d'aider des milliers de personnes encore aujourd'hui... dont moi :)
"La bonne parole est pareille à un bel arbre dont la racine est ferme et la ramure s'élance dans le ciel donnant à tout instant ses fruits" (Coran)
2 nov. 2015 à 11:21
8 janv. 2016 à 13:37