Date dans userform

Bonjour, voila j'ai un userform qui me transfere les données dans un tableau.

Puis ce tableau est filtre a partir de plusieurs critères dont la date.

Mais quand je valide l'userform, la date reste en format "texte" et n'ai pas lu pour le filtre.

Comment faire merci?

Attention je suis sous mac excel 2011

13classeur2-v2.xlsx (17.15 Ko)

Bonsoir petithom

Tu es gentil, mais je ne vois dans ton fichier ni userform , ni macro ???

Pour aider ??

Merci

Merde oui je me suis planter de fichier.

Mille excuses

10classeur2-v2.xlsm (27.70 Ko)

Re

Je pense qu'il faut tout simplement que tu mettes ta colonne date en format date

Essaie déjà

A +

D'autre part je viens de voir que ton bouton Valider tu l'as appelé li ... donc il ne se passe rien

oui j'ai deja essayer mais ça ne fonctionne pas??

Re

Voilà ton fichier modifié

18classeurv2.xlsm (27.39 Ko)

Vois et dis-moi

A+

Désolé mais pour moi rien n'a changer??

Re,

Pour ce qui concerne uniquement l'instruction pour retrouver la date dans la feuille ... tu peux tester :

ActiveCell = Format(CDate(TextBox1), "dd/mm/yy")

En espérant que cela t'aide ...

Bonjour

merci à James et Patty

ci-joint

cela fonctionne dans la colonne A se met bien en format Date, une fois tout saisie dans l'usf

crdlt,

André

Bonsoir André, bonsoir James

Je ne comprend pas , car mon fichier semble fonctionner aussi bien que celui d'André

Mystère de l'informatique ??

Bonne soirée à tous

Coucou Patty

s'était juste le nom du bouton de commande

Private Sub CmdOK_Click()

par

Private Sub li_Click()

Bonsoir andré

Sauf que moi j'avais renommé li par CmdOK , ce qui me semblait plus parlant !!

Bonne soirée

Bonjour

merci à James et Patty

ci-joint

cela fonctionne dans la colonne A se met bien en format Date, une fois tout saisie dans l'usf

crdlt,

André

J'ai tester mais quand je filtre le produit ne s'affiche pas????

Re,

Avant de passer à une autre question ... est-ce-que la date s'affiche au format date ... dans la Colonne A ...???

Re,

Pour ce qui concerne uniquement l'instruction pour retrouver la date dans la feuille ... tu peux tester :

ActiveCell = Format(CDate(TextBox1), "dd/mm/yy")

En espérant que cela t'aide ...

J'ai tester aussi mais pareil quand je filtre il ne prend en compte le produit.

Si je rentre la date manuellement, c'est ok????????

Re,

Avant de passer à une autre question ... est-ce-que la date s'affiche au format date ... dans la Colonne A ...???

effectivement la date ne s'affiche pas au bon format

Re,

Donc ... la première étape consiste à tester la version 3 ...

En espérant que cela t'aide ...

6classeurv3.xlsm (23.49 Ko)

Bonsoir à tous

Je crois que petithom s'exprime très mal, car son problème ne semble pas venir de la colonne A de la feuille liste qui marche depuis le début, mais de la formule qu'il a entée en Q8 et R8 de la feuille repartition !!!!

Bon courage à tous

Re,

Donc ... la première étape consiste à tester la version 3 ...

En espérant que cela t'aide ...

Désolé mais toujours pas de produit qui s'affiche lorsque je filtre et cela vient bien de la date car si je la rentre manuellement tout se passe bien.

Bonsoir, et Salut à tous !

Hormis le blocage avec un .Value qui n'avait pas d'objet auquel se raccrocher, dans le code initial, il me semble qu'il faudrait rappeler le b-a-ba en matière de dates lorsqu'on travaille en paramètres FR (je le précise car les choses peuvent être différentes selon les paramètres régionaux).

Il faut préciser d'abord que les dates constituent un type de données Date, type particulier faisant l'objet de traitement particulier, mais devant son clavier on a aucun moyen de différencier les types de données saisies (sauf à saisir une formule susceptible de renvoyer une valeur dans un type de données...). On frappe des touches qui envoient des caractères ! Tant qu'Excel ne reçoit que des chiffres ou des caractères pouvant entrer dans la composition de nombres ce sera interprété comme nombre. La présence d'un autre caractère quelconque suffira à faire interpréter la saisie comme texte.

Rappelons que si l'on ne force pas l'alignement dans Excel, les nombres iront se cadrer à droite dans une cellule, et le texte à gauche. Signe de reconnaissance qui a son importance en matière de date car, cadrée à droite comme les nombres, c'est une date reconnue comme date par Excel, cadrée à gauche ce sera un texte non reconnu comme date et non traité comme tel.

Lorsqu'on saisit manuellement une date, Excel l'identifiera à partir des éléments saisis : le séparateur de date utilisé [ - le tiret de façon universelle, / le slash commun à de nombreux pays], les nombres saisis pouvant représenter des quantièmes de mois et de jours, les noms de mois abrégés ou complets le cas échéant. Il se réfère aux paramètres régionaux de Windows pour opérer cette reconnaissance.

La date saisie étant reconnue comme date, il la convertit en type Date.

C'est à dire dote la cellule d'un format de date par défaut (sauf si la cellule a déjà un format autre que Standard), figurant aux paramètres régionaux, selon la forme de la saisie, et convertit la date en nombre, forme sous laquelle elle est stockée et qui permet les calculs...

VBA travaille un peu comme Excel en matière de date, mais le premier problème qu'on rencontre en utilisant des Userforms est que les contrôles accueillant des données : TextBox, ComboBox, ListBox ne connaissent que des données de type String, du texte !

Donc chaque fois qu'on sort une date d'une TextBox, on sort du texte et non une données de type Date, et si l'on veut être sûr d'avoir une date il convient par conséquent de la convertir systématiquement en Date !

Si on ne le fait pas, VBA s'en chargera tout seul s'il peut reconnaître la chaîne comme date, mais par défaut sa vision est américaine et donc des dates saisies en format FR ayant un jour inférieur à 13 verront ce dernier interprété comme étant le mois, ce qui provoque l'inversion fréquente jour/mois.

L'utilisation de la fonction Format n'est jamais une solution, car cette fonction renvoie du texte, c'est à dire qu'elle peut formater une date en texte selon le format spécifié, mais ne produit pas une données Date (et dans la cellule on sait que le format est conditionné par le format de cellule). Il peut donc y avoir conversion sauvage de la date passée à la fonction et/ou de la valeur renvoyée par la fonction.

Lorsqu'on se sert de cette fonction lors de l'affectation d'une donnée date on peut fort bien se retrouver avec une date inversée mois/jour (prise en compte comme date par Excel et cadrée à droite) ou une date insérée comme texte (cadrée à gauche, donc non reconnue comme date par Excel).

On obtient les deux cas avec le code concerné.

L'utilisation de Format est à proscrire !

La solution est de convertir explicitement la valeur issue de la TextBox lors de l'affectation : les fonctions CDate ou DateValue le permettent, et leur utilisation dirige la reconnaissance opérée par VBA au moyen des paramètres régionaux FR (que VBA ignore superbement si on ne l'y contraint pas).

J'ajoute, s'agissant de Format, que son utilisation pour affecter un nombre quelconque est tout autant une erreur, telle qu'elle figure également dans ce code [surtout si le format indiqué ne peut être reconnu par VBA...]. Le format sous laquelle une valeur apparaîtra est l'affaire du format de cellule, ce qu'on affecte est une valeur, qui ne doit en aucun cas être modifiée par l'application d'un format. Si la cellule n'a pas le format voulu, on ajoute une ligne de code pour la doter de ce format.

Tout ce bout de code est donc à remettre sur pied pour éviter que des problèmes continuent de surgir... Et si par la même occasion on faisait disparaître les Select, Selection ou ActiveCell, on finirait pas avoir un bon code !

Pour ce qui est du filtrage, je ne comprends pas vraiment la façon de procéder : ne récupérer qu'une colonne et obtenir par formules des éléments qui auraient pu être fournis par le filtrage. En tout cas hors problème de dates qui sont du texte, ça fonctionne !

Cordialement.

Rechercher des sujets similaires à "date userform"