Copier données d'un classeur fermé vers classeur ouvert (VBA)
Résolu
Jodu34130
Messages postés
8
Statut
Membre
-
f894009 Messages postés 17413 Statut Membre -
f894009 Messages postés 17413 Statut Membre -
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 :
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à:
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
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
A voir également:
- Vba copier données classeur fermé
- Fuite données maif - Guide
- Comment copier une vidéo youtube - Guide
- Rouvrir onglet fermé chrome - Guide
- Super copier - Télécharger - Gestion de fichiers
- Application se ferme toute seule android - Guide
12: Excel2007
14: Excel2010
J'ai essayé avec ton bout de code et le message d'erreur est le suivant : "run time error 3706 : provider cannot be found. It may not be properly installed" et apparait sur le .Open
Est-ce du au fait que le .Provider = "Microsoft.Jet.OLEDB.4.0" est différent du Provider dans .ConnectionString = "Provider=Microsoft.ACE.OLEDB.14.0 ?
Mettre
en commentaire
apres faut voir ce que vous avez en references cochees
J'utilise ceci
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library
Cela devrait marcher non?