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 :

VBA, SQL, Access: Creer/Enregistrer une Requete


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut VBA, SQL, Access: Creer/Enregistrer une Requete
    Bonjour,

    Je cree des requetes dans VBA Excel pour piloter access, mode compatible 2000. Jusqu'ici rien de bien extraordinaire, par exemple:

    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
    Dim cnx As ADODB.Connection
    Dim rec As New ADODB.Recordset
     
    Set cnx = New ADODB.Connection
    cnx.Provider = "Microsoft.Jet.Oledb.4.0"
    cnx.ConnectionString = Path & Base
    cnx.Open
     
    Asst = ThisWorkbook.Sheets("NewDeal").Range("J19")
     
    Requete = "CREATE TABLE [" & Asst & "] (BizDt DATETIME, PxCls DOUBLE" & ");"
    rec.Open Requete, cnx
    cnx.Close
    Set rec = Nothing
    Set cnx = Nothing
    La en l'occurence, ca cree un table dans Access.

    Maintenant, en fait, cette table Je vais la multiplier champs a champs a une autre table. Je vais donc faire une autre requete.

    Ceci dit, je veux que cette requete soit enregistree comme une requete dans access.

    Ma requete en elle meme est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete = "SELECT [" & Asst & "].BizDt, [" & Asst & "]![PxCls]*[" & CurTable & "]![PxCls] AS PxCls FROM [" & Asst & "] INNER JOIN [" & CurTable & "] ON [" & Asst & "].BizDt = [" & CurTable & "].BizDt;"
    Mais cela n'est pasenregistree dans aAccess comme une requete qui se mettra a jour a l'ouverture. Je ne veux pas creer une table qui necessite systematiquement une mise a jour "manuelle" pour etre a jour (eviter la redondance de donnes, etc,...)

    Suis-je bien clair?

    Avez vous une solution?

    Merci!
    Lameth

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Si tu parles de créer une requête au sens du modèle d'objets ACCESS, c'est une QueryDef. A ma connaissance, tu ne peux pas créer cet objet avec SQL.
    Par en DAO tu as la méthode CreateQueryDef. Je pense que tu devras ouvrir la BD.

    Cordialement,

    PGZ

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut
    Merci, je suis en train d'investiguer ceci, je ne trouve pas encore de sytaxe generale...

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste à creuser (en relation tardive) :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    Private Sub ConnecterBase(ConnectBD As Object, _
                              Optional Rs)
     
        Set ConnectBD = CreateObject("ADODB.Connection")
        If Not IsMissing(Rs) Then
            Set Rs = CreateObject("ADODB.Recordset")
        End If
     
        With ConnectBD
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            'ici changer le chemin de la base
            .ConnectionString = "D:\stats.mdb"
            .Open
        End With
     
    End Sub
     
    Private Sub CreerTable()
     
        Dim ConnectBD As Object
        Dim Rs As Object
        Dim Catalogue As Object
        Dim Table As Object
        Dim Idx As Object
        Dim NomTable As String
     
        NomTable = "MaTable"
     
        'connecte la base de données
        ConnecterBase ConnectBD, Rs
     
        'initialise les objets ADOX
        Set Catalogue = CreateObject("ADOX.Catalog")
        Set Table = CreateObject("ADOX.Table")
        Set Idx = CreateObject("ADOX.Index")
     
        'connecte le catalogue
        'à la base de données
        Catalogue.ActiveConnection = ConnectBD
     
        'création de la table
        With Table
            .Name = NomTable
            With .Columns
                .Append "Nom", 202, 20
                .Append "Salaire", 3
                .Append "Prime1", 3
                .Append "Prime2", 3
                .Append "DateEntree", 7
            End With
        End With
     
        'si la table existe, demande si écrasement
        On Error Resume Next
        With Catalogue
            .Tables.Append Table
            If Err <> 0 Then
                If MsgBox("La table '" & NomTable _
                & "' existe déjà, l'écraser ?", _
                vbYesNo + vbQuestion) = vbYes Then
                    .Tables.Delete NomTable
                    .Tables.Append Table
                Else
                    Exit Sub
                End If
            End If
        End With
        On Error GoTo 0
     
        'création de l'index clé primaire
        With Idx
            .Name = "ClePrim"
            .Columns.Append "Nom"
            .Unique = True
            .PrimaryKey = True
        End With
     
        'ajoute l'index
        Table.Indexes.Append Idx
     
        'rempli la table
        AjoutDansTable ConnectBD, Rs, NomTable
     
        'ferme la connection
        ConnectBD.Close
     
        Set Table = Nothing
        Set Catalogue = Nothing
        Set Rs = Nothing
        Set ConnectBD = Nothing
     
    End Sub
    Hervé.

  5. #5
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    En gros, cela devrait ressembler à cela
    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
    Dim AccApp As Access.Application
    Dim oDB As DAO.Database
    Dim qdf As DAO.QueryDef
     
    Set AccApp = CreateObject("ACCESS.APPLICATION")
    AccApp.OpenCurrentDatabase (sCheminBase)
    Set oDB = AccApp.CurrentDb
     
    Set qdf = oDB.CreateQueryDef(sQueryNom, sSQL)
    oDB.QueryDefs.Append qdf
     
    oDB.Close
    AccApp.Close
     
    Set dqf = Nothing
    Set oDB = Nothing
    Set AccApp = Nothing
    Cordialement,

    PGZ

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Par défaut
    Merci, la ligne
    oDB.QueryDefs.Append qdf
    bugue mais semble inutile (ca marche sans cette ligne).

    Merci en tous cas.

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Si tu as une solution, pense à taguer

    Cordialement,

    PGZ

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

Discussions similaires

  1. [VBA EXCEL / ACCESS] : Resultat d'une requete
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/07/2009, 12h00
  2. Réponses: 5
    Dernier message: 14/05/2009, 21h07
  3. [DAO] [SQL] [VBA] manipuler les proprietes d'une requete
    Par cafeine76 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/07/2008, 14h48
  4. [VBA-E]Ecrire et lancer une requete sur Access
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/03/2006, 14h32

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