Posez votre question Signaler

VBA Excel : Format de date [Résolu]

misfit - Dernière réponse le 25 mars 2014 à 09:27
Bonjour,
Je n'arrive pas à mettre en forme une date saisie dans un formulaire :
Lors de la fermeture du formulaire les données saisies sot recopiées dans des cellules d'une feuille de calcul ; j'ai défini sur les cellules de la 1ere colonne de ma feuille de calcul un format "Date" sous forme "jj/mm/aaaa".
Dans le module (voir code ci-dessous) je force la valeur de la textbox à ce format :
    If saisie.date_ev.Value <> "" Then
        If Not IsDate(saisie.date_ev.Value) Then
            MsgBox "Date incorrecte.", vbCritical + vbOKOnly, "Erreur"
            saisie.date_ev.Value = ""
            saisie.date_ev.SetFocus
            saisie.Hide
            saisie.Show
        Else
            saisie.date_ev.Value = Format(saisie.date_ev.Value, "dd/mm/yyyy")
        End If
    End If

Or malgré toutes ces précautions, la date recopiée dans la cellule est au format "mm/jj/aaaa".
Je ne souhaite pas modifier les préférences régionales.
Quelqu'un a-t-il une solution ?
Merci d'avance
Lire la suite 
Réponse
+24
moins plus
Bonjour Misfit,

Les formats de dates attribués aux cellules dans Excel ne se traduisent pas tous de la même façon en VBA.

Ainsi, une cellule dont on définit le format en jj/mm/aa sous Excel est traduit en VBA par : NumberFormat = dd/mm/yy. Normal.
Tandis qu'un format défini par jj/mm/aaaa est traduit par : NumberFormat = m/d/yyyy, ce qui change tout.

Concrètement, en VBA, inverse les mois et les jours.

Armojax.
misfit- 16 déc. 2004 à 16:26
Salut Armojax,

Merci de ta réponse qui en plus fonctionne super bien.
Ils sont fous ces américains ...
Répondre
pat- 10 mai 2012 à 16:50
par exemple:
ActiveCell.NumberFormat = "mm/dd/yyyy" 'date/mois inversé
Répondre
pat- 11 mai 2012 à 10:46
En fait, le problème persiste dans mon cas (l'enregistrement d'une cellule type date dans un fichier csv est fait bien selon le format "dd/mm/yyyy" mais le rechargement de la cellule depuis le fichier change le format d'affichage en "mm/dd/yyyy". Apparemment save et load ne fonctionnent pas avec le même format ! J'ai pu m'en affranchir en ajoutant une cote (') devant la valeur à affecter: ActiveCell.Value = "'" + val_cell_read_from_file
Répondre
jimmy1120112 626Messages postés mardi 30 novembre 2010Date d'inscription 7 décembre 2014Dernière intervention - 10 déc. 2012 à 19:29
@ misfit
Les américains ne sont pas fou du tout... Excel est tout simplement d'origine Américaine et l'interface d'excel est adapté suivant les différents pays mis à part la VBA qui elle, est rester Américaine donc tout ce qui est de la-bas comme le format date dois être adapter au interfaces différentes d'excel.
Je ne connais pas grand chose mais à voir comme ce compose et s'écrit la VBA, la déduction vas de soit...
;)
Répondre
Ajouter un commentaire
Réponse
+14
moins plus
salut Misfit,

lorsque tu écrit :
saisie.date_ev.Value = Format(saisie.date_ev.Value, "dd/mm/yyyy"), tu mets une chaîne de caractères dans ta cellule.

essaye ceci :
saisie.date_ev.Value = Cdate(saisie.date_ev.Value)

A+,
Kobaya.
Coolice- 27 janv. 2011 à 21:53
Thx super ça marche .
cellule_cible.value=Cdate (valeur dans user form)
Répondre
lahoucein- 16 déc. 2011 à 01:02
Merci beaucoup ça marche très bien
cellule_cible.value=Cdate (valeur dans user form)

mon exemple est :
ActiveSheet.Cells(numLigneVide, 18) = CDate(txtDateVisa.Text)
Répondre
Ajouter un commentaire
Réponse
+7
moins plus
Salut Kobaya,

Merci pour ta réponse mais ça ne marche pas. Tout comme avec Format ma date apparait bien sous la forme jj/mm/aaaa dans ma textbox mais lorsque je recopie le contenu de ce textbox dans la cellule, la date passe au format mm/jj/aaaaa.

Y a quelqu'un qui aurait une autre idée ... Je craaaaaque

A+
Misfit
Ajouter un commentaire
Réponse
+3
moins plus
et puis transformes ta valeur en cdate(textbox)
Ajouter un commentaire
Réponse
+2
moins plus
et si tu regardais tans ta cellule le format de celle ci
si tu déposes une date dans une cellule elle prendra le format du contenant
Ajouter un commentaire
Réponse
+2
moins plus
Suggestion:
Au moment de l'enregistrement de la value de la text box vers ta cellule procéde de la manière suivante:
cells(x, y).value = format(Userform.Textbox, "dd/MM/yyyy")

pour définir le format jj/mm/aaaa il font que le mois soit en anglais et en majuscule. C'est la même chose que pour la fonction PartDate.

En espèrant que ca fonction pour toi.
Michou
Ajouter un commentaire
Réponse
+2
moins plus
Bon sa fait lontemps, mais j'ai trouvé avec un Cdate et je ne sais plus quelle manipulation (je crois qu'on devait mettre le truc en anglais mais en français quand mm enfin bref).
Maintenant sa fonctionne mais je peut pas en dire plus sur la solution
Ajouter un commentaire
Réponse
+1
moins plus
J'ai exactement le même problème lors d'une ouverture de fichier .txt par VBA dans excel, si tu as trouvé préviens moi sinon si je trouve de mon coté je te préviendrai forcément
Ajouter un commentaire
Réponse
+1
moins plus
De la part de quelqu'un que j'ai pu aider grâce à ce fil : merci !
Ajouter un commentaire
Réponse
+1
moins plus
d="22/08/2008 12:30:42"
activecell...value=datevalue(t)
eventuellement changez format cellule
Ajouter un commentaire
Réponse
+1
moins plus
Bon je remonte ce topic, pas envie d'en faire un autre.
J'ai un souchis de date avec un classeur excel: sur mon pc, et sur le pc de mon responsable, pas de problème, je peut faire en vba un:
activeSheet.Cells(parcoursLigne, "H").NumberFormatLocal = "jj/mm/aaaa"
EN revanche, sur le pc d'une autre personne, extérieure au service, dont je ne connais aps la config, impossible de le faire: le format jj/mm/aaaa n'existe pas.
SI vous pouviez m'éclairer sur la solution....merci d'avance
Ajouter un commentaire
Réponse
+1
moins plus
Ajouter un commentaire
Réponse
+1
moins plus
Il faut tester la valeur et le type de cellule
MsgBox ("The Value property is: " & Cell.Value)
MsgBox ("The Text property is: " & Cell.Text)

On voit que "Value" c'est la valeur de la date et que "Text" c'est le format d'affichage de la date.

Si la cellule contient un texte non interprété en date dans sa forme d'affichage il faut le convertir comme suivant

For Each Cell In Selection
If IsDate(Cell.Value) Then
Cell.Value = DateValue(Cell.Value)
End If
Next Cell
Ajouter un commentaire
Réponse
+1
moins plus
Dim datduJour As String
Application.StatusBar = Format(datduJour, "dd/mm/yyyy")

==> permet d'avoir la date en format JJ/MM/AAAA quel que soit le support utilisé (textbox ou cellule).
Ajouter un commentaire
Réponse
+1
moins plus
Tu peux essayer de formater ta cellule avec un formatage type:

Selection (ta cellule) = CDate(CSng(Date))

Trouvé cette solution sur un forum car confronté au même problème....

@+
Ajouter un commentaire
Réponse
+0
moins plus
bonjour,
je n'arrive pas extraire les semestres de l'année avec la ffonction partdate de access. je tente de l'utiliser dans une requête mais je ne connais pas le paramètre pour extraire le semestre en fonction d'une liste de date saisie. Merci bien de m'aider.Nini
Ajouter un commentaire
Réponse
+0
moins plus
Kubaya rules !!!!

j'avais le même probleme avec le format des dates et c'est réglé grâce à "Cdate" !!!

Thank you so much !
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

J'ai un problème similaire, mais avec un autre cas de figure.
Je souhaite copier le contenu d'une cellule dans une autre, et
dans la premiere ça m'affiche bien "01/03/2010" mais dans
la seconde, ça m'inverse le jour et le mois à savoir "03/01/2010"
lorsque la macro copie et colle les données d'une cellule vers l'autre.

Je précise que les 2 feuilles (cellule de copie et cellule de collage) sont
différentes, mais appartiennent au même classeur et les cellules sont
configurées en dates françaises.

Merci pour votre aide.
Ajouter un commentaire
Réponse
+0
moins plus
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour le forum !
Un petit up quelques années après, puisque j'ai un problème "similaire".
Je m'explique :
- J'importe un fichier .txt dans xls. Dans ce fichier, diverses données + 2 colonnes (B et F) avec des dates au format jj/mm/aaaa
- avec une macro VBA, je copie les données de ce fichier
- je ferme le fichier
- je colle les données de ce fichier dans un autre classeur

Jusque Jeudi dernier (31/05/2012), tout allait bien ... mais depuis le 1er Juin, au passage d'un fichier à l'autre, mon 01/06/2012 devient 06/01/2012 ...

J'ai bien lu vos différentes suggestions, mais comment faire s'il s'agit de définir le format de ces données importées sur 2 colonnes et ne pas perdre ce format lors du copier-coller ?

Merci d'avance.

EDM
Ajouter un commentaire
Ce document intitulé «  VBA Excel : Format de date  » 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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.