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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FS
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.
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
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
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
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
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
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" a écrit dans le message de groupe de discussion : # 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.
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" <utilisateur@exemple.fr> a écrit dans le message de groupe de discussion :
#6UU75cSKHA.1232@TK2MSFTNGP05.phx.gbl...
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
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" a écrit dans le message de groupe de discussion : # 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
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" a écrit dans le message de groupe de discussion :
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" a écrit dans le message de groupe de discussion : # 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.
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" <michdenis@hotmail.com> a écrit dans le message de groupe de discussion :
43BF30B8-2DF6-47B2-93A7-9390AD5B95B5@microsoft.com...
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" <utilisateur@exemple.fr> a écrit dans le message de groupe de discussion :
#6UU75cSKHA.1232@TK2MSFTNGP05.phx.gbl...
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
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" a écrit dans le message de groupe de discussion :
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" a écrit dans le message de groupe de discussion : # 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
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" a écrit dans le message de groupe de discussion :
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" a écrit dans le message de groupe de discussion : # 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.
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" <michdenis@hotmail.com> a écrit dans le message de groupe de discussion :
43BF30B8-2DF6-47B2-93A7-9390AD5B95B5@microsoft.com...
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" <utilisateur@exemple.fr> a écrit dans le message de groupe de discussion :
#6UU75cSKHA.1232@TK2MSFTNGP05.phx.gbl...
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
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" a écrit dans le message de groupe de discussion :
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" a écrit dans le message de groupe de discussion : # 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
| 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.
| 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.
| 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.