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 Excel "Erreur 429 un composant ActiveX ne peut pas créer d'objet"


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut VBA Excel "Erreur 429 un composant ActiveX ne peut pas créer d'objet"
    Bonsoir,
    J'ai créer une macro permettant de récupérer le résultat d'une requête Access, et de l'insérer dans une feuille de calcul Excel par l'intermédiaire d'un bouton de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Bouton1_Cliquer()
    Dim Db As DAO.Database
    Dim Q As QueryDef
    Set Db = DAO.OpenDatabase(srcPathBdd & "C:\Users\esimo\Desktop\projet\nba1.accdb", False, False)
    Set Q = Db.QueryDefs("Atlanta_domicile")
    Db.Execute Q.Sql
    End Sub
    Je ne vois pas ou est l'erreur
    "Erreur 429 un composant ActiveX ne peut pas créer d'objet"
    J'aimerai aussi pouvoir contrôler l'emplacement de l'affichage (feuille est cellule)
    Merci d'avance

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Esimo, bonsoir le forum,

    Mes connaissances ne me permettent pas de te répondre, toutefois je te conseille de bien vérifier la syntaxe (ou l'orthographe) des deux lignes contenant Set car j'ai eu exactement le même message quand j'écrivais par exemple dans un code :

    Set D = CreateObject("Scriting.Dictionary") au lieu de Set D = CreateObject("Scripting.Dictionary"). Il manquait le p...

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    As-tu mis une chaîne de connexion à quelque part ailleurs ?
    As-tu ouvert ta connexion à quelque part ailleurs ?

    Parce que sans chaîne de connexion et sans connexion active, tu ne peux pas accéder à une base de données.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    Dim Db As DAO.Database
    Dim Q As QueryDef
    
    Set Db = DAO.OpenDatabase(srcPathBdd & "C:\Users\esimo\Desktop\projet\nba1.accdb", False, False)
    Set Q = Db.QueryDefs("Atlanta_domicile")
    je ne connais pas ce composant

    mais quand tu déclare un set avec un composant déclaré en hearly binding prend bien soin d'en avoir activé la référence

    d'autant plus que tu change la definition d'un d'entre eux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Q As QueryDef                                          'Q devient querydef
    Set Q = Db.QueryDefs("Atlanta_domicile")        'maintenant Q devient DB.quelquechose  tu n'a pas l'impression de te tromper quelque part ????
    early binding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim letruc as chose
    machin=letruc ....blablabla
    late binding
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim letruc as object
    set letruc=createobject(" ton truc ")
    machin=letruc...balablabla
    Au plaisr

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Non je n'ai rien fait de tout ca quelle sont les procédures?

    J'avoue être un peu dépassé..

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    de toute façon ton code est faux et ne peut pas marcher comme tel

    et pour les références c'est l'onglet (outil)puis l'item références

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Aurais tu la solution?

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    regarde ici
    mais change un de tes "Q" si early binding

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Regarde ce lien :http://warin.developpez.com/access/dao/?page=partie_4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Db As DAO.Database
    Dim Qry As DAO.QueryDef
    Dim Rs As DAO.Recordset
    Set Db = DAO.OpenDatabase(srcPathBdd & "C:\Users\esimo\Desktop\projet\nba1.accdb")
    Set Qry = Db.QueryDefs("Atlanta_domicile")
    'Pour une requête d’exécution direct!
    Qry.Execute
    'Pour retourner le résultat d'une requête!
    Set Rs = Qry.OpenRecordset
    End Sub

  10. #10
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Pfff ! Heureusement que j'étais là moi ! Mais quelle honte...

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    Regarde ce lien :http://warin.developpez.com/access/dao/?page=partie_4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Db As DAO.Database
    Dim Qry As DAO.QueryDef
    Dim Rs As DAO.Recordset
    Set Db = DAO.OpenDatabase(srcPathBdd & "C:\Users\esimo\Desktop\projet\nba1.accdb")
    Set Qry = Db.QueryDefs("Atlanta_domicile")
    'Pour une requête d’exécution direct!
    Qry.Execute
    'Pour retourner le résultat d'une requête!
    Set Rs = Qry.OpenRecordset
    End Sub
    Bonjour
    J'ai essayé votre code mais lorsque je lance la procédure l'erreur est toujours la même soit "Erreur 429 un composant ActiveX ne peut pas créer d'objet"...

    Faut il créer une connexion au préalable de ma bdd access vers mon document excel pour permettre à votre procédure de bien pouvoir afficher le résultat de la requête contenu dans cette bdd?
    Si Oui je ne connais pas la manière de faire. Je suis désolé j'ai quelques connaissances en VBA, mais c'est la première fois que j'utilise le transfert de données DAO.

  12. #12
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut
    Bonjour
    En DAO je ne connais pas trop, mais en ADO, c'est sûr qu'il faut une connexion, donc ...
    J'utilise ce code pour importer les données d'une table Access dans ma feuille excel
    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
        Set cn = CreateObject("ADODB.Connection")
        'La fameuse connexion pour XL2007, A faire évoluer pour les autres versions (le "12.0")
        With cn
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" &  _
                "//Serveur/.../....accdb" & ";"
            .Open
        End With
     
        '---- RecordSet ---
        Set Rst = CreateObject("ADODB.Recordset")
        strSQL = "SELECT * FROM " & t_access    't_access = Nom de la table Access. Une requête est aussi une table au final
        Set Rst = cn.Execute(strSQL)
        'Ecrit le résultat de la requête à partir de la cellule sélectionnée
        Selection.CopyFromRecordset Rst
        '--- Fermetures ---
        cn.Close
    'set ...=nothing etc
    J'ai choisi du ADO parce que j'ai trouvé la formule(presque magique) de connexion qui fonctionnait avant de chercher dans DAO, mais les deux se ressemble pas mal (pour Excel).
    Tout est issu de devellopez.com
    Cordialement

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour piotr76,
    Est ce que ce code me permettra, à partir d'excel et par l’intermédiaire d'un bouton, d'afficher une requête SQL déjà existante sur ma bdd sur mon classeur ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    là on est en pleine confusion entre la technologie Ado qui est une connexion universelle de base de données et Dao qui est le moteur de base de données développé par Microsoft pour son usage personnel.
    Code Ta connexion à ta base de données : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Db = DAO.OpenDatabase(ActiveWorkbook.Path & "\Test-ADODBRD.mdb")
    ton problème est un manque de vocabulaire!
    Code Affectation d'une requête existante dans ACCESS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Qry = Db.QueryDefs("Requete_NomPrenomAge") 'requête de sélection
    Set Rs = Qry.OpenRecordSet
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Code La même chose avec une chaine SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Rs = Db.OpenRecordSet("SELECT NomPrenomAge.* FROM NomPrenomAge;")
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Code la même chose mais à partir une table : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Qrt = Db.TableDefs("NomPrenomAge")
    Set Rs = Qrt.OpenRecordSet
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Code ces requête font la même chose une ACCESS l'autre SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Qry = Db.QueryDefs("Maj_NomPrenomAge") 'requête Action à exécution direct
    Qry.Execute
    Db.Execute "UPDATE NomPrenomAge SET NomPrenomAge.Age = [Age]+1;"
    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
    Sub test()
    Dim Db As DAO.Database
    Dim Qry As DAO.QueryDef
    Dim Qrt As TableDef
    Dim Rs As DAO.Recordset
    Set Db = DAO.OpenDatabase(ActiveWorkbook.Path & "\Test-ADODBRD.mdb")
    Set Qry = Db.QueryDefs("Requete_NomPrenomAge") 'requête de sélection
    Set Rs = Qry.OpenRecordSet
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Set Rs = Db.OpenRecordSet("SELECT NomPrenomAge.* FROM NomPrenomAge;")
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Set Qrt = Db.TableDefs("NomPrenomAge")
    Set Rs = Qrt.OpenRecordSet
    ActiveSheet.Range("A1").CopyFromRecordset Rs
    Set Qry = Db.QueryDefs("Maj_NomPrenomAge") '
    Qry.Execute
    Db.Execute "UPDATE NomPrenomAge SET NomPrenomAge.Age = [Age]+1;"
    End Sub

    Citation Envoyé par esimo Voir le message
    Bonjour
    J'ai essayé votre code mais lorsque je lance la procédure l'erreur est toujours la même soit "Erreur 429 un composant ActiveX ne peut pas créer d'objet"...

    Faut il créer une connexion au préalable de ma bdd access vers mon document excel pour permettre à votre procédure de bien pouvoir afficher le résultat de la requête contenu dans cette bdd?
    Si Oui je ne connais pas la manière de faire. Je suis désolé j'ai quelques connaissances en VBA, mais c'est la première fois que j'utilise le transfert de données DAO.
    Images attachées Images attachées  
    Dernière modification par Invité ; 07/09/2014 à 15h36.

  15. #15
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut
    Re...
    Pour ADO vs DAO c'est là :
    https://www.google.com/url?q=http://...tVu_AJ2JBxmWtA
    Et après, on prend ce qu'on préfère!
    Pour le code, je n'ai pas eu à utiliser de requête existante. Les utilisateurs n'ayant pas ACCESS sur leurs postes la MCO est plus facile avec EXCEL.
    Mais si elle est existante, soit elle est fixe et elle peut être mise en fixe dans la chaine "strSQL"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst = cn.Execute(strSQL)
    soit elle peut-être élaborée avec Excel.
    Exemple pour ajouter un enregistrement à la table BDD, le SQL donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     INSERT INTO BDD ( truc_1 ,truc_2 ) VALUES ('valeur1',0)
    .
    On sait bien qu'on peut élaborer n'importe quoi comme chaine de caractères avec Excel, à condition d'être patient et très (très) rigoureux.
    Après c'est pareil pour DAO ou ADO,pour afficher le résultat dans Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveSheet.Range("A1").CopyFromRecordset Rs
    Et pour ADO et/ou DAO, c'est là http://access.developpez.com/cours/"]http://access.developpez.com/cours/"]http://access.developpez.com/cours/

    Je précise que je suis dans un environnement professionnel, avec une version spécifique d'Office 2007 et pas mal de verrouillages réseaux
    Et que tout ce qui est marqué sur developpez.com ne fonctionne pas obligatoirement comme il est dit dans le scénario
    Le mieux est d'essayer les deux (si le temps ou le chef est d'accord).
    Cordialement

Discussions similaires

  1. erreur '429' le composant ActiveX ne peut pas créer l'objet.
    Par sidisadmir dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/04/2013, 19h52
  2. [XL-2007] Erreur 429 Un composant ActiveX ne peut pas créer d'objet
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2013, 15h51
  3. [Débutant] Erreur '429' le composant activeX ne peut pas créer l'objet.
    Par sidisadmir dans le forum ADO.NET
    Réponses: 4
    Dernier message: 23/11/2012, 16h51
  4. Erreur '429' le composant activex ne peut pas créer l'objet
    Par sidisadmir dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 02/11/2012, 10h19
  5. [XL-2010] erreur 429 -un composant ActiveX ne peut pas créer d'objet
    Par Vince89 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/07/2012, 16h09

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