Menu

Copier données d'un classeur fermé vers classeur ouvert (VBA) [Résolu/Fermé]

Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
Bonjour,
Après de nombreuses recherches sur comment copier des données d'un classeur fermé vers un classeur ouvert avec VBA, j'en viens à créer un sujet car je ne comprend pas d'ou vient mon problème. Voici mon code :

Sub ExtraireValeurFichierFermé()
    Dim Source As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim ADOCommand As ADODB.Command
    Dim Fichier As String, Cellule As String, Feuille As String
 
    'Adresse de la plage contenant les données à récupérer
    Cellule = "A13:D20000" 'j'ai essayé avec une plage dynamique de type Range("A13:Q13").Select puis en dessous Range(Selection, Selection.End(xlDown)).Select mais cela ne marche pas

    Feuille = "Detail Tickets Aux Fournisseurs$" 'c'est le nom de ma feuille avec $ à la fin
    'Chemin complet du classeur fermé ci-dessous
    Fichier = "S:\Mails\Acc.xlsx"
 
    Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=0;"
 
    Set ADOCommand = New ADODB.Command
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
 
    Set Rst = New ADODB.Recordset
    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
 
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
 
    'dans le code initial la personne colle ses données en A2 ce qui donne Range("A2").CopyFromRecordset Rst
    'mais en ce qui me concerne j'aimerais coller les données les unes à la suite des autres car j'aurais des données à aller chercher dans plusieurs fichiers fermés du coup j'ai tenté ça :
    Range("A1048576").End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    Selection.CopyFromRecordset Rst
    
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Sub


A savoir que Le fichier fermé est en XLSX, que j'utilise Excel 2013 et que j'ai bien activé Microsoft ActiveX Data Objects recordset 6.0 Library et Microsoft ADO Ext. 6.0 for DDL and Security pour permettre les connexions.

Le code bug en disant que "run time error 3001: arguments are of the wrong type, are out of acceptable range, or are in conflict with one another" à ce niveau là:

    Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=0;
"

Est-ce une question de ACE au lieu de JET ? ou bien de OLEDB.12 au lieu de .4 ?

Tout indice serait génial.

Merci pour votre aide

Ben
Afficher la suite 

1 réponse

Messages postés
14356
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2019
1371
0
Merci
Bonjour,
pour Excel 2013
Source.Open "Provider=Microsoft.Jet.OLEDB.15.0;" & _
"Data Source=" & Fichier & ";Extended Properties=""Excel 15.0;HDR=No;IMEX=0;"
f894009
Messages postés
14356
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2019
1371 > Jodu34130
Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
Re,
Mettre
.Provider = "Microsoft.Jet.OLEDB.4.0"

en commentaire
apres faut voir ce que vous avez en references cochees
J'utilise ceci
Set Source = CreateObject("ADODB.connection")
'ald
Set Source = New ADODB.Connection
Jodu34130
Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
J'ai :
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library
Cela devrait marcher non?
f894009
Messages postés
14356
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2019
1371 > Jodu34130
Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
Re,

Avec ceci,
http://www.cjoint.com/c/GHbndZSAeif

en cherchant 14 ald de 15 pour vous

Utile pour ecrire dans classeur ferme
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library
Jodu34130
Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
J'ai coché les deux "14 Object Library" et les deux
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library

Mon code ressemble maintenant à cela :

Set Source = CreateObject("ADODB.connection")
With Source
'.Provider = "Microsoft.Jet.OLEDB.4.0" 'avec cette ligne en commentaire
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.14.0;Data Source=" _
& Fichier & ";Extended Properties=""Excel 14.0;HDR=No;IMEX=1;"""
.Open
End With


Mais il y a toujours une erreur au niveau du ".Open" en me disant que le provider est introuvable
f894009
Messages postés
14356
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2019
1371 > Jodu34130
Messages postés
5
Date d'inscription
mercredi 24 mai 2017
Statut
Membre
Dernière intervention
1 août 2017
-
Re,
Essayez en enlevant remettent la ligne en commentaire

si pas ok, mettez votre fichier a dispo

Suite:
Ai teste votre code modifie pour excel 12 ou 15 et ca marche !!!!!!!!!!!!!!!!!!