Je gal=C3=A8re un peu (beaucoup) avec un souci r=C3=A9current : le formatag=
e des dates dans Excel !!
Je traite un fichier qui contient des dates au format : jj.mm.aaaa
Pour que ma macro fonctionne, je dois transformer ces dates en jj/mm/aaaa.
Jusque l=C3=A0, tout va bien.
Mais o=C3=B9 cela se g=C3=A2te, c'est que Excel prend le format am=C3=A9ric=
ain (m=C3=AAme si j'ai format=C3=A9 ma cellule en date) et donc le 04.02.20=
19 devient le 02/04/2019.... et mes diverses tentatives avec VBA ne donnent=
rien.
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
MichD
Le 22/08/19 à 05:23, ThierryP a écrit :
Bonjour le forum ou ce qu'il en reste !! Je galère un peu (beaucoup) avec un souci récurrent : le formatage des dates dans Excel !! Je traite un fichier qui contient des dates au format : jj.mm.aaaa Pour que ma macro fonctionne, je dois transformer ces dates en jj/mm/aaaa. Jusque là, tout va bien. Mais où cela se gâte, c'est que Excel prend le format américain (même si j'ai formaté ma cellule en date) et donc le 04.02.2019 devient le 02/04/2019.... et mes diverses tentatives avec VBA ne donnent rien. Merci d'avance ! ThierryP
Bonjour, 3 manières de procéder : Lorsque l'on utilise une variable de type "Date", cette dernière utilise toujours le format court de date défini dans les paramètres du panneau de configuration de Windows. '------------------------------ Sub test() Dim D As Date D = Date Range("A1") = D End Sub '------------------------------ Sub test1() Range("A2") = DateSerial(2019, 8, 22) End Sub '------------------------------ Sub test2() Range("A4") = DateValue("2019/08/22") End Sub '------------------------------ MichD
Le 22/08/19 à 05:23, ThierryP a écrit :
Bonjour le forum ou ce qu'il en reste !!
Je galère un peu (beaucoup) avec un souci récurrent : le formatage des dates dans Excel !!
Je traite un fichier qui contient des dates au format : jj.mm.aaaa
Pour que ma macro fonctionne, je dois transformer ces dates en jj/mm/aaaa.
Jusque là, tout va bien.
Mais où cela se gâte, c'est que Excel prend le format américain (même si j'ai formaté ma cellule en date) et donc le 04.02.2019 devient le 02/04/2019.... et mes diverses tentatives avec VBA ne donnent rien.
Merci d'avance !
ThierryP
Bonjour,
3 manières de procéder :
Lorsque l'on utilise une variable de type "Date", cette dernière utilise
toujours le format court de date défini dans les paramètres du panneau
de configuration de Windows.
'------------------------------
Sub test()
Dim D As Date
Bonjour le forum ou ce qu'il en reste !! Je galère un peu (beaucoup) avec un souci récurrent : le formatage des dates dans Excel !! Je traite un fichier qui contient des dates au format : jj.mm.aaaa Pour que ma macro fonctionne, je dois transformer ces dates en jj/mm/aaaa. Jusque là, tout va bien. Mais où cela se gâte, c'est que Excel prend le format américain (même si j'ai formaté ma cellule en date) et donc le 04.02.2019 devient le 02/04/2019.... et mes diverses tentatives avec VBA ne donnent rien. Merci d'avance ! ThierryP
Bonjour, 3 manières de procéder : Lorsque l'on utilise une variable de type "Date", cette dernière utilise toujours le format court de date défini dans les paramètres du panneau de configuration de Windows. '------------------------------ Sub test() Dim D As Date D = Date Range("A1") = D End Sub '------------------------------ Sub test1() Range("A2") = DateSerial(2019, 8, 22) End Sub '------------------------------ Sub test2() Range("A4") = DateValue("2019/08/22") End Sub '------------------------------ MichD
ThierryP
Bonjour Denis, Merci pour ton retour !!! Il semble que tu sois le dernier gourou à fréquenter ce forum... Je m'en suis tiré en faisant ceci : With Range("B:B") .NumberFormat = "mm/dd/yyyy;@" .Replace ".", "/" End With Il semble que cela fonctionne.... mais pourrait-il y avoir un piège qu e je ne connais pas ? ThierryP
Bonjour Denis,
Merci pour ton retour !!!
Il semble que tu sois le dernier gourou à fréquenter ce forum...
Je m'en suis tiré en faisant ceci :
With Range("B:B")
.NumberFormat = "mm/dd/yyyy;@"
.Replace ".", "/"
End With
Il semble que cela fonctionne.... mais pourrait-il y avoir un piège qu e je ne connais pas ?
Bonjour Denis, Merci pour ton retour !!! Il semble que tu sois le dernier gourou à fréquenter ce forum... Je m'en suis tiré en faisant ceci : With Range("B:B") .NumberFormat = "mm/dd/yyyy;@" .Replace ".", "/" End With Il semble que cela fonctionne.... mais pourrait-il y avoir un piège qu e je ne connais pas ? ThierryP
MichD
Le 22/08/19 à 07:37, ThierryP a écrit :
Bonjour Denis, Merci pour ton retour !!! Il semble que tu sois le dernier gourou à fréquenter ce forum... Je m'en suis tiré en faisant ceci : With Range("B:B") .NumberFormat = "mm/dd/yyyy;@" .Replace ".", "/" End With Il semble que cela fonctionne.... mais pourrait-il y avoir un piège que je ne connais pas ? ThierryP
La propriété "NumberFormat" attribue à une cellule un format de date. Si tu n'es pas certain que la cellule est au format standard, c'est une manière de s'assure du format de la cellule. De plus, tu peux donner à la cellule plusieurs formats de date qu'Excel sait reconnaître. Dans un deuxième temps, tu entres la valeur date que tu veux. With Range("B:B") .NumberFormat = "mm/dd/yyyy" .Value = LaDate End with si j'écris une date "02/03/06" comme cela, est-ce que tu sais de quelle date il s'agit ? Je peux faire référence au 2 mars 2006, 3 février 2006 ou 6 mars 2003. Si tu ne connais pas le format date que j'utilise, cela laisse plage à interprétation. En vba, c'est la même chose. Par défaut, en vba, tout est au format américain par défaut. Si tu as une chaîne de caractère qui représente une date, tu dois lui spécifier le format date que tu utilises pour qu'il puisse "comprendre" ce à quoi tu fais référence. Je t'ai donné 3 manières différentes afin de t'assurer qu'Excel interprète bien la date que tu lui donnes en VBA. Quand tu donnes à VBA la clé (format date auquel tu fais référence) pour la chaîne de caractère représentant une "Date", lorsque tu renvoies cette date dans une cellule au format "STANDARD", Excel va adapter la date selon le format par défaut défini dans le système d'exploitation de Windows. Si tu veux obtenir un format date particulier, tu utilises alors "NumberFormat". Cette propriété est aussi importante à définir si la cellule n'est pas au format standard ou a un format différent de celui que tu veux obtenir. L'utilisation du point dans une date "04.02.2019" n'est pas standard à tout le monde. Que va-t-il se passer si un autre usager devait ouvrir ton fichier ayant un autre format de date par défaut dans le panneau de configuration de Windows? MichD
Le 22/08/19 à 07:37, ThierryP a écrit :
Bonjour Denis,
Merci pour ton retour !!!
Il semble que tu sois le dernier gourou à fréquenter ce forum...
Je m'en suis tiré en faisant ceci :
With Range("B:B")
.NumberFormat = "mm/dd/yyyy;@"
.Replace ".", "/"
End With
Il semble que cela fonctionne.... mais pourrait-il y avoir un piège que je ne connais pas ?
ThierryP
La propriété "NumberFormat" attribue à une cellule un format de date. Si
tu n'es pas certain que la cellule est au format standard, c'est une
manière de s'assure du format de la cellule. De plus, tu peux donner à
la cellule plusieurs formats de date qu'Excel sait reconnaître. Dans un
deuxième temps, tu entres la valeur date que tu veux.
With Range("B:B")
.NumberFormat = "mm/dd/yyyy"
.Value = LaDate
End with
si j'écris une date "02/03/06" comme cela, est-ce que tu sais de quelle
date il s'agit ? Je peux faire référence au 2 mars 2006, 3 février 2006
ou 6 mars 2003. Si tu ne connais pas le format date que j'utilise, cela
laisse plage à interprétation. En vba, c'est la même chose. Par défaut,
en vba, tout est au format américain par défaut. Si tu as une chaîne de
caractère qui représente une date, tu dois lui spécifier le format date
que tu utilises pour qu'il puisse "comprendre" ce à quoi tu fais référence.
Je t'ai donné 3 manières différentes afin de t'assurer qu'Excel
interprète bien la date que tu lui donnes en VBA.
Quand tu donnes à VBA la clé (format date auquel tu fais référence) pour
la chaîne de caractère représentant une "Date", lorsque tu renvoies
cette date dans une cellule au format "STANDARD", Excel va adapter la
date selon le format par défaut défini dans le système d'exploitation de
Windows. Si tu veux obtenir un format date particulier, tu utilises
alors "NumberFormat". Cette propriété est aussi importante à définir si
la cellule n'est pas au format standard ou a un format différent de
celui que tu veux obtenir.
L'utilisation du point dans une date "04.02.2019" n'est pas standard à
tout le monde. Que va-t-il se passer si un autre usager devait ouvrir
ton fichier ayant un autre format de date par défaut dans le panneau de
configuration de Windows?
Bonjour Denis, Merci pour ton retour !!! Il semble que tu sois le dernier gourou à fréquenter ce forum... Je m'en suis tiré en faisant ceci : With Range("B:B") .NumberFormat = "mm/dd/yyyy;@" .Replace ".", "/" End With Il semble que cela fonctionne.... mais pourrait-il y avoir un piège que je ne connais pas ? ThierryP
La propriété "NumberFormat" attribue à une cellule un format de date. Si tu n'es pas certain que la cellule est au format standard, c'est une manière de s'assure du format de la cellule. De plus, tu peux donner à la cellule plusieurs formats de date qu'Excel sait reconnaître. Dans un deuxième temps, tu entres la valeur date que tu veux. With Range("B:B") .NumberFormat = "mm/dd/yyyy" .Value = LaDate End with si j'écris une date "02/03/06" comme cela, est-ce que tu sais de quelle date il s'agit ? Je peux faire référence au 2 mars 2006, 3 février 2006 ou 6 mars 2003. Si tu ne connais pas le format date que j'utilise, cela laisse plage à interprétation. En vba, c'est la même chose. Par défaut, en vba, tout est au format américain par défaut. Si tu as une chaîne de caractère qui représente une date, tu dois lui spécifier le format date que tu utilises pour qu'il puisse "comprendre" ce à quoi tu fais référence. Je t'ai donné 3 manières différentes afin de t'assurer qu'Excel interprète bien la date que tu lui donnes en VBA. Quand tu donnes à VBA la clé (format date auquel tu fais référence) pour la chaîne de caractère représentant une "Date", lorsque tu renvoies cette date dans une cellule au format "STANDARD", Excel va adapter la date selon le format par défaut défini dans le système d'exploitation de Windows. Si tu veux obtenir un format date particulier, tu utilises alors "NumberFormat". Cette propriété est aussi importante à définir si la cellule n'est pas au format standard ou a un format différent de celui que tu veux obtenir. L'utilisation du point dans une date "04.02.2019" n'est pas standard à tout le monde. Que va-t-il se passer si un autre usager devait ouvrir ton fichier ayant un autre format de date par défaut dans le panneau de configuration de Windows? MichD
MichD
Le 22/08/19 à 08:58, ThierryP a écrit :
Merci pour les explications ! Toujours aussi pédagogue :-) Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu ! ThierryP Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Je ne peux pas t'en dire plus. Peux-tu publier le fichier en retenant seulement les dates du fichier dans leur format actuel. Définis le traitement que tu veux apporter à ces dates. Je ne peux pas deviner la nature du problème avec les informations partielles que tu donnes. Pour la publication, utilise cette adresse : Cjoint.com et retourne-nous l'adresse obtenue ici. MichD
Le 22/08/19 à 08:58, ThierryP a écrit :
Merci pour les explications ! Toujours aussi pédagogue :-)
Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu !
ThierryP
Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Je ne peux pas t'en dire plus. Peux-tu publier le fichier en retenant
seulement les dates du fichier dans leur format actuel. Définis le
traitement que tu veux apporter à ces dates. Je ne peux pas deviner la
nature du problème avec les informations partielles que tu donnes.
Pour la publication, utilise cette adresse : Cjoint.com et retourne-nous
l'adresse obtenue ici.
Merci pour les explications ! Toujours aussi pédagogue :-) Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu ! ThierryP Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Je ne peux pas t'en dire plus. Peux-tu publier le fichier en retenant seulement les dates du fichier dans leur format actuel. Définis le traitement que tu veux apporter à ces dates. Je ne peux pas deviner la nature du problème avec les informations partielles que tu donnes. Pour la publication, utilise cette adresse : Cjoint.com et retourne-nous l'adresse obtenue ici. MichD
ThierryP
Tout va bien Denis !! Tes explications m'ont largement suffi à me dépêtrer de mon problème ! Encore merci, ThierryP
Tout va bien Denis !!
Tes explications m'ont largement suffi à me dépêtrer de mon problème !
Tout va bien Denis !! Tes explications m'ont largement suffi à me dépêtrer de mon problème ! Encore merci, ThierryP
MichD
Le 22/08/19 à 08:58, ThierryP a écrit :
Merci pour les explications ! Toujours aussi pédagogue :-) Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu ! ThierryP Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Ok je viens de comprendre : Tu as ceci dans des cellules d'un fichier, des dates se présentant de cette manière : 04.02.2019. À l'aide tu désires les transformer... Si la colonne B ne contient 50 lignes, évite d'utiliser la colonne complète dans des procédures, car dans certains cas, tu risques d'accroître le poids du fichier inutilement, et le temps de traitement. Suppose que tu as ces dates en B1:B6, sauf erreur, ta manière de procéder ne traite pas adéquatement les dates ayant un astérisque, ces dernières s'affichent toujours à gauche après traitement. Elles devraient toutes être à droite. 04.02.2019 13.02.2020 * 04.13.2021 04.02.2022 19.02.2020 * 20.02.2020 * Pour les transformer en date réelle avec le format désigné: '---------------------------------- Sub test() Dim X(), T(), A as Long With Range("B1:B6") 'à adapter X = .Value For Each elt In X a = a + 1 ReDim Preserve T(1 To a) T(a) = Replace(elt, ".", "/") Next .Value = "" .NumberFormat = "dd/MM/yyyy" .Value = T End With End Sub '---------------------------------- MichD
Le 22/08/19 à 08:58, ThierryP a écrit :
Merci pour les explications ! Toujours aussi pédagogue :-)
Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu !
ThierryP
Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Ok je viens de comprendre :
Tu as ceci dans des cellules d'un fichier, des dates se présentant de
cette manière : 04.02.2019. À l'aide tu désires les transformer...
Si la colonne B ne contient 50 lignes, évite d'utiliser la colonne
complète dans des procédures, car dans certains cas, tu risques
d'accroître le poids du fichier inutilement, et le temps de traitement.
Suppose que tu as ces dates en B1:B6, sauf erreur, ta manière de
procéder ne traite pas adéquatement les dates ayant un astérisque, ces
dernières s'affichent toujours à gauche après traitement. Elles
devraient toutes être à droite.
Pour les transformer en date réelle avec le format désigné:
'----------------------------------
Sub test()
Dim X(), T(), A as Long
With Range("B1:B6") 'à adapter
X = .Value
For Each elt In X
a = a + 1
ReDim Preserve T(1 To a)
T(a) = Replace(elt, ".", "/")
Next
.Value = ""
.NumberFormat = "dd/MM/yyyy"
.Value = T
End With
End Sub
'----------------------------------
Merci pour les explications ! Toujours aussi pédagogue :-) Justement le point vient d'un fichier exporté par une application métier, c'est pour cela que je dois transformer ces dates en un format reconnu ! ThierryP Le jeudi 22 août 2019 14:32:45 UTC+2, MichD a écrit :
Ok je viens de comprendre : Tu as ceci dans des cellules d'un fichier, des dates se présentant de cette manière : 04.02.2019. À l'aide tu désires les transformer... Si la colonne B ne contient 50 lignes, évite d'utiliser la colonne complète dans des procédures, car dans certains cas, tu risques d'accroître le poids du fichier inutilement, et le temps de traitement. Suppose que tu as ces dates en B1:B6, sauf erreur, ta manière de procéder ne traite pas adéquatement les dates ayant un astérisque, ces dernières s'affichent toujours à gauche après traitement. Elles devraient toutes être à droite. 04.02.2019 13.02.2020 * 04.13.2021 04.02.2022 19.02.2020 * 20.02.2020 * Pour les transformer en date réelle avec le format désigné: '---------------------------------- Sub test() Dim X(), T(), A as Long With Range("B1:B6") 'à adapter X = .Value For Each elt In X a = a + 1 ReDim Preserve T(1 To a) T(a) = Replace(elt, ".", "/") Next .Value = "" .NumberFormat = "dd/MM/yyyy" .Value = T End With End Sub '---------------------------------- MichD
... Non, à l'aide de MichD !!!!!!!! Finalement, je me suis servi de dateserial en bouclant sur la plage ! ActiveCell = DateSerial(Right(ActiveCell, 4), Mid(ActiveCell, 4, 2), Left(ActiveCell, 2)) ActiveCell.Offset(0, 2) = DateSerial(Right(ActiveCell.Offset(0, 2), 4 ), Mid(ActiveCell.Offset(0, 2), 4, 2), Left(ActiveCell.Offset(0, 2), 2)) Et tout se passe pour le mieux ! ThierryP
Le 22/08/19 à 10:00, MichD a écrit :
À l'aide
... À l'aide de VBA ... MichD
... Non, à l'aide de MichD !!!!!!!!
Finalement, je me suis servi de dateserial en bouclant sur la plage !
... Non, à l'aide de MichD !!!!!!!! Finalement, je me suis servi de dateserial en bouclant sur la plage ! ActiveCell = DateSerial(Right(ActiveCell, 4), Mid(ActiveCell, 4, 2), Left(ActiveCell, 2)) ActiveCell.Offset(0, 2) = DateSerial(Right(ActiveCell.Offset(0, 2), 4 ), Mid(ActiveCell.Offset(0, 2), 4, 2), Left(ActiveCell.Offset(0, 2), 2)) Et tout se passe pour le mieux ! ThierryP
Le 22/08/19 à 10:00, MichD a écrit :
À l'aide
... À l'aide de VBA ... MichD
MichD
Le 22/08/19 à 10:43, ThierryP a écrit :
... Non, à l'aide de MichD !!!!!!!! Finalement, je me suis servi de dateserial en bouclant sur la plage ! ActiveCell = DateSerial(Right(ActiveCell, 4), Mid(ActiveCell, 4, 2), Left(ActiveCell, 2)) ActiveCell.Offset(0, 2) = DateSerial(Right(ActiveCell.Offset(0, 2), 4), Mid(ActiveCell.Offset(0, 2), 4, 2), Left(ActiveCell.Offset(0, 2), 2)) Et tout se passe pour le mieux ! ThierryP
Le 22/08/19 à 10:00, MichD a écrit :
À l'aide
... À l'aide de VBA ... MichD
Si l'objectif est seulement de modifier le séparateur de date "." pour "./" sachant que le format de ces dates est JJ/MM/AAAA, cette formule, fonctionne très bien, de même que la tienne... Si tu veux boucler sur chacune des cellules : '---------------------- Sub Test1() Dim Rg As Range, C As Range Set Rg = Range("A1:A6") For Each C In Rg C.Value = DateValue(Application.Substitute(C, ".", "/")) Next Rg.NumberFormat = "DD/MM/YYYY" End Sub '---------------------- MichD
Le 22/08/19 à 10:43, ThierryP a écrit :
... Non, à l'aide de MichD !!!!!!!!
Finalement, je me suis servi de dateserial en bouclant sur la plage !
Si l'objectif est seulement de modifier le séparateur de date "." pour
"./" sachant que le format de ces dates est JJ/MM/AAAA, cette formule,
fonctionne très bien, de même que la tienne...
Si tu veux boucler sur chacune des cellules :
'----------------------
Sub Test1()
Dim Rg As Range, C As Range
Set Rg = Range("A1:A6")
For Each C In Rg
C.Value = DateValue(Application.Substitute(C, ".", "/"))
Next
Rg.NumberFormat = "DD/MM/YYYY"
... Non, à l'aide de MichD !!!!!!!! Finalement, je me suis servi de dateserial en bouclant sur la plage ! ActiveCell = DateSerial(Right(ActiveCell, 4), Mid(ActiveCell, 4, 2), Left(ActiveCell, 2)) ActiveCell.Offset(0, 2) = DateSerial(Right(ActiveCell.Offset(0, 2), 4), Mid(ActiveCell.Offset(0, 2), 4, 2), Left(ActiveCell.Offset(0, 2), 2)) Et tout se passe pour le mieux ! ThierryP
Le 22/08/19 à 10:00, MichD a écrit :
À l'aide
... À l'aide de VBA ... MichD
Si l'objectif est seulement de modifier le séparateur de date "." pour "./" sachant que le format de ces dates est JJ/MM/AAAA, cette formule, fonctionne très bien, de même que la tienne... Si tu veux boucler sur chacune des cellules : '---------------------- Sub Test1() Dim Rg As Range, C As Range Set Rg = Range("A1:A6") For Each C In Rg C.Value = DateValue(Application.Substitute(C, ".", "/")) Next Rg.NumberFormat = "DD/MM/YYYY" End Sub '---------------------- MichD
ThierryP
Infatigable Denis !!! Merci pour cette autre approche ! ThierryP
'---------------------- Sub Test1() Dim Rg As Range, C As Range Set Rg = Range("A1:A6") For Each C In Rg C.Value = DateValue(Application.Substitute(C, ".", "/")) Next Rg.NumberFormat = "DD/MM/YYYY" End Sub '---------------------- MichD
Infatigable Denis !!!
Merci pour cette autre approche !
ThierryP
'----------------------
Sub Test1()
Dim Rg As Range, C As Range
Set Rg = Range("A1:A6")
For Each C In Rg
C.Value = DateValue(Application.Substitute(C, ".", "/"))
Next
Rg.NumberFormat = "DD/MM/YYYY"
Infatigable Denis !!! Merci pour cette autre approche ! ThierryP
'---------------------- Sub Test1() Dim Rg As Range, C As Range Set Rg = Range("A1:A6") For Each C In Rg C.Value = DateValue(Application.Substitute(C, ".", "/")) Next Rg.NumberFormat = "DD/MM/YYYY" End Sub '---------------------- MichD