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
Set Source = New ADODB.Connection With Source .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.14.0;Data Source=" _ & Fichier & ";Extended Properties=""Excel 14.0;HDR=No;IMEX=0;""" .Open End WithJ'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
Set Source = CreateObject("ADODB.connection") 'ald Set Source = New ADODB.ConnectionMicrosoft ActiveX Data Objects Recordset 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library
Cela devrait marcher non?