Création
d'entreprise
Posez votre question Signaler

Filtrer date par macro VBA - pb de format [Résolu]

Sailorbop - Dernière réponse le 28 févr. 2012 à 16:38
VBA - excel
Bonjour à tous,
(j'ai trouvé des réponses mais que j'ai déjà testé sans succès)
je voudrais faire une macro pour filtrer entre deux dates, dont les valeurs se trouvent soit dans 2 cellules ou dans 2 textbox...
le pb est que même en indiquant le format, Excel filtre en inversant le mois et le jour.
Par exemple :
Selection.AutoFilter Field:=1, Criteria1:=">=" & Format(TextBox1, "dd/mm/yy"), Operator:=xlAnd, Criteria2:="<=" & TextBox2
Date inscrite dans textbox1 = 06/02/07 envoie le critère 02/06/2007
Date inscrite dans textbox2 = 10/02/07 envoie le critère 02/10/2007
Le pire c'est que si je donne comme critère :
Criteria1:= Format(TextBox1, "dd/mm/yy"), Operator:=xlOr, Criteria2:=TextBox2
Et bien là... ça fonctionne...
Notez que j'ai omis Format(textbox2...) et je n'ai pas de différence.
Merci beaucoup !
Lire la suite 

Filtrer date par macro VBA - pb de format »

10 réponses
Réponse
+4
moins plus
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 :

'===== 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
Ajouter un commentaire
Réponse
+1
moins plus
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 :

Selection.AutoFilter Field:=1, Criteria1:=">=" & CDate(TextBox1.Value), Operator:=xlAnd, Criteria2:="<=" & CDate(TextBox2.Value)


Papou
Juan's - 14 mai 2007 à 23:12
Oui mais le filtre ne marche pas dans ce cas la.
Il faut transformer la date en chiffre comme indiqué ci-dessus.
Ajouter un commentaire
Réponse
+0
moins plus
Re-Bonjour !!
Personne qui aurait une petite idée ?? Merci d'avance !!!
Ajouter un commentaire
Réponse
+0
moins plus
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) !!
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Je suis en train de compiler une petite macro pour le boulot sur excel 2007.
pour cette macro de filtre auto, la dernière ligne de mon fichier de base est out le temps ignorée, avez-vous une solution pour qu'elle soit prise en compte?
Ajouter un commentaire
Réponse
+0
moins plus
Pour utiliser une date, personnellement je fais comme cela et je ne suis pas ennuyé

DatePourLeFiltre = format(UneDate, "#")
Ajouter un commentaire
Réponse
+0
moins plus
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 :

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
Ajouter un commentaire
Réponse
-1
moins plus
Bonsoir sailorbop,

Pour récupérer des textes sous forme de date, il suffit de convertir les contenus comme suit :

CDate(TextBox1.Value)


Cordialement.

Papou
Ajouter un commentaire
Ce document intitulé « Filtrer date par macro VBA - pb de format » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?