OVH Cloud OVH Cloud

Problème de date!!!!

9 réponses
Avatar
tip.tiptop
Bonjour,

Mon soucis:
j'ai crée un fichier Excel qui est la concaténation de plusieurs fichiers
provenant de sources différentes.
Dans chacun de ces fichiers il y a une ou plusieurs colonnes au format date.
Seulement la référence calendaire n'est pas la même.
La case calendrier depuis1904 est cochée dans certaibnes fichiers et pas
dans d'autres.
Il en résulte une belle cacophonie dans le fichier destination.

Comment m'affranchir du problème???

9 réponses

Avatar
Jacquouille
Bonjour
Excel considère les dates comme des nombres.
Le samedi 00 janvier 1900 étant le début.
Le dimanche 01/01/1900 est donc = à 1
Le vendredi 01/01/1904 est donc = à 1462.
Excepté l'ajout manuel de 1462 jours à tes dates encodées en calendrier 1904
pour en faire des dates "1900" ( ou l'inverse)....
Je ne vois pas comment Excel pourrait déterminer le calendrier de référence
automatiquement.....
Bonne chance
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"tip.tiptop" a écrit dans le message de news:
45aa0572$0$22811$
Bonjour,

Mon soucis:
j'ai crée un fichier Excel qui est la concaténation de plusieurs fichiers
provenant de sources différentes.
Dans chacun de ces fichiers il y a une ou plusieurs colonnes au format
date.
Seulement la référence calendaire n'est pas la même.
La case calendrier depuis1904 est cochée dans certaibnes fichiers et pas
dans d'autres.
Il en résulte une belle cacophonie dans le fichier destination.

Comment m'affranchir du problème???



Avatar
Modeste
Bonsour® Jacquouille avec ferveur ;o))) vous nous disiez :

Je ne vois pas comment Excel pourrait déterminer le calendrier de référence
automatiquement.....


MsgBox ActiveWorkbook.Date1904, vbInformation, "Ce classeur utilise le
calendrier 1904"


--
--
@+
;o)))

Avatar
Jacquouille
Ben voilà, YAPLUKA .....-)
Bonne fin de WE

--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

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

Bonsour® Jacquouille avec ferveur ;o))) vous nous disiez :

Je ne vois pas comment Excel pourrait déterminer le calendrier de
référence
automatiquement.....


MsgBox ActiveWorkbook.Date1904, vbInformation, "Ce classeur utilise le
calendrier 1904"


--
--
@+
;o)))





Avatar
Daniel
Bonsoir.
Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en modifiant
les dates) :

Sub Traite1904()
Dim c As Range, sh As Worksheet
If IsDate([A1]) Then Var = "date"
If ActiveWorkbook.Date1904 = True Then
For Each sh In Sheets
Var = sh.Name
For Each c In sh.UsedRange
If IsDate(c) And Left(c, 1) <> "=" Then
c = c + 1462
End If
Next c
Next sh
ActiveWorkbook.Date1904 = False
End If
End Sub

Cordialement.
Daniel
"tip.tiptop" a écrit dans le message de news:
45aa0572$0$22811$
Bonjour,

Mon soucis:
j'ai crée un fichier Excel qui est la concaténation de plusieurs fichiers
provenant de sources différentes.
Dans chacun de ces fichiers il y a une ou plusieurs colonnes au format
date.
Seulement la référence calendaire n'est pas la même.
La case calendrier depuis1904 est cochée dans certaibnes fichiers et pas
dans d'autres.
Il en résulte une belle cacophonie dans le fichier destination.

Comment m'affranchir du problème???



Avatar
Daniel
Oups. Déjà une modif :

Sub Traite1904()
Dim c As Range, sh As Worksheet
If ActiveWorkbook.Date1904 = True Then
On Error Resume Next
For Each sh In Sheets
For Each c In sh.UsedRange
If IsDate(c) And Left(c, 1) <> "=" Then
c = c + 1462
End If
Next c
Next sh
ActiveWorkbook.Date1904 = False
End If
End Sub

Cordialement.
Daniel
"Daniel" a écrit dans le message de news:
45aa6345$0$1533$
Bonsoir.
Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en
modifiant les dates) :

Sub Traite1904()
Dim c As Range, sh As Worksheet
If IsDate([A1]) Then Var = "date"
If ActiveWorkbook.Date1904 = True Then
For Each sh In Sheets
Var = sh.Name
For Each c In sh.UsedRange
If IsDate(c) And Left(c, 1) <> "=" Then
c = c + 1462
End If
Next c
Next sh
ActiveWorkbook.Date1904 = False
End If
End Sub

Cordialement.
Daniel
"tip.tiptop" a écrit dans le message de news:
45aa0572$0$22811$
Bonjour,

Mon soucis:
j'ai crée un fichier Excel qui est la concaténation de plusieurs fichiers
provenant de sources différentes.
Dans chacun de ces fichiers il y a une ou plusieurs colonnes au format
date.
Seulement la référence calendaire n'est pas la même.
La case calendrier depuis1904 est cochée dans certaibnes fichiers et pas
dans d'autres.
Il en résulte une belle cacophonie dans le fichier destination.

Comment m'affranchir du problème???







Avatar
Modeste
Bonsour® Daniel avec ferveur ;o))) vous nous disiez :

Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en modifiant
les dates) :


le fait d'utiliser le calendrier 1904 a 3 impacts :
le premier ce fameux écart de 1462 jours
le second ne pas prendre en compte le bug de février de l'année 1900
le troisieme , et celui qui me fait utiliser souvent cette option, permet le
traitement et l'affichage des horaires négatifs

c'est pourquoi dans ta macro il vaudrait mieux privilégier le test inverse et
plutot passer tous les classeurs concernés en calendrier 1904
ce n'est que mon humble avis !!!
;o)))

Sub Traite1904()
Dim c As Range, sh As Worksheet
If IsDate([A1]) Then Var = "date"
' ********** If ActiveWorkbook.Date1904 = True Then
If ActiveWorkbook.Date1904 = False Then
For Each sh In Sheets
Var = sh.Name
For Each c In sh.UsedRange
If IsDate(c) And Not HasFormula(c) Then
' ********** c = c + 1462
c = c - 1462
End If
Next c
Next sh
' ********** ActiveWorkbook.Date1904 = False
ActiveWorkbook.Date1904 = True
End If
End Sub


à propos de calendrier 1904 :
voir plus d'information sur le site de Frederic Sigonneau
Michel Gaboly a également posté ici quelque chose à ce sujet
voir éventuellement sur Excelabo.net
--
--
@+
;o)))

Avatar
Daniel
Bonsoir.
Ta réflexion, en me faisant relire le post original, attire mon attention
sur le fait que la macro doit être exécutée sur les classeurs AVANT
concaténation et non pas sur le fichier résultant. Quant à moi, sauf le cas
où l'on se sert de calcul d'horaire possiblement négatifs, je ne me sers
jamais de l'option origine 1904, pour être justement compatible avec le plus
grand nombre; mais effectivement, on peut très bien en la modifiant
légèrement s'en servir pour tout aligner sur l'année d'origine 1904.
Cordialement.
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Daniel avec ferveur ;o))) vous nous disiez :

Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en
modifiant
les dates) :


le fait d'utiliser le calendrier 1904 a 3 impacts :
le premier ce fameux écart de 1462 jours
le second ne pas prendre en compte le bug de février de l'année 1900
le troisieme , et celui qui me fait utiliser souvent cette option,
permet le traitement et l'affichage des horaires négatifs

c'est pourquoi dans ta macro il vaudrait mieux privilégier le test inverse
et plutot passer tous les classeurs concernés en calendrier 1904
ce n'est que mon humble avis !!!
;o)))

Sub Traite1904()
Dim c As Range, sh As Worksheet
If IsDate([A1]) Then Var = "date"
' ********** If ActiveWorkbook.Date1904 = True Then
If ActiveWorkbook.Date1904 = False Then
For Each sh In Sheets
Var = sh.Name
For Each c In sh.UsedRange
If IsDate(c) And Not HasFormula(c) Then
' ********** c = c + 1462
c = c - 1462
End If
Next c
Next sh
' ********** ActiveWorkbook.Date1904 = False
ActiveWorkbook.Date1904 = True
End If
End Sub


à propos de calendrier 1904 :
voir plus d'information sur le site de Frederic Sigonneau
Michel Gaboly a également posté ici quelque chose à ce sujet
voir éventuellement sur Excelabo.net
--
--
@+
;o)))





Avatar
Modeste
Bonsour® Daniel avec ferveur ;o))) vous nous disiez :

Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en modifiant
les dates) :


à propos de calendrier 1904 :
voir plus d'information sur le site de Frederic Sigonneau
http://frederic.sigonneau.free.fr/code/Calendriers/Calendrier1904.zip

http://frederic.sigonneau.free.fr/code/Calendriers/CorrectionOption1904.txt
Michel Gaboly a également posté ici quelque chose à ce sujet
http://minilien.com/?lvqdjYqv68

voir éventuellement sur Excelabo.net
http://excelabo.net/xl/calendriers.php#utilité1904

le même sur la FAQ EXCEL
http://dj.joss.free.fr/astuce0004.htm

--


--
--
@+
;o)))


Avatar
Daniel
Si je peux me permettre de modifier Frédéric Sigonneau, la macro à l'adresse
:
http://frederic.sigonneau.free.fr/code/Calendriers/CorrectionOption1904.txt
en ajoutant la ligne :
on error resume next
En effet "isdate" considère comme une date des cellules texte du genre "avr
4 2005" (peu fréquent, d'accord).
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Daniel avec ferveur ;o))) vous nous disiez :

Teste avec des pincettes la macro suivante (elle teste si le classeur
utilise 1904 comme date origine et rétablit 1900 comme origine en
modifiant
les dates) :


à propos de calendrier 1904 :
voir plus d'information sur le site de Frederic Sigonneau
http://frederic.sigonneau.free.fr/code/Calendriers/Calendrier1904.zip

http://frederic.sigonneau.free.fr/code/Calendriers/CorrectionOption1904.txt
Michel Gaboly a également posté ici quelque chose à ce sujet
http://minilien.com/?lvqdjYqv68

voir éventuellement sur Excelabo.net
http://excelabo.net/xl/calendriers.php#utilité1904

le même sur la FAQ EXCEL
http://dj.joss.free.fr/astuce0004.htm

--


--
--
@+
;o)))