Copier des données d'un classeur fermé dans le classeur courant

Sly le globe trotter

XLDnaute Occasionnel
Bonjour,

Après plusieurs recherches sur le net, je suis arrivé à écrire un bout de code. L'objectif est de copier, dans le classeur ouvert duquel la macro se lance, des données provenant d'autres fichiers contenus dans le même dossier.

Code:
Private Sub RgptEval_Click()

Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i, k As Integer
Dim xls As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet

Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.getfolder(ThisWorkbook.Path)
    
Set Files = Dossier.Files
k = 3
If Files.Count <> 0 Then
    For Each File In Files
        If File.Name <> "Synthèse Evaluation Formation.xlsm" And File.Name <> "~$Synthèse Evaluation Formation.xlsm" Then

            Set FeuilleSource = xls.Workbooks.Open(File.Path).Worksheets("Eval")
            Set FeuilleCible = ActiveWorkbook.Worksheets("RgptEval")
            
            With FeuilleSource
                .Range(.Cells(22, 9), .Cells(43, 9)).Copy
            End With

            With FeuilleCible
                [COLOR="Red"].Range(.Cells(6, k), .Cells(27, k)).Paste[/COLOR]
            End With
        
            k = k + 3
        End If
    Next
End If

Mon code plante à la ligne surlignée en rouge (Erreur 438). Pourriez-vous m'aider à débugger ces quelques lignes ?

Mille mercis
Sly
 

Odesta

XLDnaute Impliqué
Re : Copier des données d'un classeur fermé dans le classeur courant

Bonjour

EDIT; 3ieme..


Le classeur en cours change avec l'ouverture d'un autre. ne vaudrait-il pas mieux inverser les lignes ?

Set FeuilleSource = xls.Workbooks.Open(File.Path).Worksheets("Eval")
Set FeuilleCible = ActiveWorkbook.Worksheets("RgptEval")


Cordialement
Olivier
 
Dernière édition:

Sly le globe trotter

XLDnaute Occasionnel
Re : Copier des données d'un classeur fermé dans le classeur courant

Bonjour Odesta,

Je viens de tester le classeur actif juste avant le plantage de mon code et il s'agit bien du classeur dans lequel je veux coller les informations...
J'ai également testé ta proposition mais j'ai toujours la même erreur.

Sly
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Copier des données d'un classeur fermé dans le classeur courant

Merci pour ton aide Odesta !

J'ai continué mes tests...
En modifiant le code comme ceci
Code:
            With FeuilleCible
                .Range(.Cells(6, k), .Cells(27, k)).Select
                Selection.Paste
            End With
le code plante sur la ligne Selection.paste. La plage est cependant bien sélectionnée... Cela provient donc de la fonction paste que je ne dois pas utiliser correctement...

Je prépare les fichiers pour les envoyer.

Merci encore
Sly
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Copier des données d'un classeur fermé dans le classeur courant

En remplaçant le "Paste" par un "PasteSpecial", cela fonctionne a peu près...

Code:
            With FeuilleCible
                .Range(.Cells(6, k), .Cells(27, k)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False ', Transpose:=False
            End With

Le souci maintenant c'est que les valeurs sont bien copiés mais la mise en forme de mon document de départ est modifiée...

Quelqu'un pour me venir une nouvelle fois en aide svp :D

Merci
Sly
 

Sly le globe trotter

XLDnaute Occasionnel
Re : Copier des données d'un classeur fermé dans le classeur courant

Ben c'est que je ne peux pas les dé-fusionner ces cellules...
J'en ai besoin dans mon doc de départ.
Pour contourner le problème, j'ai mis en forme, dans mon doc de départ, les cellules à copier tel que je voulais les voir se coller. En faisant comme ceci, ça fonctionne !

Sly
 

Odesta

XLDnaute Impliqué
Re : Copier des données d'un classeur fermé dans le classeur courant

Sinon, une solution de contournement :

for i = 0 to 21
FeuilleCible.Range(.Cells(i+6, k), .Cells(i+6, k)) = FeuilleSource.Range(.Cells(i+22, 9), .Cells(i+22, 9))

Next
 

Discussions similaires

Statistiques des forums

Discussions
312 611
Messages
2 090 219
Membres
104 452
dernier inscrit
hamzamounir