IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Correspondance date Excel/VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut Correspondance date Excel/VBA
    Bonjour,

    Est-ce que quelqu'un pourrait expliquer pourquoi le code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim DateOutput as Date
    DateOutput = #2/4/2013 11:56:00 PM#
    For iRow = 1 to 10
    Worksheets(1).Cells(iRow,1) = DateOutput
    DateOutput = DateAdd("n", 2, DateOutput) 'incrémente la date de 2 minutes
    Next iRow
    ... ne donne pas le résultat:
    04.02.2013 23:56
    04.02.2013 23:58
    05.02.2013 00:00
    05.02.2013 00:02
    05.02.2013 00:04
    05.02.2013 00:06
    05.02.2013 00:08
    05.02.2013 00:10
    05.02.2013 00:12
    05.02.2013 00:14

    ... mais donne le résultat:
    04.02.2013 23:56
    04.02.2013 23:58
    04.02.2013 00:00
    05.02.2013 00:02
    05.02.2013 00:04
    05.02.2013 00:06
    05.02.2013 00:08
    05.02.2013 00:10
    05.02.2013 00:12
    05.02.2013 00:14

    En exécutant le code étape par étape, la valeur DateOutput dans la fenêtre "Variables locales" de VBA indique pourtant la date du 5/2/13 à la 3ème itération, et c'est celle du 4/2/13 qui est inscrite sur la feuille Excel...

    Merci pour votre aide!

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Excel manipule mal les dates... amuse toi donc à jouer avec des strings pour palier à ce problème. Ou fais un truc du genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub toto()
    Dim DateOutput As Date
    DateOutput = #2/5/2013 11:56:00 PM#
    For iRow = 1 To 10
    Worksheets(1).Cells(iRow, 3) = DateOutput
    DateOutput = DateAdd("s", 121, DateOutput) 'incrémente la date de 2 minutes
    Next iRow
    End Sub
    Puis à chaque 59 itérations vire 59 secondes

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Ca semble dû aux nombres à virgule flottante, qui n'ont pas toujours de représentation précise dans la mémoire. Certaines opérations pourraient avoir des résultats inattendus.

    Le code suivant semble corriger ton problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub tt()
    Dim DateOutput As Date
    DateOutput = #2/4/2013 11:56:00 PM#
    For iRow = 1 To 10
    Worksheets(1).Cells(iRow, 1) = DateOutput
    DateOutput = CDate(DateAdd("n", 2, DateOutput))  'incrémente la date de 2 minutes
     
    'If Minute(DateOutput) = 0 And Second(DateOutput) = 0 Then
     
     TheDateOutput = DateSerial(Year(DateOutput), Month(DateOutput), Day(DateOutput))
     TheTimeOutput = TimeSerial(Hour(DateOutput), Minute(DateOutput), Second(DateOutput))
     DateOutput = CDate(TheDateOutput & " " & TheTimeOutput)
     
    'End If
     
    Next iRow
    End Sub

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut
    En m'inspirant de la solution de EngueEngue, j'ai modifié le code de la façon suivante (et peu élégante), ce qui permet d'éviter le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub main()
     
    Dim DateOutput as Date
    DateOutput = #2/4/2013 11:56:00 PM#
    DateOutput = DateAdd("s", 1, DateOutput) 'ajoute à la date une seconde, qui sera retranchée plus bas
     
    For iRow = 1 to 10
    Worksheets(1).Cells(iRow,1) = DateOutput
    Worksheets(1).Cells(iRow,1) = Worksheets(1).Cells(iRow,1) - 1 / 24 / 3600 'enlève la seconde inscrite précédemment
    DateOutput = DateAdd("n", 2, DateOutput) 'incrémente la date de 2 minutes
    Next iRow
     
    End Sub
    Un grand merci pour votre aide!

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    L'erreur de minuit :

    'A minuit juste, 2 autres commandes qui ne causent pas l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub orig()
     
    Dim DateOutput As Date
     
    DateOutput = #2/4/2013 11:56:00 PM#
     
    For iRow = 1 To 10
     
     'A minuit juste, ces 2 commandes fonctionnent sans erreur
     
     Worksheets(2).Cells(iRow, 1) = CDate(DateValue(DateOutput) & " " & TimeValue(DateOutput))
     'Worksheets(2).Cells(iRow, 1) = CDbl(DateOutput)
     
     'A minuit juste, ces 2 commandes occasionnent une erreur de 24 heures sur la feuille Excel
     
     'Worksheets(2).Cells(iRow, 1) = DateOutput
     'Worksheets(2).Cells(iRow, 1) = CDate(DateOutput)
     
     
    DateOutput = CDate(DateAdd("n", 2, DateOutput)) 'incrémente la date de 2 minutes
    Next iRow
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel-VBA] relation date et jour de la semaine
    Par joeyd dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/02/2008, 19h45
  2. [Excel/VBA]Formatage de date
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/07/2007, 13h35
  3. [VBA-E]probleme affichage date excel a partir d'une DTPicker VBA [15/02/07]
    Par gromorice dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/02/2007, 17h05
  4. Correspondance formules excel et VBA
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 17h54
  5. [VBA-E] Compatibilité de Date dans VBA Excel
    Par dorschner dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/05/2006, 19h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo