Rechercher : dans
Par :

Filtrer date par macro VBA - pb de format

Dernière réponse le 16 mai 2007 à 16:39:21 Sailorbop, le 23 mar 2007 à 17:09:23 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Filtrer date par macro VBA pb de format » dans :
VB6/VBA Transformer nombre en texte VoirIntroduction Préliminaires VB6 Dans le module de la forme Dans Module1 Introduction La fonction peut transformer des nombres de l'unité jusqu'à 999 tera. Prend en compte la syntaxe pour le français de France, de Belgique et de...
Vérifier le format d'une date en PHP VoirIl existe plusieurs méthodes pour verifier le format d'une date en PHP, vous pouvez par exemple découper la chaîne puis tester les valeurs de chaque élément. Plus simplement nous utiliserons les expressions régulières. Pour valider une date au...
VBScript - Les fonctions de date et de temps VoirLes fonctions de date et de temps Fonction Description Date Retourne la date du système DateAdd(interval, number, date) Ajoute un intervalle de temps (interval) à une...

1

sailorbop, le 30 mar 2007 à 17:15:57

Re-Bonjour !!
Personne qui aurait une petite idée ?? Merci d'avance !!!

Répondre à sailorbop

2

Juan's, le 13 mai 2007 à 22:07:07

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

Répondre à Juan's

3

Papou, le 14 mai 2007 à 20:11:46

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

Répondre à Papou

4

Papou, le 14 mai 2007 à 20:21:42
  • +1

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

Répondre à Papou

5

Juan's, le 14 mai 2007 à 23:12:32

Oui mais le filtre ne marche pas dans ce cas la.
Il faut transformer la date en chiffre comme indiqué ci-dessus.

Répondre à Juan's

6

Sailor, le 16 mai 2007 à 15:27:28

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) !!

Répondre à Sailor

7

 sailorbop, le 16 mai 2007 à 16:39:21

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 !

Répondre à sailorbop