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 :

gestion des dates requete sql sur base Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut gestion des dates requete sql sur base Excel
    Bonjour,

    pour des raisons inconnus je ne peux pas utiliser Access dans mon entreprise, j'ai donc décidé de faire la base de données dans Excel (c'est un outil déjà développé que j'adapte).
    je souhaitais savoir comment gérer les Dates dans une requete SQL, c'est à dire que j'ai une requête comme la suivante, mais elle ne fonctionne pas .

    'je me connecte
    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
    Sub ConnectMe()
     
        'Test si on est connecté
        If IamConnected() Then Exit Sub
     
        'Connecter
        Set MyRealConnection = New ADODB.Connection
     
        'Connection
        With MyRealConnection
            .Provider = "MSDASQL"
            .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & "DBQ=" & Fichier & ";HDR=Yes;ReadOnly=False;"
            .Open
        End With
    End Sub
    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 test2()
     
        Dim Rct As New Recordset
        With BOARD
            Fichier = .Link_Project.Value & "\DBCollat.xlsx"
        End With
        strSQL = "SELECT * From [Indicateurs$] WHERE [DateT] > '31/05/2020'"
        Rct.Open strSQL, myConnection, adOpenDynamic, adLockPessimistic
     
     
        With ThisWorkbook.Worksheets("TestRs")
            .Range("A1").CopyFromRecordset Rct
        End With
     
        connexion.DisconnectMe
     
    End Sub
    j'ai un peu tout essayé c'est à dire format Date, Format texte ISO … .
    Je suis conscient qu'il faut adapter peut être aussi le format de la cellule de la table Excel. Pour ce faire j'ai mis 5 lignes destiner à fixer le type de données de chaque champs dans ma feuille Excel.
    Merc d'avance

  2. #2
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    Trouvé !!
    on met en texte dans la base sous le format ISO .

    DSL pour le derangement
    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 test2()
     
        Dim Rct As New Recordset
        With BOARD
            Fichier = .Link_Project.Value & "\DBCollat.xlsx"
        End With
        strSQL = "SELECT * From [Indicateurs$] WHERE [DateT] > '2020-06-31'"
        Rct.Open strSQL, myConnection, adOpenDynamic, adLockPessimistic
     
     
        With ThisWorkbook.Worksheets("TestRs")
            .Range("A1").CopyFromRecordset Rct
        End With
     
        connexion.DisconnectMe
     
    End Sub

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ou peut-être en utilisant des # :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "SELECT * From [Indicateurs$] WHERE [DateT] > #31/05/2020#"

  4. #4

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strSQL = "SELECT * From [Indicateurs$] WHERE [DateT] >#2020-06-31#"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim CM As New ADODB.Command
     strSQL = "SELECT * From [Indicateurs$] WHERE [DateT] > ?"
     CM.CommandType = adCmdText: CM.ActiveConnection = MyRealConnection
     CM.CommandText = strSQL: CM.Parameters.Append CM.CreateParameter("DateT", adDate, adParamInput, Value:="30/06/2020")
     Set Rct = CM.Execute

  6. #6
    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
    Salut.

    L'idée de ThumbDown de passer par des paramètres est pour moi la meilleure. Recomposer la requête sql par concaténation est rarement n'est jamais une bonne idée. Ca amène plein de problèmes avec certains textes (ceux contenant des apostrophes, par exemple), les valeurs numériques et les valeurs de dates.

    Mais tant qu'à faire, autant passer la date plutôt qu'une chaine, car si doute sur l'ordre des valeurs de la date (dmy ou mdy, par exemple comme dans "03/04/2020"), on risque les surprises. Puisque le paramètre est explicitement passé comme adDate, alors il faut passer une date, quitte à recomposer la date via DateSerial(...), et pas une chaine qui va devoir être interprétée en date par adodb, .
    "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...
    ---------------

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    je suis d’accord Pierre.

  8. #8
    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
    C'est la petite virgule en plus

    J'aime bien cette proposition d'utiliser les paramètres adodb (d'où le ). Ils sont là pour ça et simplifient le code, en déléguant à la couche ADODB le soin de passer la chaîne sql et les paramètres au driver ADODB. C'est plus pro que de concaténer en se mêlant les pinceaux avec des apostrophes (pour les textes), des # (pour les dates, qu'il faut formater à la sauce ISO 8601 si on veut que ça passe sans problème) et la gestion des séparateurs pour les valeurs numériques lorsque l'on intègre des variables VBA (ce qui sera a priori toujours le cas, passer des valeurs en dur dans la chaine SQL n'ayant pas beaucoup de sens)


    "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...
    ---------------

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

Discussions similaires

  1. [2016] Requete SQL sur Base Article et Commande Fournisseurs
    Par cheribibi33 dans le forum Développement
    Réponses: 3
    Dernier message: 21/06/2018, 09h55
  2. Gestion des dates en SQL
    Par Pasder dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 15/01/2013, 19h48
  3. Réponses: 6
    Dernier message: 06/11/2009, 16h59
  4. Requete sql sur base oracle
    Par kiro4 dans le forum SQL
    Réponses: 4
    Dernier message: 18/03/2009, 08h59
  5. Requete SQL sur base SQL Server VB6
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/11/2005, 12h30

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