A voir également:
- Pb de récupération de date sous excel et vba
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Convertisseur récupération de texte - Guide
8 réponses
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
29 janv. 2010 à 16:55
29 janv. 2010 à 16:55
Salut,
à priori je dirais que le problème se situe au niveau de ta transformation de la date (je récupere sans probleme un date stockée ds une cellule, pas de bug connu à ce niveau là) mais c'est difficile à vérifier sans voir ton code ou meme un classeur exemple (www.cjoint.com).....
à priori je dirais que le problème se situe au niveau de ta transformation de la date (je récupere sans probleme un date stockée ds une cellule, pas de bug connu à ce niveau là) mais c'est difficile à vérifier sans voir ton code ou meme un classeur exemple (www.cjoint.com).....
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
29 janv. 2010 à 17:16
29 janv. 2010 à 17:16
Re,
.Cells(i + j, k) recupere bien la valeur de la cellule meme si j'aurais préferé .Cells(i + j, k).value :)
Par contre tu convertis cette valeur via une fonction DateToString, peux-tu donner le code de cette fonction également ?
.Cells(i + j, k) recupere bien la valeur de la cellule meme si j'aurais préferé .Cells(i + j, k).value :)
Par contre tu convertis cette valeur via une fonction DateToString, peux-tu donner le code de cette fonction également ?
Salut,
Merci pour ta réponse ....
J'ai testé ton idée, qui parait plus propre en terme de code, effectivement. Mais, malheureusement pour moi, cela ne change rien ...
Je te files le bout de code de la fonction DateToString, mais je te confirmes quand même que le problème survient avant l'entrée dans la fonction ...
Function DateToString(d) As String
DateToString = d
If Not IsDate(d) Then Exit Function
Dim m As Integer: m = Month(d)
Dim j As Integer: j = Day(d)
DateToString = Year(d) & "-" & IIf(m < 10, "0", "") & m & "-" & IIf(j < 10, "0", "") & j
End Function
Merci d'avance ...
Merci pour ta réponse ....
J'ai testé ton idée, qui parait plus propre en terme de code, effectivement. Mais, malheureusement pour moi, cela ne change rien ...
Je te files le bout de code de la fonction DateToString, mais je te confirmes quand même que le problème survient avant l'entrée dans la fonction ...
Function DateToString(d) As String
DateToString = d
If Not IsDate(d) Then Exit Function
Dim m As Integer: m = Month(d)
Dim j As Integer: j = Day(d)
DateToString = Year(d) & "-" & IIf(m < 10, "0", "") & m & "-" & IIf(j < 10, "0", "") & j
End Function
Merci d'avance ...
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
1 févr. 2010 à 10:07
1 févr. 2010 à 10:07
Re,
chez moi en executant ton code ça fonctionne parfaitement......peux-tu stp mettre un classeur exemple sur www.cjoint.com, je n'arrive meme pas à reproduire ton pb...
chez moi en executant ton code ça fonctionne parfaitement......peux-tu stp mettre un classeur exemple sur www.cjoint.com, je n'arrive meme pas à reproduire ton pb...
OK.
Voici le lien ... https://www.cjoint.com/?cblxE8AkBt
Il te suffit de cliquer sur le bouton 'exporter tout' sur la 1ère feuille ... Ca va générer un fichier txt, dans le répertoire où tu as posé le fichier excel ...
Dans le fichier généré, on retrouve des lignes correspondantes à celles extraites depuis la feuille 'Briques'. Et c'est là qu'on voit le décalage entre les dates des 2 fichiers.
J'ai fait quelques tests avec plusieurs dates (tu les verras dans le fichier excel) et je pense avoir une petite idée. Il me semble que les dates erronées sont les dates antérieures au 01/03/1900 (Pb avec la gestion des années bissextiles du début du siècle puisqu'Excel excel compte les dates depuis le 1/1/1900 ???? )
Merci encore pour ton aide ...
Voici le lien ... https://www.cjoint.com/?cblxE8AkBt
Il te suffit de cliquer sur le bouton 'exporter tout' sur la 1ère feuille ... Ca va générer un fichier txt, dans le répertoire où tu as posé le fichier excel ...
Dans le fichier généré, on retrouve des lignes correspondantes à celles extraites depuis la feuille 'Briques'. Et c'est là qu'on voit le décalage entre les dates des 2 fichiers.
J'ai fait quelques tests avec plusieurs dates (tu les verras dans le fichier excel) et je pense avoir une petite idée. Il me semble que les dates erronées sont les dates antérieures au 01/03/1900 (Pb avec la gestion des années bissextiles du début du siècle puisqu'Excel excel compte les dates depuis le 1/1/1900 ???? )
Merci encore pour ton aide ...
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 11:44
1 févr. 2010 à 11:44
toutes les années ne sont pas compté
mais est ce que tu es sur que ce iif marche en vba Oo ? ca ressemble a de la formule excel
mais est ce que tu es sur que ce iif marche en vba Oo ? ca ressemble a de la formule excel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je viens de voir avec mon responsable, et il est d'accord avec moi sur un point : on va se débrouiller pour ne pas utiliser de dates avant le 1/3/1900 .... Et on aura plus le problème....
Je vais donc cesser de vous importuner, et je vous remercie tous d'avoir consacré du temps à mon souci ...
Certes, il n'est pas vraiment résolu ... Le monde du travail ne demandant pas des explications mais des objectifs à atteindre, je vais continuer mon développement ....
En tout cas, merci à tous (surtout pour tompols) ...
A charge de revanche ....
Je vais donc cesser de vous importuner, et je vous remercie tous d'avoir consacré du temps à mon souci ...
Certes, il n'est pas vraiment résolu ... Le monde du travail ne demandant pas des explications mais des objectifs à atteindre, je vais continuer mon développement ....
En tout cas, merci à tous (surtout pour tompols) ...
A charge de revanche ....
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
1 févr. 2010 à 12:25
1 févr. 2010 à 12:25
salut,
effectivement, le probleme n'apparait qu'avant mars 1900, 1900 etant un cas particulier du calendrier :
source : http://www.ac-nice.fr/clea/lunap/html/Calendriers/CalendEnBref.html
"Le mois de février 1900 a compté 28 jours, l'année 1900 n'a donc pas été bissextile" => excel ne doit pas etre au courant puisque le 29/02/1900 est une date valide, par contre en vba, si on determine le dernier jour du mois de fevrier 1900, il donne bien le 28. Félicitations, tu viens de découvrir un 'bug' ! :s
reste une question qd meme : comment se fait-il que tu manipules des dates en 1900 ???
effectivement, le probleme n'apparait qu'avant mars 1900, 1900 etant un cas particulier du calendrier :
Le calendrier grégorien Le concile de Nicée en 325 avait fixé ainsi fixer la date de Pâques : Pâques est le dimanche qui suit le 14ème jour de la Lune qui atteint cet âge au 21 mars ou immédiatement après. Le 21 mars devait correspondre à l'équinoxe de printemps. Mais en 1582, il tombe le 11 mars. Le pape Grégoire XIII fait réformer le calendrier. Deux décisions sont prises : * 1) 10 jours sont supprimés : le lendemain du jeudi 4 octobre 1582 fut le vendredi 15 octobre 1582 * 2) Les années restent bissextiles tous les quatre ans à cette exception près : les années séculaires (se terminant par 00) sont communes sauf celles dont le nombre de siècles est divisible par 4. Ainsi 1700, 1800, 1900 n'ont pas été bissextiles alors que 1600 et 2000 l'ont été. Le mois de février 1900 a compté 28 jours, l'année 1900 n'a donc pas été bissextile. Par contre 2000 a été bissextile mais 2100, 2200, 2300 ne le seront pas. Les autres années multiples de 4 (2004, 2008, 2012, 2016…) restent bissextiles comme dans le calendrier julien.
source : http://www.ac-nice.fr/clea/lunap/html/Calendriers/CalendEnBref.html
"Le mois de février 1900 a compté 28 jours, l'année 1900 n'a donc pas été bissextile" => excel ne doit pas etre au courant puisque le 29/02/1900 est une date valide, par contre en vba, si on determine le dernier jour du mois de fevrier 1900, il donne bien le 28. Félicitations, tu viens de découvrir un 'bug' ! :s
reste une question qd meme : comment se fait-il que tu manipules des dates en 1900 ???
Merci pour ces infos ...
Quand à ta question sur le fait d'utiliser une date en 1900, c'est une norme dans ma boite. Pour certaines tables de 'typologies', on utilise des dates de validité. Et pour ne pas avoir à se poser de questions, on utilise par défaut une date de début fixée au 1/1/1900 ... Je travaille dans une "mutuelle/caisse de retraite" et on peut avoir des personnes dans notre système qui sont nés il y a fort fort longtemps ... Donc, pour pouvoir gérer tous les cas, on utilise des dates assez anciennes ....
Je suis plutot un développeur Cobol/Java/DB2, et on m'a collé ce fichier Excel à écrire, alors que je n'ai jamais touché au VBA. C'est un véritable challenge pour moi ...
En tout cas, merci beaucoup pour ton aide et le temps précieux que tu m'as fait gagner en prenant sur le tien ...
Quand à ta question sur le fait d'utiliser une date en 1900, c'est une norme dans ma boite. Pour certaines tables de 'typologies', on utilise des dates de validité. Et pour ne pas avoir à se poser de questions, on utilise par défaut une date de début fixée au 1/1/1900 ... Je travaille dans une "mutuelle/caisse de retraite" et on peut avoir des personnes dans notre système qui sont nés il y a fort fort longtemps ... Donc, pour pouvoir gérer tous les cas, on utilise des dates assez anciennes ....
Je suis plutot un développeur Cobol/Java/DB2, et on m'a collé ce fichier Excel à écrire, alors que je n'ai jamais touché au VBA. C'est un véritable challenge pour moi ...
En tout cas, merci beaucoup pour ton aide et le temps précieux que tu m'as fait gagner en prenant sur le tien ...
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
1 févr. 2010 à 13:05
1 févr. 2010 à 13:05
tu pourrai considérer que toutes les dates sont en type texte et utiliser la fonction mid pour traiter les différentes valeur (cherche mid dans l'aide, ca pourrai t'etre utile)
Merci Garion28 ...
Mais comme je l'ai expliqué, je ne vais pas passer plus de temps sur ce bug et je vais laisser mon fichier excel comme il est ... Mon responsable ne tient pas trop à ce que je perde plus de temps ...
Même si on a une norme générale sur ce 1/1/1900, elle est facilement contournable dés que le besoin s'en fait ressentir. Donc, je vais utiliser une date plus récente et ça contentera mon cher chef ... et moi itou ...
Merci quand même ...
A+.
Mais comme je l'ai expliqué, je ne vais pas passer plus de temps sur ce bug et je vais laisser mon fichier excel comme il est ... Mon responsable ne tient pas trop à ce que je perde plus de temps ...
Même si on a une norme générale sur ce 1/1/1900, elle est facilement contournable dés que le besoin s'en fait ressentir. Donc, je vais utiliser une date plus récente et ça contentera mon cher chef ... et moi itou ...
Merci quand même ...
A+.
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
1 févr. 2010 à 13:44
1 févr. 2010 à 13:44
Re,
sinon si tu veux garder cette convention "01/01/1900" tu peux tjs le gerer ds ta fonction datetostring, genre if date < 01/03/1900 then date+1 else date....
sinon si tu veux garder cette convention "01/01/1900" tu peux tjs le gerer ds ta fonction datetostring, genre if date < 01/03/1900 then date+1 else date....
29 janv. 2010 à 17:07
Mais le souci se pose avant même que je commence à formater la date. C'est vraiment la récupération depuis la cellule qui génère l'erreur.
Voici le bout de code où cela se passe (Je ne suis pas sur que cela soit trés lisible, mais la macro compète est assez longue car elle permet d'extraire toutes les données de la feuille en testant leur types, en faiisant des controles, etc .. tout cela pour les exporter vers un fichier texte ...)
With Worksheets(feuille)
Dim l As Integer: l = .Cells(3, k)
If Left(.Cells(j - 1, k), 3) = "DT-" And Right(.Cells(j - 1, k), 5) <> "-NULL" Then
t = DateToString(.Cells(i + j, k))
If Len(t) < l Then t = t & Space(l - Len(t))
Else 'ce n'est donc pas une date
...
...
J'ai mis en gras l'instruction qui me permet de récupérer la date ...
Merci d'avance ...