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 :

Création de table et intervalle de temps [AC-2016]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Par défaut Création de table et intervalle de temps
    Bonjour à tous,
    Voilà, je veux créer une table Tbl_periode, qui doit contenir les enregistrements de 3 tables différentes dans un intervalle de temps (entre deux dates) bien définie.
    Je rencontre 2 problèmes avec mon code:

    1. Au delà du fait que je rentre les dates de début et de fin dans une inputbox, les dates ne sont pas prises ne compte je dois les ressaisir à nouveau comme paramètres.
    2. Seuls les enregistrements de la première table (le résultat la première partie du code) se retrouve dans la table finale tbl_periode.




    je poste mon 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
    Option Explicit
     
    Private Sub Commande1_Click()
        Dim sSql1 As String, sSql2 As String, sSql3 As String, cboSubstance As String
     
     
        DateDeb = InputBox("Entrer obligatoirement une date inférieure", , "dd/mm/yyyy")
        DateFin = InputBox("Entrer obligatoirement une date supérieure", , "dd/mm/yyyy")
     
        If IsDate(DateDeb) And IsDate(DateFin) Then
     
     
            'If DLookup("[Substance]", "SUBSTANCE", "[Substance] like ""*" & Nom & "*""") <> "" And Nom <> "" Then
     
            sSql1 = "SELECT RECHERCHE_MINIERE.OPERATEUR, RECHERCHE_MINIERE.TYPE_DEMANDE, RECHERCHE_MINIERE.SUBSTANCE, RECHERCHE_MINIERE.OBJET," _
                & "RECHERCHE_MINIERE.Zone, RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG, RECHERCHE_MINIERE.STATUT " _
                & "INTO [" & "TBL_periode] " _
                & "FROM RECHERCHE_MINIERE " _
                & "WHERE (((RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG) Between DateDeb And DateFin));"
     
     
     
            sSql2 = "INSERT INTO [" & "TBL_periode] " _
                & "SELECT EXPLOITATION_CARRIERES.OPERATEUR, EXPLOITATION_CARRIERES.TYPE_DEMANDE, EXPLOITATION_CARRIERES.SUBSTANCE, EXPLOITATION_CARRIERES.OBJET," _
                & "EXPLOITATION_CARRIERES.Zone, EXPLOITATION_CARRIERES.DATE_ARRIVEE_DGMG, EXPLOITATION_CARRIERES.STATUT " _
                & "FROM EXPLOITATION_CARRIERES " _
                & "WHERE (((EXPLOITATION_CARRIERES.SUBSTANCE)Between DateDeb And DateFin));"
     
            sSql3 = "INSERT INTO [" & "TBL_periode] " _
                & "SELECT EXPLOITATION_MINIERE.OPERATEUR, EXPLOITATION_MINIERE.TYPE_DEMANDE, EXPLOITATION_MINIERE.SUBSTANCE, EXPLOITATION_MINIERE.OBJET," _
                & "EXPLOITATION_MINIERE.Zone, EXPLOITATION_MINIERE.DATE_ARRIVEE_DGMG, EXPLOITATION_MINIERE.STATUT " _
                & "FROM EXPLOITATION_MINIERE " _
                & "WHERE (((EXPLOITATION_MINIERE.SUBSTANCE)Between DateDeb And DateFin));"
            DoCmd.SetWarnings False
            DoCmd.RunSQL sSql1
            DoCmd.RunSQL sSql2
            DoCmd.RunSQL sSql3
            DoCmd.SetWarnings True
        Else
            ' Si la saisie est incorrecte...
            MsgBox "Vous n'avez pas tapé de date !", vbExclamation
     
        End If
     
    End Sub
    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 131
    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 131
    Par défaut
    Bonjour,

    C'est normal !

    Tu as 2 mondes qui cohabitent :
    VBA et SQL. Le premier n'a aucune interaction avec les 2ème, c'est-à-dire que ce que tu fais dans VBA n'est pas systèmatiquement vu dans SQL à moins de faire soit construire ta requête SQL avec VBA soit de créer des fonctions VBA publiques qui seront vues par SQL. Dans ton cas ce n'est pas très adapté.

    Pour construire l'interaction tu dois la coder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         sSql1 = "SELECT RECHERCHE_MINIERE.OPERATEUR, RECHERCHE_MINIERE.TYPE_DEMANDE, RECHERCHE_MINIERE.SUBSTANCE, RECHERCHE_MINIERE.OBJET," _
                   & "RECHERCHE_MINIERE.Zone, RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG, RECHERCHE_MINIERE.STATUT " _
                   & "INTO [" & "TBL_periode] " _
                   & "FROM RECHERCHE_MINIERE " _
                   & "WHERE (((RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG) Between " & DateDeb & " And " & DateFin & "));"
    Avec une particularité pour les dates : En VBA elles sont TOUJOURS affichées au format anglo-saxon soit MM/DD/YYYY. Il faut en tenir compte lors de ta construction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                  & "WHERE (((RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG) Between " & format$(DateDeb,"MM/DD/YYYY") & " And " & format$(DateFin,"MM/DD/YYYY")  & "));"
    Et en SQL (ACCESS) elles utilisent les séparateurs #

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                  & "WHERE (((RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG) Between #" & format$(DateDeb,"MM/DD/YYYY") & "# And #" & format$(DateFin,"MM/DD/YYYY")  & "#));"
    Il y a une solution un peu plus couteuse pour le moteur SGBD c'est d'utiliser le format natif de la date, le double:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 & "WHERE  cdbl(  RECHERCHE_MINIERE.DATE_ARRIVEE_DGMG) Between " & cdbl(DateDeb) & " And " & cdbl(DateFin) & "));"

    Comme tu le vois, ton code SQL est construit avec les valeurs interprétées depuis VBA. Un simple

    te permettra de mieux comprendre.

    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

  3. #3
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Par défaut
    Bonjour à tous,

    Merci Loufab, le code marche à merveille

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

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