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

VBA Access Discussion :

Problème gestion de date dans access (VBA) [AC-2016]


Sujet :

VBA Access

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut Problème gestion de date dans access (VBA)
    Bonjour,

    je travaille sur une DB source oracle où j'ai une table comprenant des périodes => date de début et date de fin.
    J'ai donc une vue via access sur ma db oracle. Quand je regarde le format de ces deux zones, c'est du format date/heure. Dans les zone 'format et 'date de saisie' de la définition de la table , il n'y a rien.

    Dans mon code, je souhaite faire des contrôles sur ces dates=> comparaison de ces dates avec des dates comme 1 janvier de l'année en cours, 31 décembre de l'année en cours, dernier jours du mois en cours.

    voici le code :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        Dim dbs As DAO.Database
        Dim SAVE_DEBUTPERIODE As Date
        Dim SAVE_FINPERIODE As Date
        Dim premierjanvier As Date 'stocker le prmier jour de l'année
        Dim finderniermois As Date 'stocker le dernier jours du dernier mois calculé
        Dim findecembre As Date 'stocker le 31 décembre de l'année en cours
        Dim derniermois As Integer 'stockr le numéro du dernier mois traité
        Dim cas As Integer
        premierjanvier = DateSerial(Year(Date), 1, 1)
        findecembre = DateSerial(Year(Date), 12, 31)
        finderniermois = DateSerial(Year(Date), Month(Date), 1)
        finderniermois = finderniermois - 1
        derniermois = (Month(finderniermois))
     
    ...dans une boucle
                SAVE_FINPERIODE = rst_zy35.Fields("DATXXX") 'fin période
                SAVE_DEBUTPERIODE = rst_zy35.Fields("DTEF00") 'début période
     
                cas = 0
     
                Select Case True
                    Case (SAVE_DEDUTPERIODE <= premierjanvier And SAVE_FINPERIODE > findecembre)
     
                        traite_1 = traite_1 + 1
     
                        i = 1
                        j = 12
                        If (NUDOSS_FIND = "32395") Then
                            MsgBox ("dans cas 1période traitée : " & SAVE_DEBUTPERIODE & " fin période : " & SAVE_FINPERIODE & "premier_janvier : " & premierjanvier)
                            MsgBox (" i = " & i & " j = " & j)
                         End If
                        zapper = 0
                        cas = 1
     
                    End Select
    Je veux faire un traitement particulier pour les records dont la date de début est avant le 01/01/2017 et la date de fin > 31/12/2017
    => mon case ci-dessus
    Dans ma DB, j'ai un record avec ces données :
    J'ai un record avec DTEF00 = 1/12/2017 et DATXXX = 31/12/2999
    et ce record passe quand-même dans mon case????? alors que DTEF00 (SAVE_DEBUTPERIODE) est plus grand que 1/1/2017 ???

    Help ,

    Merci d'avance,
    david

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Bonjour,

    Avez-vous essayé de remplacer le select case .. end select par un if ... end if.

    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
     
               ...
     
               cas = 0
     
              If (SAVE_DEDUTPERIODE <= premierjanvier) And (SAVE_FINPERIODE > findecembre) then
     
                        traite_1 = traite_1 + 1                    
                        i = 1
                        j = 12
                        If (NUDOSS_FIND = "32395") Then
                            MsgBox ("dans cas 1période traitée : " & SAVE_DEBUTPERIODE & " fin période : " & SAVE_FINPERIODE & "premier_janvier : " & premierjanvier)
                            MsgBox (" i = " & i & " j = " & j)
                         End If
                        zapper = 0
                        cas = 1
     
             End If
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Bonjour,

    vous avez raison, c'est bien le select case qui pose problème. Le if passe sans problème.
    Vous avez une explication ? C'est juste pour apprendre de nouvelles choses car le IF me dépanne sans problème.

    Encore merci et bonne journée,

    david

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 622
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    Citation Envoyé par ttfme Voir le message
    Bonjour,

    vous avez raison, c'est bien le select case qui pose problème. Le if passe sans problème.
    Vous avez une explication ? C'est juste pour apprendre de nouvelles choses car le IF me dépanne sans problème.

    Encore merci et bonne journée,

    david
    Le select case s'emploie plutôt avec énumération de valeurs :

    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
    Select Case number    ' Évalue Number.
     
        Case 1 To 3    ' Le nombre est compris entre 1 et 3 inclus.
     
           Debug.Print "Entre 1 et 5"
     
        Case 4 To 8    ' Le nombre est compris entre 4 et 8.
     
           Debug.Print "Entre 6 et 8"
     
        Case 9 , 10    ' Le nombre est 9 ou 10.
     
           Debug.Print "Entre 9 et 10"
     
        Case Else    ' Autres valeurs.
     
           Debug.Print "Non compris entre 1 et 10"
     
        End Select
    ça évite trop d'imbrications de bloc if .. then.

    Un autre alternative est la structure avec elseif :

    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
    ' Évalue Number.
     
        If (Number>=1) and (Number<=3)  then  ' Le nombre est compris entre 1 et 3 inclus.
     
           Debug.Print "Entre 1 et 5"
     
        elseif (Number>=4) and (Number<=8)  then    
     
           Debug.Print "Entre 6 et 8"
     
        elseif (Number=9) or (Number=10)  then
     
           Debug.Print "Entre 9 et 10"
     
        Else    ' Autres valeurs.
     
           Debug.Print "Non compris entre 1 et 10"
     
        End if
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    ok merci pour ce complément d'informations.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu fais une comparaison de 2/2/2017<= 10/2/2017 et bien oui 10 est plus petit que 2 du point de vue alphabétique!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case(format(SAVE_DEDUTPERIODE,"yyyy-mm-dd")<= format(premierjanvier,"yyyy-mm-dd")And format(SAVE_FINPERIODE,"yyyy-mm-dd") >format( findecembre,"yyyy-mm-dd"))

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

Discussions similaires

  1. [AC-2013] Problème gestion de date en vba
    Par ttfme dans le forum Access
    Réponses: 3
    Dernier message: 30/04/2015, 16h47
  2. [AC-2003] Problème de synthaxe SQL dans ACCESS VBA
    Par phoon dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/10/2009, 12h32
  3. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  4. problème d'importation excel dans access
    Par Badboy62cfp dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 16h17
  5. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12

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