Problème ADODB.Connection

Bonjour

Je rencontre le problème suivant :

err

Sur la ligne :

 Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"

Dans le code :

Private Sub test()
Dim FichierSource
Dim NomFichier

Fichier = Application.GetOpenFilename("Excel, *.xls;*.xlsx", , "Choix du fichier source")

    Set Cn = New ADODB.Connection
    Set oCat = New ADOX.Catalog

    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Extended Properties=Excel 8.0;"

    Set oCat.ActiveConnection = Cn

    For Each Feuille In oCat.Tables
        Resultat = Resultat & Feuille.Name & vbCrLf
    Next

    MsgBox Resultat

    Set Feuille = Nothing
    Set oCat = Nothing
    Cn.Close
    Set Cn = Nothing

End Sub

A noter l'activation des références suivantes :

ref

C'est la première fois que je code avec ADODB.Connection, mes connaissances sont très limitées, je n'ai que quelque notions apportées des différents forum que j'ai consulté. Bref pas asser pour que je me dépatouille tout seul !

Par avance, merci de l’intérêt porté au sujet

Salut GGautier,

Extended Properties=Excel 8.0;"

Excel 8.0 correspond à Excel 97

Essaye plutôt avec 12.0 !

Bonne journée,

Baboutz

Hello,

Essaye comme ceci :

Set LA_SOURCE = CreateObject("ADODB.Connection")

'--- Connexion ---
With LA_SOURCE
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Mon_Repertoire & "\" & Le_Classeur & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With

R@g

merci à vous deux pour vos réponses !

La proposition de Rag02700 fonctionne

Maintenant je souhaiterais récupérer des valeurs sur le fichier (les cellules Y10 à Y16) et les écrires l'une à la suite de lautre dans la colonne A du classeur où est exécuter le code. Comment faire ?

Voilà le code complet :

Private Sub test()

Fichier = Application.GetOpenFilename("Excel, *.xls;*.xlsx", , "Choix du fichier source")

    Set Cn = CreateObject("ADODB.Connection")
    Set oCat = New ADOX.Catalog

    With Cn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & _
            ";Extended Properties=""Excel 12.0;HDR=NO;"""
        .Open
    End With

    Set oCat.ActiveConnection = Cn

    For Each Feuille In oCat.Tables
        cpt = cpt + 1
        Resultat = Resultat & Feuille.Name & vbCrLf
    Next

    If cpt <> 1 Then Exit Sub

    '-----------

    Set Feuille = Nothing
    Set oCat = Nothing
    Cn.Close
    Set Cn = Nothing

End Sub

Hello,

Juste une petite précision sur :

HDR=NO

J'utilisais ce code pour récupérer une plage de cellule d'un fichier fermé. Le

HDR=NO

définit la non présence d'une ligne d'en-tête sur cette plage.

D'accord mais ça me m'aiguille pas de comment faire pour "importer" les cellules du fichier fermé auquel je suis maintenant connecté

Voici ma procédure :

Public Sub Traitement_Classeur()
Public Const Ma_Plage_N As String = "A6:R500"

Le_Classeur = Dir(Mon_Repertoire & "\" & "*.xlsm") 'Identification du classeur
i = F_Conso_Besoins.Cells(Rows.Count, Col_Ref_Bes).End(xlUp).Row + 1
Do While Len(Le_Classeur) > 0 'Tant qu'on a un classeur
Set LA_SOURCE = CreateObject("ADODB.Connection")

'--- Connexion ---
With LA_SOURCE
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Mon_Repertoire & "\" & Le_Classeur & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With

'----- Requete -----
Texte_SQL = "SELECT * FROM [" & Nom_F_Besoins & "$" & Ma_Plage_N & "]"
Set Requete = LA_SOURCE.Execute(Texte_SQL)

'--- restitution sur feuille classeur cible
F_Conso_Besoins.Range("A" & i).CopyFromRecordset Requete

i = F_Conso_Besoins.Cells(Rows.Count, Col_Ref_Bes).End(xlUp).Row + 1
Le_Classeur = Dir() 'prochain classeur
Loop
End Sub

Bonjour

Avec 2016 et donc PowerQuery intégré je doute qu'ADOB soit la meilleure solution...

Que peux tu nous proposer Chris ?

Bonjour,

Ta demande nécessite de joindre un classeur pour une aide adaptée.

Cdlt.

Voilà un fichier qui nous servira de base donc, dedans le code obtenu via la participation de Rag02700. J'ai donc réalisé une première extraction (2 fois la même) afin d'avoir un visu du résultat attendu

23classeur1.xlsm (18.25 Ko)

RE

Tu peux joindre le classeur source ? Le résultat sans la source ne permet pas grand chose

Autant pour moi, le voilà

Re à tous

J'ai dupliqué l'onglet de la source et changé la date dans la copie pour traiter 2 onglets

Solution PowerQuery ci-jointe :

On précise le fichier à traiter en J1 (plage nommée Fichier)

Powerquery traite le fichier en 6 requêtes et 2 fonctions :

  • Csource : requête qui initialise la source en fonction de Fichier
  • DatesFeuille : fonction qui extrait la date de la feuille
  • RatiosFeuille : fonction qui extrait les ratios de la feuille
  • Dates : requête qui récupère l'ensemble des dates extraites
  • Ratios : requête qui récupère l'ensemble des ratios extraits
  • FInal0 : requête qui combine dates et ratios
  • FinalDetail : requête qui extrait de Final0 les ratios détaillés
  • FinalGlobal requête qui extrait de Final0 les ratios moyens

Cela fonctionne quel que soit le nombre d'onglets dans le fichier source du moment que la structure ne change pas

Après mise à jour de J1, utiliser Données, Actualiser Tout pour traiter ton fichier

14essai1pq.xlsm (32.82 Ko)

Je teste tout ça demain, mais déjà merci du temps passé !

Bonjour,

Bonjour 78Chris,

J'ai pensé à cette solution, pour la fonction DateFeuille, dans la mesure ou la cellule de la date de début est fixe.

Que penses-tu de la chose ?

Cdlt.

fonction datefeuille

RE Jean-Eric

Effectivement cela simplifie.

J'ai vu que tu utilises les coordonnées colonne et ligne : j'ai déjà récupéré cette pratique de tes exemple pour le fichier.

Donc je prends volontiers !

Merci

Rechercher des sujets similaires à "probleme adodb connection"