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 :

ACE.OLEDB.12 fonctionne sur une machine et pas l'autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut ACE.OLEDB.12 fonctionne sur une machine et pas l'autre
    Bonjour à tous,

    En cherchant à ouvrir une base de données en .mdb j'en suis arrivé à utilisé une macros (fournie grâce à l'aide des forums) qui ouvre cette base de données. L'idée est maintenant de lier tout simplement la BDD et travailler sous PowerQuery. Le problème que je rencontre est que cette macros fonctionne sur ma machine perso et pas ma pro. Est ce que vous auriez une idée d'où regarder pour corriger cette erreur?

    Erreur d'exécution'-2147467259 (80004005)':
    Impossible d'ouvrir une base de données crée avec une version antérieur de votre application.
    C'est le même message d'erreur que lorsque j'essaye d'ouvrir le .mdb avec Access 2016 (d'où le passage détourné par Excel)

    Machine perso:
    Windows 10 Familiale 64bits, Excel 2016 pro 64bits

    Machine pro:
    Windows 10 Pro 64 bits, Excel 2016 Office 365 64bits

    Sur les 2 machines j'ai les même références dans la librairie et dans le même ordre
    • Visual Basic For Applications
    • Microsoft Excel 16.0 Object Library
    • OLE Automatisation
    • Microsoft Office 16.0 Object Library
    • Microsoft Forms 2.0 Object Library
    • Microsoft Windows Common Controls 6.0 (SP6)


    Je suis persuadé qu'il doit y avoir une histoire d'autorisation (j'ai checké les REGSVR32 il me semble similaire) ou de répertoire de fichier .dll manquant ou autre, mais impossible de savoir.
    Est ce que vous auriez une idée de comment je peux trouver et corriger cet écart entre mes 2 machines?

    Merci d'avance.

    PS: La macro concernée est la suivante: (J'ai essayé avec le JET.OLEDB.4.0 mais sous office 64bits... )

    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
    Option Explicit
     
    'Public Const PRVD = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="
    Public Const PRVD = "PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE="
     
     
    Sub RAZ()
    Dim Feuil As Worksheet
     
        Application.DisplayAlerts = False
        For Each Feuil In ThisWorkbook.Sheets
            If Not Feuil.Name = "Feuil1" Then Feuil.Delete
        Next Feuil
        Application.DisplayAlerts = True
    End Sub
     
     
    Sub lister_tables()
    Dim BDD As String
    Dim Cnx As Object, Cat As Object, Tbl As Object
     
        BDD = NDF_A_LIRE
        If Not BDD = "Faux" Then
            Set Cnx = CreateObject("ADODB.Connection")
            Cnx.Open PRVD & BDD
     
            Set Cat = CreateObject("ADOX.Catalog")
            Set Cat.activeconnection = Cnx
     
            Set Tbl = CreateObject("ADOX.Table")
            For Each Tbl In Cat.Tables
                If Tbl.Type = "TABLE" Then
                    Sheets.Add After:=ActiveSheet
                    ActiveSheet.Name = Tbl.Name & "_"
                    lirecontenu BDD, Tbl.Name
                End If
            Next
     
            Cnx.Close
            Set Cnx = Nothing
            Set Cat = Nothing
            Set Tbl = Nothing
        End If
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Sous réserve de la confirmation par le modérateur je te suggèrerai
    ACE.OLEDB.16

  3. #3
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Alors sur ma machine perso ça ne fonctionne plus, j'ai le même message d'erreur. Et sur ma machine pro, rien non plus.

    Erreur d'exécution'-2147467259 (80004005)':
    Impossible d'ouvrir une base de données crée avec une version antérieur de votre application.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Sur les machines 2010 avec office 2016, j'arrive a ouvrir les mdb!

    Je pense que tu devrais crée une connexion en utilisant le menu connexion d'excel avec l'assistant et après regarder le paramètres de celle ci!

    Il est vrai qu'on a pas beaucoup de recule sur 2016 pour connaitre toutes les astuces!

    Je ne pourrais pas faire de testes sur 2016 avant lundi!
    Dernière modification par Invité ; 03/03/2018 à 12h30.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Sous réserve de la confirmation par le modérateur je te suggèrerai
    ACE.OLEDB.16
    Pas compris l'histoire du modérateur... ^^

    Citation Envoyé par dysorthographie Voir le message
    [...]

    Je pense que tu devrais crée une connexion en utilisant le menu connexion d'excel avec l'assistant et après regarder le paramètres de celle ci!

    [...]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Avec office 2016?
    La partie chiante c'est que la gestion de données n'est pas la même entre le 2016 classique et la version office 365. Ce que je trouve sur un n'est pas forcément présent sur l'autre

    Mais je pense avoir identifié la source!
    Sur ma machine j'ai dans la liste des sources de données utilisateur (dans l'administrateur de source de données ODBC (32bits) une source intitulée Microsoft acces driver 64b qui gère les .mdb et .acccdb!
    Qui n'est pas présente sur ma machine pro!


    EDIT: Non, c'est une source que j'avais créée. Je l'ai donc recréée et j'ai un nouveau message d'erreur via l'assistant de connexion:


    Impossible de se connecter
    Nous avons rencontré une erreur lors de la tentative de connexion.

    Détails : « Une erreur s'est produite pendant la lecture des données du fournisseur : 'Le fournisseur de données .Net Framework pour OLEDB (System.Data.OleDb) ne prend pas en charge le fournisseur Microsoft OLE DB pour les pilotes ODBC (MSDASQL). Utilisez le fournisseur de données .Net Framework pour ODBC (System.Data.Odbc).' »

  7. #7
    Invité
    Invité(e)
    Par défaut
    Vas sur le site de Microsoft et télécharges le MDAC! Sens garantie!

  8. #8
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Oui, j'avais déjà essayé, sans succès mais je vais réessayer, sait on jamais

    Non, rien n'y fait, ça ne fonctionne ni en 12 ni en 16 et je n'arrive pas à lier depuis les données non plus.
    Et je n'arrive plus à faire fonctionner la liaison sur mon perso non plus...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ce qui est sur c'est qu'il faut trouver comment ça fonctionne avec 365, qui pour le coup m'es inconnu, après on pourra ajuster le tire avec les directives de compilation!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #if 365 then
             PRVD = "PROVIDER=MICROSOFT.ACE.OLEDB.365;DATA SOURCE="
    #else
              PRVD = "PROVIDER=MICROSOFT.ACE.OLEDB.12.0;DATA SOURCE="
    #end if
     
    #select case
    #Case
    #case else
    #end select

  10. #10
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Donc sous le #case else je colle la macros qui fonctionnait sur mon perso?

    Je n'y comprends plus rien, jeudi soir elle a fonctionné et aujourd'hui j'ai
    Erreur d'exécution'-2147467259 (80004005)':
    Impossible d'ouvrir une base de données crée avec une version antérieur de votre application.
    Pourtant je me suis remis en OLEDB.12.0

  11. #11
    Invité
    Invité(e)
    Par défaut
    Le caise c'est pour faire la même chose que le #If sauf que je peux avoir
    #case 365
    #case win7
    #case xp
    Par exemple

    Il faut savoir si ce n'est que le drivers ODBC qui change ou le code!

    Peut-être qu'il faut utiliser de drivers en x85 ou en who64 c'est lié au répertoire programme file!

    Si tu tape regedte dans Cortana tu pourra faire une recherche sur Odbc dans la base de registre!

    Il est possible que le problème vienne de creatObject qui recherche sur un environnement 64 bits et pas en 32!

    J'ai fourni un creatobjec32 sur ce même forum mais je ne le retrouve pas!

    Et comme il provient de recherche sur internet difficile de le reproduire et de surcroît je ne sais pas si ca resoudrait ton problème!

    Donc moralité j'ai une application qui fonctionne sur certains environnement et pas d'autre! Je cherche à le faire fonctionner sur un autre environnement même si ca ne fonctionne plus sur mes autres machine sachant qu'au pire je corrigerai grâce aux directives de compilations!

    Les directives de compilations permettent d'adapter le code à l'environnement mais ne t'absout pas de connaître le bon code!
    Dernière modification par Invité ; 03/03/2018 à 15h41.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    D'ailleurs je suis très étonné que le ACE.12.0 ait pu fonctionner à un moment car, pour ouvrir une bdd en .mdb, sous office 2016 seul le JET.4.0 est indiqué mais il n'y a pas de version en 64 bits. Je suis très embêté que ça ne fonctionne plus et je n'ai pourtant pas touché à autre chose que le provider ACE et JET + le numéro de version...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Oui je suis étonnée moi même!
    Voila ce qui tout ce que j'ai utilisé dans ma vie professionnelle!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Case ACCESS97
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & Fichier
        Case ACCESS2000
            GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Persist Security Info=False"
        Case ACCESS2012
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";"
    Case ACCESS2016
            GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=" & Fichier & ";"
    Pour 2016 une petite différence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Passwpord=""
    Cnx.Open PRVD & BDD,"Admin",Passwpord

  14. #14
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Ah oui lors de mes tentatives de connexions via les données, j'ai effectivement du renseigner Admin et pas de mot de passe. Je viens de corriger le code en conséquence mais toujours la même erreur. Il semble que le ACE.OLEDB.12 ou 16 soit incompatible avec le .mdb.

    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
    Option Explicit
     
    'Public Const PRVD = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="
    Public Const PRVD = "PROVIDER=MICROSOFT.ACE.OLEDB.16.0;DATA SOURCE="
     
     
    Sub RAZ()
    Dim Feuil As Worksheet
     
        Application.DisplayAlerts = False
        For Each Feuil In ThisWorkbook.Sheets
            If Not Feuil.Name = "Feuil1" Then Feuil.Delete
        Next Feuil
        Application.DisplayAlerts = True
    End Sub
     
     
    Sub lister_tables()
    Dim BDD As String
    Dim Cnx As Object, Cat As Object, Tbl As Object
     
        BDD = NDF_A_LIRE
        If Not BDD = "Faux" Then
            Set Cnx = CreateObject("ADODB.Connection")
            Cnx.Open PRVD & BDD, "Admin", ""
     
            Set Cat = CreateObject("ADOX.Catalog")
            Set Cat.activeconnection = Cnx
     
            Set Tbl = CreateObject("ADOX.Table")
            For Each Tbl In Cat.Tables
                If Tbl.Type = "TABLE" Then
                    Sheets.Add After:=ActiveSheet
                    ActiveSheet.Name = Tbl.Name & "_"
                    lirecontenu BDD, Tbl.Name
                End If
            Next
     
            Cnx.Close
            Set Cnx = Nothing
            Set Cat = Nothing
            Set Tbl = Nothing
        End If
    End Sub
     
     
    Sub lirecontenu(NDF As String, Tbl As String)
    Dim Requete As String, result As Integer
     
        Requete = "SELECT * FROM [" & Tbl & "] "
        result = Import.Query(Requete, NDF)
    End Sub
     
     
    Function NDF_A_LIRE() As String
        ChDrive (Left(ActiveWorkbook.Path, 1))
        ChDir ActiveWorkbook.Path
        NDF_A_LIRE = Application.GetOpenFilename("Fichiers Access,*.mdb;*.accdb")
    End Function

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je vais taché de regarder demain sur 2016!

  16. #16
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Je pense avoir trouvé la réponse à mon problème!

    Mais mes connaissances ne sont pas assez poussées pour comprendre les solutions.
    Est ce que je dois créer un ODBC 64 bits pour chacune de mes bases de données? Où est ce que je peux automatiser ça via une liste contenant les adresses des bases?
    L'architecture des mes bases n'est pas très pratique (C:\Compta\database\cpta\Année\Client) et j'aimerai éviter d'avoir à faire la manip environ 150 fois et rajouter une nouvelle base chaque année.

    https://www.connectionstrings.com/us...-environments/

    EDIT: https://www.connectionstrings.com/ne...er-for-ole-db/

    Je vois qu'il y aurait aussi la possibilité de se connecter avec .net framework? Je n'ai pas la moindre idée de ce que c'est mais si ça peut s'intégrer dans une macro qui irait chercher mes .mbd ça serait extraordinaire!

    EDIT2:
    Je viens de voir après une reconnexion en ODBC dans les requêtes ce langage M (je sais ce que c'est mais je ne le maitrise pas du tout). Est ce que je ne pourrais pas à partir de ce code écrire une requête pour créer les connexions que je veux à mes différentes .mdb? Ce qui serait peut être le plus simple à faire?
    let
    Source = Odbc.DataSource("dsn=Microsoft acces diver 64b", [HierarchicalNavigation=true]),
    #"C:\Users\Pitou\Desktop\qcompta.mdb_Database" = Source{[Name="C:\Users\Pitou\Desktop\qcompta.mdb",Kind="Database"]}[Data],
    Personnalisé1 = #"C:\Users\Pitou\Desktop\qcompta.mdb_Database"
    in
    Personnalisé1

  17. #17
    Inactif  

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

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

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

    Citation Envoyé par grisounours Voir le message
    Je pense avoir trouvé la réponse à mon problème!

    Je vois qu'il y aurait aussi la possibilité de se connecter avec .net framework? Je n'ai pas la moindre idée de ce que c'est mais si ça peut s'intégrer dans une macro qui irait chercher mes .mbd ça serait extraordinaire!
    La méthode idéale d'utiliser le Framework .net, c'est de le faire avec un langage .net, comme VB.net ou C#

    Pour utiliser un composant .net avec Office, cela demande un paquet se simagrées assez ardus.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Comptable
    Inscrit en
    Août 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 43
    Points : 17
    Points
    17
    Par défaut
    Autant le VBA et le langage M je peux en voir l'utilité et m'en servir occasionnellement autant ces langages inconnu je suis pas sûr que ce soit très productif. Je suis comptable et je veux juste optimiser mon temps de travail et l'information que je produis pour mes clients.

  19. #19
    Inactif  

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

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

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

    Citation Envoyé par grisounours Voir le message
    autant ces langages inconnu je suis pas sûr que ce soit très productif. Je suis comptable et je veux juste optimiser mon temps de travail et l'information que je produis pour mes clients.
    Justement, Visual Studio Community est gratuit. Tu peux l'utiliser pour piloter Excel comme tu le ferais en VBA. Tu peux l'utiliser pour créer des fichiers Office sans avoir Office. Tu peux l'utiliser pour créer des applications compilées, plus efficaces que VBA.

    Et surtout VS permet, autant en VB.net qu'en C# de faire des applications plus universelles pour les parcs hétéroclites d'Office (versions 2003 à 2016, et, espérons, avec 2019 qui devrait être disponible, d'abord sur Office 365, au printemps et un peu plus tard pour les autres. Et puis, c'est la même chose pour les versions 32 bits et 64 bits (versions 2010 et suivantes).

    Mais bon, c'est vrai qu'il faut apprendre, mais de VBA à VB.net, cela reste quand même plus simple que l'on pense.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai créé une connexion à une base de données Access 365 avec le menu d'excel!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
    With CreateObject("Adodb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Rep\Fichier.mdb;Mode=Share Deny Write;Jet OLEDB:Engine Type=6;"
        .Execute ("Select *  from [Tests];")
        .Close
    End With
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/01/2017, 16h52
  2. HttpWebRequest fonctionne sur une appli console, pas sur une appli Web
    Par hollywood dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 23/04/2009, 14h34
  3. Réponses: 0
    Dernier message: 09/06/2008, 09h32
  4. Réponses: 0
    Dernier message: 03/04/2008, 15h14
  5. Réponses: 6
    Dernier message: 11/07/2007, 13h29

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