Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

aide pour différence dates Excel et VBA

6 réponses
Avatar
Greffier
Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en VBA
par les instructions suivantes ci-dessous, et un tableau des valeurs VBA. Je
récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je suis
preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois pas
être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--

6 réponses

Avatar
michdenis
Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre d'un bouquin !

En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les options
régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en surimpression,
tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news: %

Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en VBA
par les instructions suivantes ci-dessous, et un tableau des valeurs VBA. Je
récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je suis
preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois pas
être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--
Avatar
michdenis
erratum à corriger :

| La meilleure méthode de transmettre une date à excel
| est l'utilisation de la fonction DateValue()

Évidemment je parlais de la fonction DateSerial()


Salutations!


"michdenis" a écrit dans le message de news:
Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre d'un bouquin !

En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les options
régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en surimpression,
tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news: %

Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en VBA
par les instructions suivantes ci-dessous, et un tableau des valeurs VBA. Je
récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je suis
preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois pas
être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--
Avatar
Greffier
Bonjour michdenis,

Merci pour la réponse.

Dans mon panneau de configuration j'ai bien jj/mm/aa.
La ligne Excel réceptrice est bien en format date jj/mm/aa.
Comme je l'ai indiqué plus loin, la transformation a lieu lorsque je mets en
VBA dans la cellule(cells) la valeur comprise dans la table.
Alors comment employer dans l'exemple que j'ai indiqué les fonctions
datevalue or dateserial ... autrement dit comment dans la ligne qui suit
comment m'y prendre sachant que la table a les bonnes valeurs, et la cellule
réceptrice dans Excel inverse parfois le jour et le mois.

Cells(Lig, Col) = TableAbscissesDates(i)

Je sais que je vais être critiqué dans le groupe pour demander de faire les
2 ou 3 lignes de programmation.

Mais, j'espère toujours dans la compréhension, car j'ai retourné le problème
dans tous les sens.

Cordialement,

Greffier.



"michdenis" a écrit dans le message de
news:e%
erratum à corriger :

| La meilleure méthode de transmettre une date à excel
| est l'utilisation de la fonction DateValue()

Évidemment je parlais de la fonction DateSerial()


Salutations!


"michdenis" a écrit dans le message de news:


Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre d'un
bouquin !


En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les options
régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en surimpression,
tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news:
%


Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en
VBA

par les instructions suivantes ci-dessous, et un tableau des valeurs VBA.
Je

récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je
suis

preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois
pas

être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--







Avatar
michdenis
Bonjour Greffier,

A ) dans ta procédure :
| If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then

Si ton intention est de testé si chacune des cellules représente une date,
tu dois écrire :
if IsDate(Cells(DateDuPanier, c)) and _
IsDate(Cells(DateDuPanier, c +1)) then

B ) Si ta variable "DateEnCours" reçoit expressément des dates
Pourquoi ne pas avoir déclaré ta variable en début de procédure :
Dim DateEnCours As Date

C ) Si ta cellule source représente vraiment une date et est dans un
format date qui est congruent avec le format date du panneau de
configuration, il n'y a aucune raison que VBA transforme la valeur
de cette date en autre chose de ce qu'elle est.

D ) Dans ton exemple, tes dates voyage d'abord dans une variable dont
le "type" n'est pas défini...pour se retrouver dans un tableau (array)
en subissant je ne sais pas trop qu'elle traitement ...
pour revenir dans la feuille de calcul...as-tu essayé cette ligne de code

En lieu et place de ceci :
Cells(Lig, Col) = TableAbscissesDates(i)

Remplace par cela :
Cells(Lig, Col) = cdate(TableAbscissesDates(i))

L'explication plausible, la donnée dans ton tableau n'est plus une date
mais une chaine de caractère qui représente une date. C'est
l'équivalent à ceci :

Dim D as Date
8 juin 2005
D = "08/06/05" 'Information dans ton tableau
Si tu renvoies directement l'information de la variable D qui
est une chaîne de caractère (déclaré String) dans une cellule,
VBA s'empare de la chaîne de caractère, s'aperçoit que la
donnée répond à ses critères de la définition d'une date et
la transforme en format Américain MM/JJ/AAAA
lorsque vient le temps de la transférer à la cellule
(VBA lorsqu'il n'a pas d'autres informations, travaille
seulement avec le format américain.- 6 août 2005)
Cells("E1") = D

Si tu utilises Cells("E1") = cdate(D) , tu dis à excel d'utiliser
le format du panneau de configuration pour analyser la donnée
et cela devrait retourner dans la cellule la bonne valeur.


Salutations!





"Greffier" a écrit dans le message de news: %
Bonjour michdenis,

Merci pour la réponse.

Dans mon panneau de configuration j'ai bien jj/mm/aa.
La ligne Excel réceptrice est bien en format date jj/mm/aa.
Comme je l'ai indiqué plus loin, la transformation a lieu lorsque je mets en
VBA dans la cellule(cells) la valeur comprise dans la table.
Alors comment employer dans l'exemple que j'ai indiqué les fonctions
datevalue or dateserial ... autrement dit comment dans la ligne qui suit
comment m'y prendre sachant que la table a les bonnes valeurs, et la cellule
réceptrice dans Excel inverse parfois le jour et le mois.

Cells(Lig, Col) = TableAbscissesDates(i)

Je sais que je vais être critiqué dans le groupe pour demander de faire les
2 ou 3 lignes de programmation.

Mais, j'espère toujours dans la compréhension, car j'ai retourné le problème
dans tous les sens.

Cordialement,

Greffier.



"michdenis" a écrit dans le message de
news:e%
erratum à corriger :

| La meilleure méthode de transmettre une date à excel
| est l'utilisation de la fonction DateValue()

Évidemment je parlais de la fonction DateSerial()


Salutations!


"michdenis" a écrit dans le message de news:


Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre d'un
bouquin !


En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les options
régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en surimpression,
tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news:
%


Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en
VBA

par les instructions suivantes ci-dessous, et un tableau des valeurs VBA.
Je

récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je
suis

preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois
pas

être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--







Avatar
Greffier
Bonjour michdenis,

A - la date est bien située sur 2 colonnes avec le format jj-mm-aaaa

B - J'ai essayé votre solution "As Date". Elle marche les dates arrivent
correctement sur la ligne et la colonne désirés.
Mais les graphiques qui représentent des histogrammes empilés
deviennent des histogrammes mais changent de conformation. Ils sont devenus
unilignes et sans couleurs différentes. Et même lorsque j'examine l'axe des
abscisses par l'onglet échelle, celle-ci a changé d'aspect, et de même la
police qui est devenue jj-mm-aaa. Les valeurs sur l'axe des abscisses ont
elles-mêmes changées, et sont devenues jj-mmm-aaaa au lieu d'être restées
jj/mm/aa.

C - Ma source normale dans les graphiques est en rapport avec mes
paramètres régionaux : jj/mm/aa.

D - J'ai essayé cette solution mais j'ai les mêmes erreurs dans les
graphiques.

En tout cas, les solution B et D marchent. Je vais creuser, et voir pourquoi
les graphiques se transforment.

Merci tout de même, il doit y avoir une faille dans l'aller venue entre les
tableaux, les calculs en VBA, et le retour vers les graphiques. Toutes les
données sont décrites avec la fonction décaler.

RE-merci, je vais parcourir tous les moteurs connus pour trouver une
explication.

Cordialement,

Greffier.


"michdenis" a écrit dans le message de
news:
Bonjour Greffier,

A ) dans ta procédure :
| If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then

Si ton intention est de testé si chacune des cellules représente une date,
tu dois écrire :
if IsDate(Cells(DateDuPanier, c)) and _
IsDate(Cells(DateDuPanier, c +1)) then

B ) Si ta variable "DateEnCours" reçoit expressément des dates
Pourquoi ne pas avoir déclaré ta variable en début de procédure :
Dim DateEnCours As Date

C ) Si ta cellule source représente vraiment une date et est dans un
format date qui est congruent avec le format date du panneau de
configuration, il n'y a aucune raison que VBA transforme la valeur
de cette date en autre chose de ce qu'elle est.

D ) Dans ton exemple, tes dates voyage d'abord dans une variable dont
le "type" n'est pas défini...pour se retrouver dans un tableau
(array)

en subissant je ne sais pas trop qu'elle traitement ...
pour revenir dans la feuille de calcul...as-tu essayé cette ligne de
code


En lieu et place de ceci :
Cells(Lig, Col) = TableAbscissesDates(i)

Remplace par cela :
Cells(Lig, Col) = cdate(TableAbscissesDates(i))

L'explication plausible, la donnée dans ton tableau n'est plus une date
mais une chaine de caractère qui représente une date. C'est
l'équivalent à ceci :

Dim D as Date
8 juin 2005
D = "08/06/05" 'Information dans ton tableau
Si tu renvoies directement l'information de la variable D qui
est une chaîne de caractère (déclaré String) dans une cellule,
VBA s'empare de la chaîne de caractère, s'aperçoit que la
donnée répond à ses critères de la définition d'une date et
la transforme en format Américain MM/JJ/AAAA
lorsque vient le temps de la transférer à la cellule
(VBA lorsqu'il n'a pas d'autres informations, travaille
seulement avec le format américain.- 6 août 2005)
Cells("E1") = D

Si tu utilises Cells("E1") = cdate(D) , tu dis à excel d'utiliser
le format du panneau de configuration pour analyser la donnée
et cela devrait retourner dans la cellule la bonne valeur.


Salutations!





"Greffier" a écrit dans le message de news:
%

Bonjour michdenis,

Merci pour la réponse.

Dans mon panneau de configuration j'ai bien jj/mm/aa.
La ligne Excel réceptrice est bien en format date jj/mm/aa.
Comme je l'ai indiqué plus loin, la transformation a lieu lorsque je mets
en

VBA dans la cellule(cells) la valeur comprise dans la table.
Alors comment employer dans l'exemple que j'ai indiqué les fonctions
datevalue or dateserial ... autrement dit comment dans la ligne qui suit
comment m'y prendre sachant que la table a les bonnes valeurs, et la
cellule

réceptrice dans Excel inverse parfois le jour et le mois.

Cells(Lig, Col) = TableAbscissesDates(i)

Je sais que je vais être critiqué dans le groupe pour demander de faire
les

2 ou 3 lignes de programmation.

Mais, j'espère toujours dans la compréhension, car j'ai retourné le
problème

dans tous les sens.

Cordialement,

Greffier.



"michdenis" a écrit dans le message de
news:e%
erratum à corriger :

| La meilleure méthode de transmettre une date à excel
| est l'utilisation de la fonction DateValue()

Évidemment je parlais de la fonction DateSerial()


Salutations!


"michdenis" a écrit dans le message de news:


Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre
d'un


bouquin !

En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les options
régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en surimpression,
tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news:
%


Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date en
VBA

par les instructions suivantes ci-dessous, et un tableau des valeurs
VBA.


Je
récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je
suis

preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne dois
pas

être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la solution.

Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--












Avatar
Greffier
Bonjour Michdenis,

Tout d'abord je vous remercie pour tous vos conseils.
J'ai adopté la méthode "As Date", et j'ai réécrit une séquence pour mettre à
jour les axes des abscisses.
Tout a fonctionné.
Ensuite, j'ai examiné la brochure de first interactive sur ce type d'erreur,
qui conseille de mettre la barre des abscisses en non automatique, s'il y a
des "trous" dans les dates soit "catégories" et cela marche.
Donc j'ai enlevé la séquence VBA.

Merci pour vos conseils et vos solutions que je conserve .... pour l'avenir.

Greffier.





"Greffier" a écrit dans le message de
news:%23up$
Bonjour michdenis,

A - la date est bien située sur 2 colonnes avec le format jj-mm-aaaa

B - J'ai essayé votre solution "As Date". Elle marche les dates
arrivent

correctement sur la ligne et la colonne désirés.
Mais les graphiques qui représentent des histogrammes empilés
deviennent des histogrammes mais changent de conformation. Ils sont
devenus

unilignes et sans couleurs différentes. Et même lorsque j'examine l'axe
des

abscisses par l'onglet échelle, celle-ci a changé d'aspect, et de même la
police qui est devenue jj-mm-aaa. Les valeurs sur l'axe des abscisses ont
elles-mêmes changées, et sont devenues jj-mmm-aaaa au lieu d'être restées
jj/mm/aa.

C - Ma source normale dans les graphiques est en rapport avec mes
paramètres régionaux : jj/mm/aa.

D - J'ai essayé cette solution mais j'ai les mêmes erreurs dans les
graphiques.

En tout cas, les solution B et D marchent. Je vais creuser, et voir
pourquoi

les graphiques se transforment.

Merci tout de même, il doit y avoir une faille dans l'aller venue entre
les

tableaux, les calculs en VBA, et le retour vers les graphiques. Toutes les
données sont décrites avec la fonction décaler.

RE-merci, je vais parcourir tous les moteurs connus pour trouver une
explication.

Cordialement,

Greffier.


"michdenis" a écrit dans le message de
news:
Bonjour Greffier,

A ) dans ta procédure :
| If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then

Si ton intention est de testé si chacune des cellules représente une
date,


tu dois écrire :
if IsDate(Cells(DateDuPanier, c)) and _
IsDate(Cells(DateDuPanier, c +1)) then

B ) Si ta variable "DateEnCours" reçoit expressément des dates
Pourquoi ne pas avoir déclaré ta variable en début de procédure :
Dim DateEnCours As Date

C ) Si ta cellule source représente vraiment une date et est dans un
format date qui est congruent avec le format date du panneau de
configuration, il n'y a aucune raison que VBA transforme la valeur
de cette date en autre chose de ce qu'elle est.

D ) Dans ton exemple, tes dates voyage d'abord dans une variable dont
le "type" n'est pas défini...pour se retrouver dans un tableau
(array)

en subissant je ne sais pas trop qu'elle traitement ...
pour revenir dans la feuille de calcul...as-tu essayé cette ligne
de


code

En lieu et place de ceci :
Cells(Lig, Col) = TableAbscissesDates(i)

Remplace par cela :
Cells(Lig, Col) = cdate(TableAbscissesDates(i))

L'explication plausible, la donnée dans ton tableau n'est plus une date
mais une chaine de caractère qui représente une date. C'est
l'équivalent à ceci :

Dim D as Date
8 juin 2005
D = "08/06/05" 'Information dans ton tableau
Si tu renvoies directement l'information de la variable D qui
est une chaîne de caractère (déclaré String) dans une cellule,
VBA s'empare de la chaîne de caractère, s'aperçoit que la
donnée répond à ses critères de la définition d'une date et
la transforme en format Américain MM/JJ/AAAA
lorsque vient le temps de la transférer à la cellule
(VBA lorsqu'il n'a pas d'autres informations, travaille
seulement avec le format américain.- 6 août 2005)
Cells("E1") = D

Si tu utilises Cells("E1") = cdate(D) , tu dis à excel d'utiliser
le format du panneau de configuration pour analyser la donnée
et cela devrait retourner dans la cellule la bonne valeur.


Salutations!





"Greffier" a écrit dans le message de news:
%

Bonjour michdenis,

Merci pour la réponse.

Dans mon panneau de configuration j'ai bien jj/mm/aa.
La ligne Excel réceptrice est bien en format date jj/mm/aa.
Comme je l'ai indiqué plus loin, la transformation a lieu lorsque je
mets


en
VBA dans la cellule(cells) la valeur comprise dans la table.
Alors comment employer dans l'exemple que j'ai indiqué les fonctions
datevalue or dateserial ... autrement dit comment dans la ligne qui suit
comment m'y prendre sachant que la table a les bonnes valeurs, et la
cellule

réceptrice dans Excel inverse parfois le jour et le mois.

Cells(Lig, Col) = TableAbscissesDates(i)

Je sais que je vais être critiqué dans le groupe pour demander de faire
les

2 ou 3 lignes de programmation.

Mais, j'espère toujours dans la compréhension, car j'ai retourné le
problème

dans tous les sens.

Cordialement,

Greffier.



"michdenis" a écrit dans le message de
news:e%
erratum à corriger :

| La meilleure méthode de transmettre une date à excel
| est l'utilisation de la fonction DateValue()

Évidemment je parlais de la fonction DateSerial()


Salutations!


"michdenis" a écrit dans le message de news:


Bonjour Greffier,

Pour tout expliquer sur les dates ... ça prendrait plus d'un chapitre
d'un


bouquin !

En résumé, essayons ceci :

Voici une date : 06-05-07
Est-ce que tu peux me dire si cette date représente :
6 mai 2007 Format jour / mois / année
OU
7 mai 2006 Format année / mois / jour
OU
5 juin 2007 Format mois / jour / année

Comme il existe plusieurs formats pour une même date, Excel a besoin
d'aide. Pour ce faire, il utilise les informations contenues les
options



régionales dans le panneau de configuration de Windows.

Selon la langue que tu as définie dans le panneau de configuration,
Windows te propose dans la liste déroulante un certain nombre
de format par défaut que peux prendre les dates.

En VBA, quand tu appelles une fonction de date comme :
Cdate() ou DateValue(), ces fonctions utilisent le format "Date"
contenu dans le panneau de configuration pour analyser la donnée
"date".

Pour illustrer ce qui précède, un petit exemple :

Dim x As Date
x = "10/2/05"
Cells(2, 3) = x

Si ton format dans ton panneau de configuration est :
jj / mm / aa -> la cellule affiche : 10/02/05

Si ton format dans ton panneau de configuration est :
aa / mm / jj -> la cellule affiche 05/02/10 -> 5 février 2010

Si tu exécutes les quelques lignes de code pas à pas, et que tu passes
le curseur au-dessus de la variable x , dans la bulle en
surimpression,



tu observes toujours x = 10/2/05 que ce soit l'un ou l'autre format
dans le panneau de configuration.

CEPENDANT, si tu oses ajouter une ligne de code et que tu as
dans ton panneau de configuration un format date :
année/mois/jour

Dim x As Date, b as Date
x = "10/2/05"
b = x -10 ' enlève 10 jours à la date...
En surimpression tu as : b = 10/01/26
on peut donc déduire qu'excel a lu la date
source 10/02/05 comme étant le 5 février 2010

Si tu répètes la même chose mais que dans le panneau de
configuration de windows, tu as un format de JJ / MM / AA
En surimpression, tu auras b = 31/01/05

En conséquence, bien que le x semble (affiche dans la bulle
en surimpression la même donnée), dans les faits, Excel (vba)
a utilisé le format "date" du panneau de configuration pour
déduire la date à laquelle tu faisait référence.

Comme pour ajouter un peu à la confusion, Excel (vba) est
capable de certains automatismes concernant la présentation
des dates que l'usager peut utiliser. Exemple :

Panneau de configuration : Format date : jj / mm / aa

Si excel était stricte dans son application, cette ligne de
code provoquerait une erreur
la date 5 du 25 ième mois de l'année 2005 n'existe pas.
a = Cdate("5/25/2005")
Les automatismes d'excel fait qu'il retourne à l'usager :
25 /05/05 -> 25 mai 2005

Pourquoi ? Parce qu'en VBA, Excel travaille toujours
avec le format Américain qui est : Mois / jour / année.
VBA est un language de programmation développé par
des américains, et, ils ont utilisé dans le code les
"paramètres locaux" en application aux USA.

Comme c'est une machine, lorsque tu lui as présenté la
date "5/25/2005" , il était en pays de connaissance et il s'est
dit un job de moins... l'usager m'a donné la date dans le
format que je comprends le mieux, Quelle gentillesse ?

Conclusion : Lorsque tu travailles en VBA avec les dates,
il faut être drôlement prudent sur la donnée et la manière
que l'on lui donne.

La meilleure méthode de transmettre une date à excel
est l'utilisation de la fonction DateValue() qui fait fi du
format date du panneau de configuration.
Comme chaque composante (année, mois, jour) de la
fonction est spécifiée dans les paramètres de la fonction,
cela ne reste aucune place à Excel (vba) à l'interprétation.

Ton application pourra être ouvert sur différents ordinateurs,
et sans égard aux paramètres locaux de la machine, excel
comprendra.

En espérant que cela t'aidera à résoudre ton problème !
;-))


Salutations!





"Greffier" a écrit dans le message de news:
%


Bonsoir,

Qui pourrait m'expliquer pourquoi, lorsque j'ai une date dans Excel(ex
03-01-2006 : feuille Excel) et que je cherche à récupérer cette date
en



VBA
par les instructions suivantes ci-dessous, et un tableau des valeurs
VBA.


Je
récupère en fait 01/03/06.


Alors que si la date Excel est 17-01-2006, je récupère bien 17/01/06.

Cela reste un mystère que j'aimerais bien résoudre.
Aussi, si vous avez une solution pour bien récupérer la bonne date, je
suis

preneur...

Je vous remercie pour toutes vos réponses, car je pense que je ne
dois



pas
être le seul dans ce cas.

VBA confond-il date française et anglaise, et quelle en est la
solution.




Greffier.

Voici ma programmation :

Dim DateDuPanier As Integer
Dim colonne As Object
Dim c As Long
Dim TableAbscissesDates() As Variant
Dim i As Integer
*
*
For Each colonne In ActiveSheet.UsedRange.Columns
c = colonne.Column
*
*
If IsDate(Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)) Then
DateEnCours = Cells(DateDuPanier, c) & Cells(DateDuPanier, c + 1)
*
Debug.Print " VBA 1 " ; DateEnCours
'-----dates OK *
ReDim Preserve TableAbscissesDates(Compteur)
*
TableAbscissesDates(Compteur) = DateEnCours
Debug.Print " VBA 2 " ; TableAbscissesDates(Compteur)
'-----dates OK *

*
Cells(Lig, Col) = TableAbscissesDates(i)
Debug.Print " VBA 3 "; TableAbscissesDates(i)
'-----dates OK
Debug.Print " VBA 4 "; Cells(Lig, Col)
'-----dates ##


Et les résultats :



Feuille excel Vba 1 Vba 2 Vba 3 Vba 4
18-10-2005 18/10/05 Id Id Id
25-10-2005 25/10/05 Id Id Id
08-11-2005 08/11/05 Id Id 11/08/05
15-11-2005 15/11/05 Id Id Id
22-11-2005 22/11/05 Id Id Id
29-11-2005 29/11/05 Id Id Id
06-12-2005 06/11/05 Id Id 12/06/05
13-12-2005 13/12/05 Id Id Id
03-01-2006 03/01/06 Id Id 01/03/06
10-01-2006 10/01/06 Id Id 01/10/06
17-01-2006 17/01/06 Id Id Id


JE suis à votre disposition pour toutes explications.


--