copier une feuille d'un classeur fermé dans un classeur ouvert

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
r
righilahriz
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 25 janvier 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par righilahriz » 8 février 2019, 14:16

Bonjour à tous,

Je souhaite copier une feuille d'un classeur fermé dans un classeur ouvert. Ayant des connaissances assez limitées en VBA, j'ai essayé de lire des tutoriels ( le silkyroad sur développez.net) mais sans réel succès. Par ailleurs, j'ai trouvé sur le forum un petit bout de code qui permet d'atteindre mon objectif.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub Test()

Dim ConCL As Object
Dim Rs As Object
Dim FeuilleDest As Worksheet
Dim NomFichier As String
Dim FeuilleSource As String
Dim Plage As String

'chemin et nom du classeur cible
NomFichier = "D:\Users\ighilahrizrya\Desktop\SRM 2018 11 27 22H30.xlsm"

'plage à récupérer
Plage = "A:Z"

'nom de la feuille où on doit récupérer les valeurs, à adapter...
FeuilleSource = "Feuil1"

'connexion au classeur
ConnexionCLasseur ConCL, NomFichier, Rs

'effectue la récup
With Rs

.CursorType = 1
.LockType = 3
.Open "SELECT * FROM `" & FeuilleSource & "$" & Plage & "` ", ConCL

If Not Rs.EOF Then

Set FeuilleDest = ActiveWorkbook.Worksheets("Feuil1")

FeuilleDest.Range("A1").CopyFromRecordset Rs

Else

'si la feuille est vide...
MsgBox "Aucun enregistrement renvoyé.", vbCritical

End If

End With

ConCL.Close

Set Rs = Nothing
Set ConCL = Nothing

End Sub

'Sub de connexion (séparée ici pour plus de lisibilité)
Private Sub ConnexionCLasseur(ConnexCL As Object, _
Fichier As String, _
Optional Rs)

'création de l'objet en relation tardive (évite de cocher la référence)
Set ConnexCL = CreateObject("ADODB.Connection")

'si demandé, crée l'objet pour le jeu d'erregistrements
If Not IsMissing(Rs) Then
Set Rs = CreateObject("ADODB.Recordset")
End If

'ouvre la connexion
ConnexCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""

End Sub
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Des que je lance la macro, une erreur s'affiche :
' -2147467259 (80004005)'
External table is not in the format expected


Des que je clique sur débogage, une partie du code est en surbrillance :

ConnexCL.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX= 2;"""

Je travaille avec la version Excel 2013. J'ai par ailleurs activé le Microsoft Active x Data objects.
Il me semble que le problème vient du fait que le classeur cible ( celui ou je vais récupérer mes données) n'est pas au bon format.
Plus précisément, il s'agit d'un classeur avec une seule feuille. Dans celle ci il y a une colonne et une ligne avec des noms et pour chaque couple ligne-colonne correspond une valeur numérique. En gros il s'agit d'une matrice.

Si l'un de vous à la réponse, ca m'aiderait beaucoup pour mon travail.
Merci d'avance :)
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'599
Appréciations reçues : 250
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 8 février 2019, 14:23

bonjour

pour avoir une copie de fichierA dans fichierB, pas besoin de code

vas dans B, en A1 tapes = et va dans A, clique dans A1
tu as maintenant dans B la valeur vue dans A
(ou bien faire copier puis collage avec liaison)
tire cette mini-fromule vers le bas (très loin, pour anticiper l'allongement de A) et vers la droite (même remarque)

tu as dans B un "miroir" de A


amitiés
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
r
righilahriz
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 25 janvier 2019
Version d'Excel : 2016
Version de Calc : 2016

Message par righilahriz » 8 février 2019, 14:40

Bonjour jmd,

Ta solution fonctionne mais devient vite limitante lorsque l'on a une centaine de classeurs à ouvrir pour tout copier sur un seul classeur de synthèse...
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'745
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 8 février 2019, 16:08

Bonjour,
Utilise Power Query pour l'ensemble de tes classeurs.
C'est l'un de ses nombreux intérêts.
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message