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 :

Executer une requete access qui crée une table à partir de Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Executer une requete access qui crée une table à partir de Excel
    Bonjour à tous,

    Je viens ici exposer mon problème parce que je me suis bien arraché les cheveux avant de le faire. Je m'explique : J'ai écrit une macro vba sur excel qui me permet d'executer une requete de création de table access à distance.
    Mon code marche à merveille sur des requêtes normales (qui ne créent pas de table), mais quand j'essaie avec une requête de création de table, vba s'énerve et me sort le message d'erreur suivant : "erreur d'exécution '3219' Invalid operation'".
    Je vous met mon code et aidez moi svp :

    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
    Sub ExecuterRequete()
     
    Dim MyDatabase As DAO.Database
    Dim MyQueryDef As DAO.QueryDef
    Dim MyRecordset As DAO.Recordset
    Dim i As Integer
     
    Set MyDatabase = DBEngine.OpenDatabase ("C:\ma base")
    Set MyQueryDef = MyDatabase.QueryDefs("requete_Creation")
     
    'Set MyRecordset = currentdb.Execute(MyQueryDef)
     
    With MyQueryDef
    .Parameters("[entrer l'age]")= Feuil5.Range("A1").Value
    End With
     
     
    Set MyRecordset = MyQueryDef.OpenRecordset(2, dbSeeChanges)
     
    'ActiveSheet.Range("A7").CopyFromRecordset MyRecordset
     
     
    End Sub

    Je vous remercie par avance

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    bonjour,
    dans la faq tu trouves la réponse à ton problème ici. merci SilkyRoad

    voici une adaptation du code pour créer une table dans une base existante.
    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
     Sub crea_table()
     'Nécessite d 'activer les références:
        'Microsoft ActiveX Data Objects x.x Library
        'et
        'Microsoft ADO Ext. x.x for DDL and Security
    Dim Cnn As ADODB.Connection
    Dim Cat As ADOX.Catalog
    Dim MaTableIndex As ADOX.Table
    Dim NomTable As String
    Dim Fichier As String
     
     
    On Error GoTo Fin
    Fichier = "C:\reptest\MaNouvelleBase.accdb"
     
    Set Cnn = New ADODB.Connection
    Cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
        "Data Source='" & Fichier & "';"
     
    Set Cat = New ADOX.Catalog
     
    Set Cat.ActiveConnection = Cnn
     
    'Nom de la table qui va être ajoutée
        NomTable = "MaTable"
     
     Set MaTableIndex = CreateObject("ADOX.Table")
     
     'Définit les champs pour la nouvelle table
        With MaTableIndex
            .Name = NomTable
            With .Columns
                .Append "ChampDate", adDate, 50
                .Append "ChampNombre", adInteger, 50
                .Append "ChampTexte", adWChar, 80
            End With
        End With
     
        'Création table
        Cat.Tables.Append MaTableIndex
     
        Set Cat = Nothing
     
     
    Fin:
    Cnn.Close
    Set Cat = Nothing
    Set MaTableIndex = Nothing
     
    Set Cnn = Nothing
     
    End Sub
    Le code est testé (excel 2010) et fonctionne très bien. adapte le à tes besoins.

    Attention, comme précisé dans le code :
    'Nécessite d 'activer les références:
    'Microsoft ActiveX Data Objects x.x Library
    'et
    'Microsoft ADO Ext. x.x for DDL and Security
    @+

    Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
    Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
    Ou sur si ce n'est pas le cas

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre réponse.

    Le code marche très bien pour créer une table dans ma base access. Mais ce n'est pas ce que je veux faire. En fait, j'essaie d'exécuter une requête dans ma base access qui crée une table.(la requête est du genre Select * Into ... From...)

    Merci de me proposer une autre alternative si vous avez d'autres suggestions.

  4. #4
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Mon code marche à merveille sur des requêtes normales (qui ne créent pas de table), mais quand j'essaie avec une requête de création de table, vba s'énerve et me sort le message d'erreur suivant : "erreur d'exécution '3219' Invalid operation'".
    à te lire, c'est bien ce que tu demandes .

    c'est d'ailleurs le Titre de ce post !!!!.

    la requête SELECT ne crée pas de table. Elle est utilisée pour rechercher de informations dans une table.

    pense à regarder le lien du post précedent il y a d'autres questions qui t'aideront.

    Mais j'avoue que là je ne comprend pas quel est ton problème!!!!
    @+

    Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
    Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
    Ou sur si ce n'est pas le cas

Discussions similaires

  1. Mise à jour d'une table .fic à partir d'une requete access
    Par hobbes34 dans le forum HyperFileSQL
    Réponses: 3
    Dernier message: 25/02/2013, 10h22
  2. Réponses: 9
    Dernier message: 24/03/2011, 10h11
  3. Réponses: 5
    Dernier message: 14/05/2009, 21h07
  4. Réponses: 5
    Dernier message: 26/01/2009, 13h43
  5. Creer une requete update qui recupere les données de 2 tables
    Par pooi1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/06/2007, 13h13

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