VBA _ Format Date - Excel en franglais

Bonjour les Clubicistes,

J’ai un petit souci qui en vérité s’avère être bloquant pour une macro que je développe au sein de mon boulot.

Je m’explique.

Je doit remplir une feuille excel en fonction de différents champs/cellules de base situés sur un autre onglet.

Sur l’onglet de base j’ai une colonne date au format jj/mm/aaaa et une colonne matin ou après midi.

En fonction des valeurs de ces deux colonnes je les concatène en vba pour donner la valeur suivante :

Ex: “23/11/2010 09:00:00”

Mon problème est que Excel me fait un mélange entre les format de date que j’ai du mal à comprendre.

Ce mélange se fait entre les jours et les mois et ne se réalise que quand la date “inversible” du genre 02/12/2010.

Le problème c’est qu’en vba il me traite la date comme il faut càd jj/mm/aaaa et enregistre donc 02/12/2010, mais une fois passer dans excel il me met comme valeur de date : 12/02/2010. Or ce qui est bizarre c’est que si je fait clique droit/format de cellule sur les cellules comprennant ces dates excel m’inverse le jour et le mois en me mettant jj/mm/aaaa.
Il respecte donc le format français, mais me met comme valeur de moi le jour et inversement.

Je comprends vraiment pas d’où peut venir ce problème.

Si quelqu’un peut me venir en aide ca serait génial.

Julien.
Edité le 23/11/2010 à 15:33

Tu ne lui passerais pas une chaine de caractères au lieu de lui passer une date ?
Tu peux donner ta ligne de code exacte ?

Tout d’abord merci de ton implication dans mon problème :wink:

Alors mon code est le suivant:

dateoperation = Sheets(“INPUT”).Cells(ligne_OP, 3).Value

dateoperation = Format(dateoperation, “dd/mm/yyyy”)

Sheets(“DRAW”).Cells(ligne_TRAME, 13).Value = dateoperation & " 09:00:00" 'Column M

Sheets(“DRAW”).Cells(ligne_TRAME, 13).Value = CDate((Format(Sheets(“DRAW”).Cells(ligne_TRAME, 13).Value, “dd/mm/yyyy hh:mm:ss”)))

Pour etre clair lorsque je mets ma source dans la variable dateoperation elle est bien au bon format. Et c’est au moment ou il la colle dans le classeur excel qu’il considère le jour comme le mois.
Ce phénomène n’a lieu que lorsque le jour est inférieur ou égale à 12. Ex: 01/12/2010 devient 12/01/2010, mais d’après excel est au format jj/mm/aaaa…

Merci d’avance

C’est le comportement “normal” d’excel, tu as la même chose en saisie directe.
Excel transforme en date tout ce qui est compatible, et laisse le reste en chaîne de caractères.
Si tes cellules sont au format standard, tu le vois tout de suite :
30/11/10 -> date (margé à droite, comme tous les nombres)
31/11/10 -> texte (margé à gauche)

Ton problème vient de cette ligne :
Sheets(“DRAW”).Cells(ligne_TRAME, 3).Value = dateoperation & " 09:00:00" 'Column M
et comme ensuite tu en reprends la valeur …
Pourquoi ne pas prendre directement la variable ?

Sheets(“DRAW”).Cells(ligne_TRAME, 3).Value = CDate((Format(Sheets(“DRAW”).Cells(ligne_TRAME, 3).Value, “dd/mm/yyyy hh:mm:ss”)))
Ca ne sert à rien de formater ta chaine, puisque tu la transformes tout de suite après en nombre avec Cdate.
Si le but c’est de faire apparaître les secondes à l’affichage, il faut que tu formates ta cellule avec NumberFormat.

    dateoperation = Sheets("INPUT").Cells(ligne_op, 3).Value
    dateoperation = Format(dateoperation, "dd/mm/yyyy") + " 09:00:00"
    Sheets("DRAW").Cells(ligne_TRAME, 3).Value = CDate(dateoperation)
    Sheets("DRAW").Cells(ligne_TRAME, 3).NumberFormat = "dd/mm/yyyy hh:mm:ss"

Merci beaucoup, c’est exactement ce qu’il me fallait.

J’avais réussi à contourner le problème en faisant un micmac pas possible comme cela :

        Sheets("DRAW").Cells(ligne_TRAME, 13).Value = dateoperation & " 09:00:00" 'Column M
        If datej <= 12 Then
        Sheets("DRAW").Cells(ligne_TRAME, 13).Value = CDate((Format(Sheets("DRAW").Cells(ligne_TRAME, 13).Value, "mm/dd/yyyy")))
        Sheets("DRAW").Cells(ligne_TRAME, 13).Value = Sheets("DRAW").Cells(ligne_TRAME, 13).Value & " 09:00:00"
        Sheets("DRAW").Cells(ligne_TRAME, 13).Value = CDate((Format(Sheets("DRAW").Cells(ligne_TRAME, 13).Value, "mm/dd/yyyy hh:mm:ss")))
        Else
        Sheets("DRAW").Cells(ligne_TRAME, 13).Value = CDate((Format(Sheets("DRAW").Cells(ligne_TRAME, 13).Value, "dd/mm/yyyy hh:mm:ss")))
        End If

C’est moche mais ca fonctionnait.

Je vais cependant utiliser ton code qui me parait plus sur…

Merci beaucoup.

J’ai un autre problème avec la génération de mon fichier en csv. Si tu peux m’aider aussi ca serait sympa. Si oui tu préfère que j’ouvre un nouveau sujet ou je continue dans celui-ci.

Merci encore pour ton aide.

Bonne journée.

Mieux vaut ouvrir un nouveau sujet, avec un titre directement en rapport avec ton nouveau problème.
C’est pour faciliter les recherches ultérieures pour ceux qui auraient le même problème que toi