VBA Excel : Format de date

Résolu/Fermé
misfit - Modifié le 11 déc. 2007 à 12:56
 Kimo - 29 janv. 2018 à 02:14
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

21 réponses

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.
31
Salut Armojax,

Merci de ta réponse qui en plus fonctionne super bien.
Ils sont fous ces américains ...
0
par exemple:
ActiveCell.NumberFormat = "mm/dd/yyyy" 'date/mois inversé
0
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
0
jimmy1120112
Messages postés
617
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
7 décembre 2014
61
Modifié par jimmy1120112 le 10/12/2012 à 19:30
@ 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...
;)
0
Merci beaucoup cher ami cette petite mais non moins brillantissime explication me délivre de dizaine de nuit blanchet a me tortiller les neurones pour cet infime couac ....Monsieur votre éclaircissement sur l'inversement des jours et des mois en vba est tous simplement si j'ose tordre la langue de voltaire "eurêkesque " cordialement...
0