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 :

format date et sql [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut format date et sql
    salut le phorum

    je me bats depuis 4 heures avec une requête sql intégré dans du vba
    je m'explique
    j'ai un lien DAO avec une base access
    dans cette base j'ai une colonne Date au format Date/heure
    je souhaiterai par invite lors du lancement du vba choisir une période
    seulement le problème c'est que j'ai l'erreur
    type de données incompatibles dans le cas ou j'inscris cette ligne de code pour mes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "((Date)>='" + dDateDéb + "'  And (Date)<= '" + dDateFin + "')"
    ou cette erreur
    erreur de syntaxe dans la date de l'expression
    si je modifie pour le format spécifique des date dans le sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "((Date)>=#" + dDateDéb + "#  And (Date)<= #" + dDateFin + "#)"
    les erreurs se manifestent à l'arrivée de la ligne ci dessous ??
    et voici le sql qui va taper dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recordset.Open ("SELECT * FROM T002_SAISIE_QUALIF WHERE " & Période & "ORDER BY Séquentiel;"), cnx
    une personne charitable pourrait elle m'indique ou le bas blesse

    merci

    munity

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    la fonction Date est spécifique à VBA, elle renvoie la date du jour, il faut modifier le champ en l'encadrant de crochets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "([Date]>=#" + dDateDéb + "#  And [Date]<= #" + dDateFin + "#)"
    qui soit dit en passant peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "([Date] BETWEEN #" + dDateDéb + "#  And #" + dDateFin + "#)"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    salut jpcheck

    merci pour ta réponse mais j'ai toujours le même problème quelquesoit l'instruction sql AND ou BETWEEN
    Dans le doute au cas ou j'aurais foiré à un autre endroit (j'en doute mais on sait jamais) je mets 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Public cnx As ADODB.Connection
    Public recordset As ADODB.recordset
    Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal strPath As String)
    'Définition répertoire et chemin base
        strPath = "c:\TRAITEMENT.mdb"
    'Test si fichier accessible
         If Len(Dir(strPath)) > 0 Then
            Set cnx = New ADODB.Connection
                If cnx.State <> adStateClosed Then cnx.Close
    'Définition du pilote de connexion
                cnx.Provider = "Microsoft.Jet.Oledb.4.0"
    'Définition de la chaîne de connexion
                cnx.ConnectionString = strPath
    'Ouverture de la base de données
            cnx.Open
        Else
            MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _
                    strPath & vbCrLf & _
                    "n'est pas un chemin valide.", vbCritical + vbOKOnly
        End If
    End Sub
    Public Sub QUALIF()
        Connexion_BDD.ConnectDB cnx, strPath
     
        Set recordset = New ADODB.recordset
           recordset.CursorType = adOpenStatic
        Dim dDateDéb, dDateFin As String
        Dim dDatePériode As String
      Dim data_recherchee As String
        'data_recherchee = Sheets("Gestion BDD Nécrologie").rechercher_data_necro.Value
     
        Vider_Liste_Qualif
     
        dDateDéb = Sheets("QUALIFICATION").TextBox1.Value
        dDateFin = Sheets("QUALIFICATION").TextBox2.Value
     
        If IsDate(dDateDéb) Or IsDate(dDateFin) Then
            Période = "([Date] BETWEEN #" + dDateDéb + "#  And #" + dDateFin + "#)"
            Else
            Période = ""
        End If
     
        'récupération de la table Qualif
         'If (detect_num(data_recherchee)) Then
        recordset.Open ("SELECT * FROM T002_SAISIE_QUALIF WHERE " & Période & "ORDER BY Séquentiel;"), cnx ' ORDER BY Séquentiel"), cnx
        i = [C_Sequentiel].Row + 1
        While Not recordset.EOF
            For j = 1 To recordset.Fields.Count
                Sheets("QUALIFICATION").Cells(i, j) = recordset(j - 1)
            Next
            i = i + 1
            recordset.MoveNext
        Wend
        'End If
     
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    ajoute une espace avant le ORDER BY, ca devrait débloquer...

    quel est le numéro et la description de l'erreur qui reste après cela ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    re

    ajout de l'espace comme ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recordset.Open ("SELECT * FROM T002_SAISIE_QUALIF WHERE " & Période & " ORDER BY Séquentiel;"), cnx
    avec comme variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "([Date] BETWEEN '#" + dDateDéb + "#'  And '#" + dDateFin + "#')"
    pour la syntaxe ci dessus le message est
    "Type de données incompatible dans l'expression du critère"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Période = "[Date] BETWEEN #" + dDateDéb + "#  And #" + dDateFin + "#"
    pour la syntaxe ci dessus le message est
    "erreur de syntaxe dans la date dans l'expression"

    pour les 2 erreurs j'ai le même numéro
    le numéro d'erreur est le suivant
    erreur d'execution
    '-2147217913 (80040e07)

  6. #6
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    et si tu testais comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    période = "([Date] BETWEEN '" + dDateDéb + "'  And '" + dDateFin + "')"

    NB: Evites dans tes projets d'utiliser des noms propres à Excel, Access... ;



    Aussi, j'ai remarqué dans la fin de ton code, tu ne fermes pas la base Access et tu ne vides pas la mémoire.

    essaies de rajouter ce bout de code à la fin du tien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cnx.Close
        Set recordset = Nothing
        Set cnx = Nothing

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

Discussions similaires

  1. Group By Format([DATE]) VBA - SQL
    Par Bastien06 dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/03/2010, 15h53
  2. Format Date sur sql server 2000
    Par randriamanana dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 29/01/2008, 09h01
  3. Pb de Format date en sql
    Par Bombar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/01/2008, 10h55
  4. Format date en SQL et ACCESS
    Par mic352 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/04/2007, 21h18
  5. [SQL]Format date en SQL
    Par mic352 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/04/2007, 10h26

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