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 :

Problème de date en VBA [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut Problème de date en VBA
    Bonjour,

    Dans cette procédure, je passe en revue un certain nombre de date calculée à partir d'une date initiale et incrémentée à chaque passage. J'ai besoin de savoir si cette date est un jour férié ou non. Je dispose donc dans une feuille de la liste des jours fériés, et j'utilise la fonction FIND

    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
                 Option Explicit
    Dim DateEnCours As Date
    Dim DateFin As Date
    Dim c As Range
    Sub recherche()
     
        DateEnCours = CDate("01/01/2010")
        DateFin = CDate("20/01/2010")
     
        Do While DateEnCours < DateFin
     
            Set c = Sheets("JoursFériés").Columns(1).Cells.Find(what:=DateEnCours)
                If Not c Is Nothing Then
                    MsgBox DateEnCours & " FERIE"
                Else
                    MsgBox DateEnCours & " OUVRE"
                End If
            DateEnCours = DateEnCours + 1
        Loop
    End Sub
    La liste des jours fériés dans la feuille JoursFériés est la suivante :

    Jour
    14/07/2008
    15/08/2008
    11/11/2008
    25/12/2008
    01/01/2009
    13/04/2009
    01/05/2009
    08/05/2009
    21/05/2009
    01/06/2009
    14/07/2009
    15/08/2009
    01/11/2009
    11/11/2009
    25/12/2009
    01/01/2010
    05/04/2010
    01/05/2010
    08/05/2010
    13/05/2010
    24/05/2010
    14/07/2010
    01/11/2010
    11/11/2010
    25/12/2010


    Ca marche bien en général : c renvoie Nothing si le jour n'est pas férié, et la date trouvée si le jour est férié. SAUF dans un cas particulier : pour le cas où DateEn Cours est le 11/01/2010 (non férié...) il me renvoie la date du 11/11/2010. J'ai beau tourner le pb dans tous les sens, je ne trouve pas d'explication, donc pas de solution.

    D'où cela peut-il venir ?

    Merci pour votre réponse.

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    une solution peut-être...

    Tu sélectionnes tes données de jours et tu passes les cellules en format Standard, tu obtiendras des nombres (Numéro de série)*.
    *vois le tutoriel à côté de ma signature si besoin pour les explications.

    et tu modifies ton code ainsi :
    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
    Dim DateEnCours As Variant
    Dim DateFin As Variant
    Dim c As Range
    Sub recherche()
     
        DateEnCours = CDec(CDate("01/01/2010"))
        DateFin = CDec(CDate("20/01/2010"))
     
        Do While DateEnCours < DateFin
     
            Set c = Sheets("JoursFériés").Columns(1).Cells.Find(what:=DateEnCours)
                If Not c Is Nothing Then
                    MsgBox CDate(DateEnCours) & " FERIE"
                Else
                    MsgBox CDate(DateEnCours) & " OUVRE"
                End If
            DateEnCours = DateEnCours + 1
        Loop
    End Sub

    cordialement,

    Didier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut
    Merci pour la réponse. J'avais bien pensé à cette solution, mais je trouve bizarre qu'il faille mettre en œuvre des solutions de contournement... Est ce un bug ? J'ai constaté que cela se produisait pour toutes les années : le 11/01 est confondu avec le 11/11. Je ne pense pas que cela soit un problème de format de date. J'ai essayé de formater de différentes manières sans résoudre quoi que ce soit. Alors que la fonction RECHERCHEV ne provoque pas cette erreur dans une feuille de calcul.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    J'ai bien essayer de comprendre pourquoi mais je ne vois vraiment pas.

    Effectivement ça ne parait pas normal de contourner le problème, et encore faut-il savoir qu'il y a un problème. Lorsque l'on développe quelque chose on ne peut matériellement pas vérifier toutes les dates.
    J'espère qu'on aura une explication
    Merci de l'info

    JP

    Petite omission

    Même problème avec Excel 2007

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    VBA ne confond pas 11/01 avec 11/11 mais avec 01/11 (01/11 et 11/11 sont tous deux fériés)=> c'est bien un problème de format de date (date us vs date fr)

    Le tuto de Didier explique bien le pourquoi du comment...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Par défaut
    J'ai bien pensé à un pb de format US ... Mais je ne crois pas que ça vienne de là. Le code suivant montre bien qu'il trouve le 11/11 et pas le 01/11.

    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
    Option Explicit
     
    Dim DateEnCours As Date
    Dim DateFin As Date
    Dim c As Range
    Sub recherche()
     
        DateEnCours = CDate("01/01/2010")
        DateFin = CDate("20/01/2010")
     
        Do While DateEnCours < DateFin
     
            Set c = Sheets("JoursFériés").Columns(1).Cells.Find(what:=DateEnCours)
                        If Not c Is Nothing Then
                    MsgBox DateEnCours & "-->" & c
                Else
                    MsgBox DateEnCours & " pas trouvé"
                End If
            DateEnCours = DateEnCours + 1
        Loop
    End Sub

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

Discussions similaires

  1. [AC-2003] Problème de dates avec VBA
    Par Ric500 dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/09/2010, 17h39
  2. Problème de date en vba-access 2000
    Par rob2-9 dans le forum Access
    Réponses: 1
    Dernier message: 30/08/2006, 12h13
  3. [VBA-E]problème de date
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2006, 14h06
  4. [VBA-E]problème de date
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/04/2006, 23h08
  5. [VBA-E]problème de date dans une requete
    Par isa21493 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/02/2006, 11h45

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