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 format date


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
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut problème format date
    Bonjour,

    Je viens à vous concernant un problème de format dans une requête access sous VBA.

    Mon problème concerne le format d'une date. Lorsque j'effectue la requête avec
    des dates en dur comme ceci #11/11/2008#, ma requête fonctionne parfaitement.

    Lorsque je passe en date une variable, préalablement définie par l'utilisateur dans un useform
    au format européen.
    Ensuite, je change le format string en date puis j'utilise la fonction :

    format(date,"mm/dd/aaaa") pour passer en format de date américain.


    Ceci fait, je peux réaliser ma requête.

    Ci-dessous, je vous met la sub responsable de la requête en vous montrant entre commentaire
    l'ancienne version qui marche très bien.


    J'ai testé les variables debut, debut2 et fin avec msgbox et la sortie est bien du type :
    mm/dd/aaaa ( par exemple 05/25/2008)


    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
    37
    38
    39
     
     
    Public Sub requete_cours(mabdd, debut, debut2, fin, resultat)
    Dim rgeneral As String
     
    'MsgBox debut : 11/11/2008
    'MsgBox debut2 : 11/12/2008
    'MsgBox fin : 11/11/2009
     
    rgeneral = 
           "SELECT Nom, Cours.CodeISIN, Cours.Cours_Cloture, [CoursMoyen].Moyenne 
    	FROM   (SELECT Cac40.Nom, Cac40.Code_ISIN AS CodeISIN, Cours_Cloture  
    		FROM CAC40 INNER JOIN COTATIONS ON CAC40.Code_ISIN=Cotations.Code_ISIN 
    		WHERE (Date='""#" & debut & "#""') ORDER BY Cac40.Code_ISIN)  AS COURS INNER JOIN (SELECT Code_ISIN, AVG(Cours_Cloture) AS Moyenne 
    			FROM Cotations 
    			WHERE (Date BETWEEN '""#" & debut2 & "#""' AND  '""#" & fin & "#""' ) 
    	GROUP BY COTATIONS.CODE_ISIN ORDER BY COTATIONS.CODE_ISIN)  AS CoursMoyen ON Cours.CodeISIN=[CoursMoyen].Code_ISIN 
    	ORDER BY Cours.CodeISIN;"
     
     
     
     
     
    'Ancienne version de la requête
    'rgeneral = "SELECT Nom, Cours.CodeISIN, Cours.Cours_Cloture, [CoursMoyen].Moyenne FROM (SELECT Cac40.Nom, Cac40.Code_ISIN AS CodeISIN, Cours_Cloture  FROM CAC40 INNER JOIN COTATIONS ON CAC40.Code_ISIN=Cotations.Code_ISIN 
    'WHERE (Date=#7/10/2007#) ORDER BY Cac40.Code_ISIN)  AS COURS INNER JOIN (SELECT Code_ISIN, AVG(Cours_Cloture) AS Moyenne FROM Cotations 
    'WHERE (Date BETWEEN #7/11/2007# AND  #7/10/2008# ) 
    'GROUP BY COTATIONS.CODE_ISIN ORDER BY COTATIONS.CODE_ISIN)  AS CoursMoyen ON Cours.CodeISIN=[CoursMoyen].Code_ISIN 
    'ORDER BY Cours.CodeISIN;"
     
     
     
    '"#" & debut & "#"'
     
     
     
    Set vcours = mabdd.CreateQueryDef("", rgeneral)
        Set resultat = vcours.OpenRecordset
    End Sub

    L'erreur ne vient pas du fait que les dates n'existant pas dans la base.
    L'erreur est sur les 3 variables debut, debut2 et fin.


    Mon objet resultat n'enregistre rien avec cette requête.


    Je vous remercie d'avoir lu cette longue description !!!

  2. #2
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Bonjour

    J'ai déja eu le problème dans des requetes
    je l'ai résolu en convertissant les dates en long lors des critères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Clng(Date)=Clgn(debut)..........
    Mais tu dois avoir aussi un autre probleme : dans ta requete, Date, doit être interprétée comme la variable Date de VBA

    Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    Je ne comprend pas comment on emboite lafonction dans mon where simple
    et mon where avec between
    Pouvez me montrer la syntaxe avec ces deux lignes svp merci beaucoup !!.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE (Date='""#" & debut & "#""') ...
     
    WHERE (Date BETWEEN '""#" & debut2 & "#""' AND  '""#" & fin & "#""' )

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 134
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "...WHERE (Date=" & debut & ")..."
    tout simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "...WHERE (Date BETWEEN " & debut2 & " AND  " & fin & " )..."
    idem ici

    Avec le # la date est interprétée en format US/UK mm/jj/aa. Ce qui peut être génant.

    Notez que la date est stockée comme un double et non comme un long. En cas de format Date/heure la partie heure représentée par les décimales ne sera pas prise en compte par la proposition de JP49. A part cette particularité, que l'on peut corrigé en utilisant un cdbl() au lieu du clng(), la solution de JP49 est tout à fait fonctionnelle.

    Notez également que Date est un mot réservé. A éviter.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. Problème format date
    Par benjisan dans le forum Modélisation
    Réponses: 3
    Dernier message: 17/07/2008, 09h24
  2. Problème Format date
    Par Jiyuu dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/08/2007, 16h52
  3. problème format date dans un datagrid
    Par bebert119 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 14/08/2007, 15h38
  4. Problème format Date avec VS2003
    Par vaohdan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2007, 12h06
  5. Problème format date - SimpleDateFormat inversion mois/jour
    Par juanqui dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 07/02/2007, 14h37

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