format dates 2007 vs 2002

Le
zappy
Bonjour à tous,

J'ai testé sous excel 2007, que je découvre, un classeur créé sous excel
2002, et je suis confronté à un traitement différent des dates selon la
version d'excel (sauf erreur de ma part).

Soit un range composé pour l'exemple de 4 lignes et 5 colonnes, comme suit :
texte, montant, montant, date, texte.
Je transmets ce range dans un array, puis (omettons pour l'exemple
quelques instructions) je colle les valeurs de l'array sur une 2e feuille.
La macro éxécutée sous 2002 colle les dates au format français, éxécutée
sous 2007 les dates sont collées au format anglo-saxon.
Je pourrai probablement modifier la macro pour traiter chaque élément
"Date" de l'array avant transfert, mais je trouvais bien pratique de
coller l'ensemble de l'array d'une seule instruction (code ci-dessous).

Savez-vous si une option d'excel 2007 pourrait résoudre ce problème ?

le code et le lien pour le classeur exemple :

Sub test_dates_tableau()
ReDim letableau(3, 4)
i = 0
For Each c In Sheets("feuil1").Range("a1:a4")
letableau(i, 0) = c
letableau(i, 1) = c.Offset(0, 1)
letableau(i, 2) = c.Offset(0, 2)
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date
letableau(i, 4) = c.Offset(0, 4) 'tiers
i = i + 1
Next c
Sheets("feuil2").Range("a1:e4") = letableau
End Sub

http://cjoint.com/?kkqBnPOc2w

Merci d'avance, et bonne soirée à tous,
Zappy.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FS
Le #20329881
Bonsoir,

Essaye en remplaçant
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date

par
letableau(i, 3) = CDate(c.Offset(0, 3))


FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

zappy a écrit :
Bonjour à tous,

J'ai testé sous excel 2007, que je découvre, un classeur créé sous excel
2002, et je suis confronté à un traitement différent des dates selon la
version d'excel (sauf erreur de ma part).

Soit un range composé pour l'exemple de 4 lignes et 5 colonnes, comme
suit :
texte, montant, montant, date, texte.
Je transmets ce range dans un array, puis (omettons pour l'exemple
quelques instructions) je colle les valeurs de l'array sur une 2e feuille.
La macro éxécutée sous 2002 colle les dates au format français, éxécutée
sous 2007 les dates sont collées au format anglo-saxon.
Je pourrai probablement modifier la macro pour traiter chaque élément
"Date" de l'array avant transfert, mais je trouvais bien pratique de
coller l'ensemble de l'array d'une seule instruction (code ci-dessous).

Savez-vous si une option d'excel 2007 pourrait résoudre ce problème ?

le code et le lien pour le classeur exemple :

Sub test_dates_tableau()
ReDim letableau(3, 4)
i = 0
For Each c In Sheets("feuil1").Range("a1:a4")
letableau(i, 0) = c
letableau(i, 1) = c.Offset(0, 1)
letableau(i, 2) = c.Offset(0, 2)
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date
letableau(i, 4) = c.Offset(0, 4) 'tiers
i = i + 1
Next c
Sheets("feuil2").Range("a1:e4") = letableau
End Sub

http://cjoint.com/?kkqBnPOc2w

Merci d'avance, et bonne soirée à tous,
Zappy.


zappy
Le #20330161
Bonsoir Frédéric,

effectivement CDate donne le bon résultat sous les deux versions
d'excel, il me reste à potasser un peu pour comprendre pourquoi... il me
semblait que c'était lors du transfert array vers feuille excel 2007 que
le problème se produisait, mais visiblement CDate ne transmet pas la
même info que Format(...)

Un grand Merci en tous cas (ma compta familiale est sauvée !)

Bonsoir à tous,
Zappy.

FS a écrit :
Bonsoir,

Essaye en remplaçant
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date

par
letableau(i, 3) = CDate(c.Offset(0, 3))


FS


michdenis
Le #20330141
Bonjour Zappy,

Pour faire ce que tu désires,
A - Mettre une plage de données dans un variable (Tableau)
B - Copier ce tableau vers une autre plage de cellules,

Ce code fonctionne et est suffisant :

x = Feuil1.Range("A1:F4").Value
Feuil2.Range("A1:F4") = x

Je suppose que la plage de destination, la plage de cellules est au format standard.




"zappy" #
Bonjour à tous,

J'ai testé sous excel 2007, que je découvre, un classeur créé sous excel
2002, et je suis confronté à un traitement différent des dates selon la
version d'excel (sauf erreur de ma part).

Soit un range composé pour l'exemple de 4 lignes et 5 colonnes, comme suit :
texte, montant, montant, date, texte.
Je transmets ce range dans un array, puis (omettons pour l'exemple
quelques instructions) je colle les valeurs de l'array sur une 2e feuille.
La macro éxécutée sous 2002 colle les dates au format français, éxécutée
sous 2007 les dates sont collées au format anglo-saxon.
Je pourrai probablement modifier la macro pour traiter chaque élément
"Date" de l'array avant transfert, mais je trouvais bien pratique de
coller l'ensemble de l'array d'une seule instruction (code ci-dessous).

Savez-vous si une option d'excel 2007 pourrait résoudre ce problème ?

le code et le lien pour le classeur exemple :

Sub test_dates_tableau()
ReDim letableau(3, 4)
i = 0
For Each c In Sheets("feuil1").Range("a1:a4")
letableau(i, 0) = c
letableau(i, 1) = c.Offset(0, 1)
letableau(i, 2) = c.Offset(0, 2)
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date
letableau(i, 4) = c.Offset(0, 4) 'tiers
i = i + 1
Next c
Sheets("feuil2").Range("a1:e4") = letableau
End Sub

http://cjoint.com/?kkqBnPOc2w

Merci d'avance, et bonne soirée à tous,
Zappy.
michdenis
Le #20330221
Et pour ton info.

Lorsque tu utilises la fonction "Format", le contenu de ta variable
contient une chaîne de caractères contenant une date comme : "5/10/09"
Ainsi transmis, Excel n'a aucune idée si la date signifie :
le 5 octobre 2009 ou 10 mai 2009 ou 9 mai 2005
Comme tu es en VBA, Excel utilises donc le format par défaut (américain)
pour interpréter les dates que tu lui soumets.

Si tu utilises la fonction de conversion Cdate(), pour que cela fonctionne,
le contenu de ta variable contient une date 5/10/19 sans les guillemets
et excel l'interprète correctement et ne modifie pas le format de celle-ci
lorsqu'il te la retourne dans ta feuille de calcul.



"michdenis"
Bonjour Zappy,

Pour faire ce que tu désires,
A - Mettre une plage de données dans un variable (Tableau)
B - Copier ce tableau vers une autre plage de cellules,

Ce code fonctionne et est suffisant :

x = Feuil1.Range("A1:F4").Value
Feuil2.Range("A1:F4") = x

Je suppose que la plage de destination, la plage de cellules est au format standard.




"zappy" #
Bonjour à tous,

J'ai testé sous excel 2007, que je découvre, un classeur créé sous excel
2002, et je suis confronté à un traitement différent des dates selon la
version d'excel (sauf erreur de ma part).

Soit un range composé pour l'exemple de 4 lignes et 5 colonnes, comme suit :
texte, montant, montant, date, texte.
Je transmets ce range dans un array, puis (omettons pour l'exemple
quelques instructions) je colle les valeurs de l'array sur une 2e feuille.
La macro éxécutée sous 2002 colle les dates au format français, éxécutée
sous 2007 les dates sont collées au format anglo-saxon.
Je pourrai probablement modifier la macro pour traiter chaque élément
"Date" de l'array avant transfert, mais je trouvais bien pratique de
coller l'ensemble de l'array d'une seule instruction (code ci-dessous).

Savez-vous si une option d'excel 2007 pourrait résoudre ce problème ?

le code et le lien pour le classeur exemple :

Sub test_dates_tableau()
ReDim letableau(3, 4)
i = 0
For Each c In Sheets("feuil1").Range("a1:a4")
letableau(i, 0) = c
letableau(i, 1) = c.Offset(0, 1)
letableau(i, 2) = c.Offset(0, 2)
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date
letableau(i, 4) = c.Offset(0, 4) 'tiers
i = i + 1
Next c
Sheets("feuil2").Range("a1:e4") = letableau
End Sub

http://cjoint.com/?kkqBnPOc2w

Merci d'avance, et bonne soirée à tous,
Zappy.
zappy
Le #20330331
Bonjour michdenis,

et merci pour tes retours et l'info que je cherchais,
reste que si comme tu me le dis :

> Ainsi transmis, Excel n'a aucune idée si la date signifie :
> le 5 octobre 2009 ou 10 mai 2009 ou 9 mai 2005

excel 2002 le comprend mieux que 2007 (si tu as l'occase de tester la
macro sur les deux versions)...

Ou alors je fais fausse piste...

Merci encore pour tes réponses,
Zappy.


michdenis a écrit :
Et pour ton info.

Lorsque tu utilises la fonction "Format", le contenu de ta variable
contient une chaîne de caractères contenant une date comme : "5/10/09"
Ainsi transmis, Excel n'a aucune idée si la date signifie :
le 5 octobre 2009 ou 10 mai 2009 ou 9 mai 2005
Comme tu es en VBA, Excel utilises donc le format par défaut (américain)
pour interpréter les dates que tu lui soumets.

Si tu utilises la fonction de conversion Cdate(), pour que cela fonctionne,
le contenu de ta variable contient une date 5/10/19 sans les guillemets
et excel l'interprète correctement et ne modifie pas le format de celle-ci
lorsqu'il te la retourne dans ta feuille de calcul.



"michdenis"
Bonjour Zappy,

Pour faire ce que tu désires,
A - Mettre une plage de données dans un variable (Tableau)
B - Copier ce tableau vers une autre plage de cellules,

Ce code fonctionne et est suffisant :

x = Feuil1.Range("A1:F4").Value
Feuil2.Range("A1:F4") = x

Je suppose que la plage de destination, la plage de cellules est au format standard.




"zappy" #
Bonjour à tous,

J'ai testé sous excel 2007, que je découvre, un classeur créé sous excel
2002, et je suis confronté à un traitement différent des dates selon la
version d'excel (sauf erreur de ma part).

Soit un range composé pour l'exemple de 4 lignes et 5 colonnes, comme suit :
texte, montant, montant, date, texte.
Je transmets ce range dans un array, puis (omettons pour l'exemple
quelques instructions) je colle les valeurs de l'array sur une 2e feuille.
La macro éxécutée sous 2002 colle les dates au format français, éxécutée
sous 2007 les dates sont collées au format anglo-saxon.
Je pourrai probablement modifier la macro pour traiter chaque élément
"Date" de l'array avant transfert, mais je trouvais bien pratique de
coller l'ensemble de l'array d'une seule instruction (code ci-dessous).

Savez-vous si une option d'excel 2007 pourrait résoudre ce problème ?

le code et le lien pour le classeur exemple :

Sub test_dates_tableau()
ReDim letableau(3, 4)
i = 0
For Each c In Sheets("feuil1").Range("a1:a4")
letableau(i, 0) = c
letableau(i, 1) = c.Offset(0, 1)
letableau(i, 2) = c.Offset(0, 2)
letableau(i, 3) = Format(c.Offset(0, 3), "dd/mm/yyyy")'date
letableau(i, 4) = c.Offset(0, 4) 'tiers
i = i + 1
Next c
Sheets("feuil2").Range("a1:e4") = letableau
End Sub

http://cjoint.com/?kkqBnPOc2w

Merci d'avance, et bonne soirée à tous,
Zappy.



michdenis
Le #20330921
| Ainsi transmis, Excel n'a aucune idée si la date signifie :
| le 5 octobre 2009 ou 10 mai 2009 ou 9 mai 2005

*** Ce qui précède est vrai avec la fonction Format(). Lorsque tu
utilises la fonction de conversion Cdate(), cette fonction
emploie le paramètre "date court" comme format défini dans
le panneau de configuration de Windows (options régionales).
C'est à partir de cette information qu'elle interprète la chaîne
de caractères "Date" que tu lui présentes. Cette fonction "Cdate()"
a cependant une limite... si ton classeur créé à partir d'une version
française devait être ouvert aux États-Unis, ça causerait problème
puisque le format de date américain dans le panneau de configuration
de Windows est : Mois / jour / année tandis que toi tu
utilises Jour / Mois / année.

***D'après mes lectures, le format de date suivant : Année / mois / jour est
valide internationalement.

| excel 2002 le comprend mieux que 2007 (si tu as l'occase de tester
| la macro sur les deux versions)...

*** Il faudrait que tu "définisses" ce que tu entends par "comprend mieux"
j'ai fait des tests à partir de la version Excel 2003 et 2007 et je n'y ai pas
vu une différence.
Publicité
Poster une réponse
Anonyme