Filtrer par date (semaine entière) en VB

Filtrer par date (semaine entière) en VB - VB/VBA/VBS - Programmation

Marsh Posté le 22-02-2006 à 19:38:08    

Bonjour,
 
Je souhaite effectuer un FILTRE d'une colonne Excel via un code VB
Le but est filtrer du lundi au dimanche de la semaine en cours
 
Ce code fonctionne mais pour les date qui commence par 01 à 09, le jour s'inverse avec le mois (c'est à dire, en format anglais)
 
Est il possible formater la date en jj/mm/aaa  ou de renvoyer la date en forme de texte?
 
 
Voici le code :
 
Pour info Range(D2) = numéro de jour : 1 = lundi
 
 

Code :
  1. Private Sub CommandButton2_Click()
  2. Dim lundi As Date
  3. lundi = Now() - Range("d2" ).Value + 1
  4. l = Format(lundi, "DD" & "/" & "MM" & "/" & "YYYY" )
  5. semaine.TextBox1.Text = l
  6. Dim dimanche As Date
  7. dimanche = Now() - Range("d2" ).Value + 7
  8. d = Format(dimanche, "DD" & "/" & "MM" & "/" & "YYYY" )
  9. semaine.TextBox2.Text = d
  10.     Selection.AutoFilter Field:=3, Criteria1:=">=" & l, Operator:=xlAnd _
  11.         , Criteria2:="<=" & d
  12.        
  13. End Sub


 
 
Voila....   :(

Reply

Marsh Posté le 22-02-2006 à 19:38:08   

Reply

Marsh Posté le 23-02-2006 à 11:03:26    

Je ne connais pas bien les focntionnalités Excel, aussi sais-tu ce que le paramètre Criteria1: attend comme type de données ?
 
Sinon :
Format(dateLundi, "dd/mm/yyyy" ) renvoie un Variant
Format$(dateLundi, "dd/mm/yyyy" ) renvoie un String
Le format "dd/mm/yyyy" (en minuscules) est un format de date française qui fonctionne.

Reply

Marsh Posté le 23-02-2006 à 11:22:56    

Je viens d'essayer en stringant le Format mais ça ne marche pas.
 
 
Le paramètre criteria doit renvoyer une date sous forme jj/mm/aaaa (format texte ou non)
 
 
J'arrive a renvoyer une date en mm/jj/aaaa mais pas en jj/mm/aaaa
 
 
Le probleme se rencontre quand jj <10  ou mm<10
Le jour et le mois s'inversent
 

Reply

Marsh Posté le 23-02-2006 à 13:43:24    

Après quelques tests, voici mes remarques :
 
Le paramètre Criteria1 attend une date au format ANGLAIS
Quand tu lui passes une date au format français, il essaie de la convertir : 01/02/2005 ne lui pose pas de problème mais pour lui cela veut dire 2 janvier !
Si tu lui passes 17/03/2005, il transforme cela en 03/17/2005 automatiquement car le mois ne pouvant être égal à 17, aucune ambiguité n'est possible.
Du coup quand il te rend des résultats, il inverse les jours et mois dans le contexte du premier exemple.
 
Voici la syntaxe à utiliser et qui fonctionne chez moi :

Selection.AutoFilter field:=3, Criteria1:=CDate(Format(lundi, "mm/dd/yyyy" ))


Il faut donc bien lui passer une date en format anglais comme paramètre, et aussi utiliser la fonction de conversion CDate() si tes cellules Excel sont formatées comme champ de type date.


Message édité par tegu le 23-02-2006 à 13:46:38
Reply

Marsh Posté le 23-02-2006 à 14:17:59    

Effectivement le format date est résolu mais un nouveau probleme apparait!
 
Maintenant pour les dates supérieures à 09, ça bug !!!

Reply

Marsh Posté le 23-02-2006 à 14:27:03    

Une « date supérieure à 09 » ça me parle pas.
Le numéro de jour, de mois, la décennie, autre ?
 
« Ça bug » veut dire quoi ? Une erreur apparaît (n°, description) ? Ça te donne un autre résultat que celui attendu ?

Reply

Marsh Posté le 23-02-2006 à 14:51:34    

En fait maintenant le tri fonctionne pour les jj  <  10
 
 
Mais pour les jj > 09, le filtre ne marche plus
 
Effectivement ce n'est pas un bug ça, j'avoue j'ai fait une erreur dans mon code!!!    :(  
 
 
 
J'ai plusieurs idées mais je n'arrive pas savoir le format que je dois choisir
  - envoyer des données dans Criteria sous forme de texte ou de date
  - formater les cellules Excel en texte ou en date
 
Là je suis au bout de mes capacités, j'y ai passé une journée !!!!!!!!!!!!
 
"In VB Veritas"


Message édité par juans le 23-02-2006 à 14:58:14
Reply

Marsh Posté le 23-02-2006 à 15:20:55    

Dans mon test, la colonne est de type date mais son format est français (17/01/2205).
L'affichage est donc conforme à tes attentes, MAIS il n'empêche qu'il faut passer en paramètre un format anglais.
 
Je ne vois pas ce qui te gêne. Déclare ta colonne au format date et utilise ma syntaxe.

Reply

Marsh Posté le 23-02-2006 à 16:41:57    

Je regarde ça, je vais raser mon code et repartir du début....
 
Je te donne mon code dès que je l'ai fini... Si j'y arrive

Reply

Marsh Posté le 23-02-2006 à 17:26:00    

En fait il manque un paramètre dans ton code, c'est pas un filtre par date que je cherche a faire mais par semaine.
 
C'est a dire de Critetia1 à Criteria2  (compris entre 2 dates)
 
Et dans ce cas la je n'arrive pas a le faire marcher le filtre.
 
Voici mon code :
 

Selection.AutoFilter Field:=3, Criteria1:=">=" & CDate(Format(aa, "mm/dd/yyyy" )), Operator:=xlAnd _
        , Criteria2:="<=" & CDate(Format(bb, "mm/dd/yyyy" ))

Reply

Marsh Posté le 23-02-2006 à 17:26:00   

Reply

Marsh Posté le 24-02-2006 à 09:27:25    

Comme ça, ça a l'air de bien fonctionner

Selection.AutoFilter Field:=3, Criteria1:=">=" & Format$(aa, "mm/dd/yyyy" ), _
          Operator:=xlAnd, Criteria2:="<=" & Format$(bb, "mm/dd/yyyy" )


Message édité par tegu le 24-02-2006 à 09:27:52
Reply

Marsh Posté le 24-02-2006 à 16:33:45    

OK, merci... Entre temps j'ai créé une nouvelle colonne avec mon numéro de semaine! Solution de facilité...

Reply

Marsh Posté le 28-02-2006 à 13:06:59    

Code :
  1. CDate( Mid(bb,4,2) & "/" & Mid(bb,1,2) & "/" & Mid(bb,7,2) )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed