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 :

Microsoft.Jet.OLEDB Erreur de compilation [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Points : 156
    Points
    156
    Par défaut Microsoft.Jet.OLEDB Erreur de compilation
    Bonjour,

    Je suis sous XL-2007 mais je dois faire un classeur pour XL-2000.


    Je cherche à lire des données d'une feuille d'un classeur fermé.
    J'ai trouvé la macro qui va bien, la macro d'origine fonctionne parfaitement.

    Je tente donc de l'appliquer à mon classeur.
    Mais j'ai une

    [Erreur de compilation type défini par l'utilisateur non défini]


    Mon code
    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
    Dim source As ADODB.Connection
    Dim requete As ADODB.Recordset
    
    Dim fichier As String, nom_plage As String, texte_SQL As String
    
    'teste si le classeur source est fermé
    If FichOuvert("VF_AgrégationT_ES.xls") = True Then
        MsgBox "Pour que l'opération demandée soit effectuée," & vbCr & _
        "Le classeur ""VF_AgrégationT_ES.xls"" ne doit pas être ouvert. ", vbCritical
        Exit Sub
    End If
    
    ' ouvre la database "source" dans le classeur excel fermé
    fichier = ActiveWorkbook.path & "\VF_AgrégationT_ES.xls"
    Set source = New ADODB.Connection
    source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                    "data source=" & fichier & ";" & _
    
    .....

    Merci de votre aide

    Bon réveillon de Noël à toutes et tous
    Christian

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,

    2 manières à essayer:

    1/ dans VBE objet tu coches la référence
    Microsoft activeX Data Object 2.0 library (2.0 pour xl2000 ou >)
    a effectuer à chaque installation

    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Source As Object, Requete As Object
    ....
    Set Source = CreateObject("ADODB.Connection")
    ....
    Set Requete = CreateObject("ADODB.Recordset")
    ....
    valable quelquesoit la version XL

  3. #3
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Un exemple à adapter. Ici, pas nécessaire de cocher la référence car elle est tardive (création au moment de l'appel).
    Dans la proc "RecupValeurs" pour l'appel de la Sub "ConnectCLasseur" les variables sont passées par référence (j'aurais pû faire une fonction qui me retourne une tableau d'objets mais comme ma proc existe déjà, je me suis pas cassé la tête).
    Il n'est pas obligatoire que le classeur connecté soit fermé à part si c'est utile pour un autre traitement. Le code est commenté pour indiquer les modifs à apporter au nom de la feuille et pour définir la plage.
    Ici, j'ai fais simple en ne récupérant que la valeurs de deux cellules, il est possible de récupérer une plage plus grande mais il faut boucler sur les enregistrements et les champs.

    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
     
     
    Private Sub ConnectCLasseur(ConnectCL As Object, _
                                Fichier As String, _
                                Optional Rs)
     
        Set ConnectCL = CreateObject("ADODB.Connection")
        If Not IsMissing(Rs) Then
            Set Rs = CreateObject("ADODB.Recordset")
        End If
     
        ConnectCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & Fichier & ";" & _
                  "Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""
     
    End Sub
     
    Sub RecupValeurs()
     
        Dim ConnectCL As Object
        Dim Rs As Object
        Dim TblValeur()
        Dim Fichier As String
        Dim NomFeuille As String
        Dim Plage As String
     
                'chemin du classeur
        Fichier = ActiveWorkbook.Path & "\VF_AgrégationT_ES.xls"
     
                'si le classeur n'est pas dans le dossier, fin
        If Dir(Fichier) = "" Then
            MsgBox "Le classeur ne se trouve dans ce dossier !"
            Exit Sub
        End If
     
                'feuille ou s'effectuera la récup, à adapter
        NomFeuille = "Feuil1"
     
                'plage ou s'effectuera la récup, à adapter
                'pour une seule cellule, écrire de la façon
                'suivante : "A1:A1"
        Plage = "A2:B2"
     
                'connecxion au classeur qu'il soit ouvert
                'ou fermé, ceci n'a aucune importance
            ConnectCLasseur ConnectCL, Fichier, Rs
     
                'ici, les valeurs sont récupérées dans un tableau
            ReDim Preserve TblValeur(1 To 2)
     
            With Rs
     
                .CursorType = 1
                .LockType = 3
                .Open "SELECT * FROM `" & NomFeuille & "$" & _
                Plage & "` ", ConnectCL
                TblValeur(1) = .Fields(0).Value
                TblValeur(2) = .Fields(1).Value
     
            End With
     
                'ferme la connection
            ConnectCL.Close
     
                'récupération des valeurs stockées dans le tableau
            Debug.Print TblValeur(1) & "  " & TblValeur(2)
     
        Erase TblValeur
        Set Rs = Nothing
        Set ConnectCL = Nothing
     
    End Sub
    Hervé.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Points : 156
    Points
    156
    Par défaut
    Bonjour

    >> Michel_M, merci de votre réponse, d'ailleurs j'avais relevé plusieurs de vos réponses à ce sujet, ayant à présent Excel2007 je ne trouvais pas comment charger Microsoft activeX Data Object 2.0 library.

    Solution : il faut aller dans Visual Basic, Outil puis Préférence.



    Theze >> Merci de votre code cela m'a permis d'avancer


    Bon noël

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

Discussions similaires

  1. Erreur avec Microsoft.Jet.OLEDB.4.0
    Par turbif08 dans le forum Développement
    Réponses: 8
    Dernier message: 06/12/2013, 10h30
  2. Microsoft Jet OLEDB 4.0 Windows 7
    Par leeloo95 dans le forum Framework .NET
    Réponses: 3
    Dernier message: 16/12/2009, 14h36
  3. Microsoft Jet oledb 4.0 sur Windows 7
    Par leeloo95 dans le forum Windows 7
    Réponses: 0
    Dernier message: 17/11/2009, 09h33
  4. Réponses: 6
    Dernier message: 02/05/2009, 16h40
  5. Microsoft.Jet.OLEDB & Pilote ISAM
    Par Ryansoldier dans le forum Débuter
    Réponses: 0
    Dernier message: 28/04/2009, 13h43

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