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

Excel Discussion :

Erreur de connexion ADODB avec Office 2013 64bits pour fichier .xls [XL-2013]


Sujet :

Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Erreur de connexion ADODB avec Office 2013 64bits pour fichier .xls
    Bonjour à tous,

    Je suis confronté à un problème de connexion ADODB sur Excel 2013 version 64 bits
    La "base de données" est un fichier excel 2003 ".xls" (que l'on ne peut changer)


    Dans ma société nous avons Office 2013 64bits

    Dans mon Code, je crée une nouvelle instance ADO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' Variables pour Connexion ADODB
    Public Cnn As Object, Rs As Object
    Set Cnn = CreateObject("ADODB.Connection")

    Je crée ma chaîne de connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=#MaSourceBdD#;Extended Properties='Excel 8.0;HDR=YES';"
    J'ouvre ma connexion
    Et là, j'ai systématiquement une erreur que je ne comprends pas

    Qui peut m'aider ?

    Cordialement.
    Dernière modification par Invité ; 04/02/2016 à 19h18.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    pourquoi le # à la fin de ton Data Source ?

    Sinon, tu pourrais peut-être essayer avec ce "provider"
    Provider=Microsoft.ACE.OLEDB.15.0
    MPi²

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut Parmi et merci de me répondre

    Citation Envoyé par parmi Voir le message
    Bonjour,
    pourquoi le # à la fin de ton Data Source ?
    C'est juste du mnémotechnique, car je fais une recherche du terme DataSource# que je remplace par le vrai chemin

    Citation Envoyé par parmi Voir le message
    sinon, tu pourrais peut-être essayer avec ce "provider" Provider=Microsoft.ACE.OLEDB.15.0
    Je ne savais pas que cette version existait sur 2013

    Je viens de faire le test, la connexion échoue également !?

    N'y aurait-il pas une option à cocher/décocher dans les options d'Excel 2013 ?

    A+
    Dernière modification par Invité ; 04/02/2016 à 08h57.

  4. #4
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut message modifié suite à la relecture de ta demande
    Bonjour,
    je ne sais pas si cela t'aidera mais regarde ce lien et la syntaxe utilisée pour Excel.
    D'autre part je vois que tu utilises une variable Conn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Conn ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MaSourceBdD#;Extended Properties='Excel 8.0;HDR=YES';"
    Conn me semble être une chaîne de caractère. Pourquoi la déclares-tu en variable objet ?
    D'autre part à quoi correspond sConn ? A+

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il y a effectivement erreur sur la nomenclature des objets, mais aussi sur la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Cnn = CreateObject("ADODB.Connection")
    Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MaSourceBdD#;Extended Properties='Excel 8.0;HDR=YES';"
    MPi²

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir Messieurs,

    Effectivement c'est de ma faute, je n'ai pas fait attention désolé

    Ce n'est pas 'Set Conn", mais "sConn", puisque c'est ma variable texte de chaine de connexion

    Voici les explications à ce que j'ai pour une solution que j'ai trouvé en cherchant, c'est d'utiliser le provider MSDASQL

    Dans un module global, je déclare mes constantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Chaine de connexion pour accès en BdDPublic Const sConnect As String = "Provider=MSDASQL;DSN=Excel Files;DBQ=#sPathBdD#;ReadOnly=True;HDR=Yes';"
    Public sConn As String
    ' Constantes
    ' adOpenForwardOnly = 0 ' Ne semble pas fonctionner !?
    ' adOpenStatic = 3
    Public Const CursorType = 3
    Dans mon Module de connexion ADODB
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    Option Explicit
     
    ' Flag d'erreur de connexion
    Dim FlgErrCon As Boolean
     
     
    ' sPathBdD = nom et chemin complet de la Base de données
    ' sTable = nom de la feuille contenant les données
    ' sCrit = nom du champ contenant le critère de filtre
    ' vCrit = valeur du filtre
    ' ColId = colonne ID unique
    ' FlgTout = Afficher tout le matériel
    Sub RemplirCbxCrit(ObjCbx As MSForms.ComboBox, sPathBdD As String, sTable As String, _
        sCrit As String, vCrit As String, ColId As Integer, FlgTout As Boolean)
      Dim sRqt As String, sCond As String, Sql As String, Inc As Integer
      Dim NbField As Integer, NbRecord As Integer
      ' En cas d'erreur
      FlgErrCon = False
      On Error GoTo Erreur_Proc
      ' Vider la combobox en question
      ObjCbx.Clear
      ' Créer une nouvelle instance ADO
      Set Cnn = CreateObject("ADODB.Connection")
      ' Créer la connexion selon la version d'Excel
      sConn = Replace(sConnect, "#sPathBdD#", sPathBdD, Compare:=vbTextCompare)
      ' Tenter d'uvrir la connexion
      Cnn.Open sConn
      ' En cas d'erreur message d'information à l'utilisateur
      If FlgErrCon = True Then
        MsgBox "Impossible de se connecter à la base de données !", vbCritical, "OUPS..."
        GoTo FermetureCnn
      End If
      ' Préparer la requête
      If InStr(1, sTable, " ") > 0 Then
        Sql = "SELECT * FROM ['" & sTable & "$']"
      Else
        Sql = "SELECT * FROM [" & sTable & "$]"
      End If
      ' S'il s'agit du matériel on saute directement
      If InStr(1, ObjCbx.Name, "Mat") > 0 Then GoTo FiltreMatériel
      ' Préparer la condition pour les moyens humains
      If InStr(1, vCrit, "*") > 1 Then
        sCond = "WHERE (" & sCrit & " Like '" & Replace(vCrit, "*", "") & "');"
      ElseIf InStr(1, vCrit, "*") = 1 Then
        sCond = ";"
      Else
        sCond = "WHERE " & sCrit & "='" & vCrit & "';"
      End If
      GoTo SuiteRequète
      '
      ' Préparer la condition pour les moyens matériel
    FiltreMatériel:
      ' Préparer la condition pour les moyens humains
      sCond = "WHERE ("
      ' Si la checkbox tout afficher est à FAUX
      If FlgTout = False And InStr(1, vCrit, "AFFECTATION") = 0 Then
        sCond = sCond & "NOM_Prénom Like 'SANS AFFECTATION') AND ("
      End If
      ' Ensuite affecter l'autre condition
      If InStr(1, vCrit, "*") > 1 Then
        sCond = sCond & sCrit & " Like '" & Replace(vCrit, "*", "") & "');"
      ElseIf InStr(1, vCrit, "*") = 1 Then
        sCond = ";"
      Else
        sCond = sCond & sCrit & "='" & vCrit & "');"
      End If
      '
    SuiteRequète:
      ' Créer la syntaxe de la requête
      sRqt = Sql & " " & sCond
      ' Créer un nouveau Recordset et l'ouvre
      Set Rs = CreateObject("ADODB.Recordset")
      Rs.Open sRqt, Cnn, CursorType
      ' En cas d'erreur on stop tout
      If FlgErrCon = True Then GoTo FermetureRs
      ' Nombre de champ
      NbField = Rs.Fields.Count - 1
      ObjCbx.ColumnCount = NbField + 1
      ObjCbx.BoundColumn = ColId
      ' Pour chaque enregistrement
      For NbRecord = 0 To Rs.RecordCount - 1
        ' Ajouter le 1er champ au combobox
        If IsNull(Rs(0)) Then
          ObjCbx.AddItem "REC" & Format(NbRecord, "00")
        Else
          ObjCbx.AddItem Rs(0)
        End If
        ' Pour chaque autre champ l'ajouter
        For Inc = 1 To NbField
          If Rs(Inc).Name = "PxU" Then ColPx = Inc
          If Not IsNull(Rs(Inc)) Then
            ObjCbx.List(ObjCbx.ListCount - 1, Inc) = Rs(Inc)
          Else
            On Error Resume Next
            ObjCbx.List(ObjCbx.ListCount - 1, Inc) = "."
            On Error GoTo 0
          End If
        Next Inc
        Rs.MoveNext
      Next NbRecord
     
    ' Fermeture du Recordset
    FermetureRs:
      Rs.Close
      Set Rs = Nothing
     
    ' Fermeture de la connexion
    FermetureCnn:
      Cnn.Close: Set Cnn = Nothing
      On Error GoTo 0
      Exit Sub
     
     
    Erreur_Proc:
      LogError Err, "Sub RemplirCbxCrit(ObjCbx" & ObjCbx.Name & ", sPathBdD=" & sPathBdD & ", sTable=" & sTable & ", sCrit=" & sCrit & ", vCrit=" & vCrit & ", ColId=" & ColId & ")"
      FlgErrCon = True  ' Mettre le FLAG d'erreur de connexion à vrai
      Resume Next
    End Sub

    Cela semble fonctionner pour une majorité de machine, mais j'ai un collègue que est encore bloqué sur son 2013 64bits
    La connexion à la BdD ne se fait pas, alors que tous les paramètres sont bons

    J'y suis presque sur ce poste

    A+

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    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 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Juste au cas où tu y trouverais ton bonheur:

    https://www.connectionstrings.com/excel/
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut Clément

    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,
    Juste au cas où tu y trouverais ton bonheur:
    https://www.connectionstrings.com/excel/
    Merci, je connais

    Mais en utilisant cette méthode sur un Excel 2013 64bits, cela ne fonctionne pas

    A+

  9. #9
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Cela semble fonctionner pour une majorité de machine...
    Et ces machines sont équipées de quelle version d'Office ?
    A+

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut davido84

    Citation Envoyé par davido84 Voir le message
    Et ces machines sont équipées de quelle version d'Office ?
    A+
    Et bien c'est là qu'était le souci
    Nous avions jusqu'à présent des machines masterisées avec un Pack Office 2010 32bits
    Et actuellement ce sont des machines mastérisées avec le pack Office 2013 64bits... radical le changement

    Du coup je passe par une compilation conditionnelle en fonction de la version
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' Chaine de connexion pour accès en BdD' En fonction de la version Excel 32/64 bits
    #If Win64 Then
      ' Version 64bits
      Public Const sConnect As String = "Provider=MSDASQL;DSN=Excel Files;DBQ=#sPathBdD#;ReadOnly=True;HDR=Yes';"
    #Else
      ' Version 32bits
      Public Const sConnect As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=#sPathBdD#;Extended Properties='Excel 8.0;HDR=Yes'"
    #End If
    Le problème est résolu pour moi

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

Discussions similaires

  1. synchronisation outlook avec office 2013
    Par fdanteuille dans le forum SAGE
    Réponses: 3
    Dernier message: 18/05/2015, 13h36
  2. Erreur de connexion Postgresql avec PHP
    Par gentil2005 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/11/2012, 18h12
  3. Erreur de connexion oracle avec un web service
    Par fatenatwork dans le forum Services Web
    Réponses: 2
    Dernier message: 28/04/2008, 11h01
  4. [VB6] Erreur sur Connexion Adodb
    Par jerzy59 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 09/05/2006, 10h44

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