Copier une plage de cellules d'un classeur vers un autre

Bonjour,

J'essai de résoudre un problème fort simple, c'est de copier la plage de cellule d'une feuille d'un premier classeur vers une autre feuille d'un autre classeur :

Voici UNE PARTIE du code que j'ai écris d'après mes recherches sur le forum (je débute, merci de votre indulgence )

Dim WkCible As Workbook
WkCible = "synthese Usine A"
l_s_plageSource = "A3:U1000"
l_s_ongletSource = "Database"
l_s_ongletCible = "Database MHH"
l_s_plageCible = "A3:U1000"

ThisWorkbook.Sheets(l_s_ongletSource).Range(l_s_plageSource).Copy WkCible.Sheets(l_s_ongletCible).Range(l_s_palgeCible)

Autre précision : les deux classeurs sont ouverts à ce moment du code !

Merci d'avance pour le coup de main

PS : le fichier serait trop lourd à joindre, je ne recherche que la méthode de calcul pour copier coller sans avoir l'erreur 91 correspondant au fait que la variable objet n'est pas définie !

Bonjour

Essaie comme ça :

Dim WkCible As Workbook
WkCible = WorkBooks("synthese Usine A")
...

Bye !

J'ai essayé mais toujours la même erreur, comme s'il ne pouvait pas trouver le classeur "synthese Usine A"...

Une idée ?

Alors, joins tes classeurs et on regardera ça de plus près !

Bye !

Le mot de passe est : synthese

Je ne peux pas mettre les autres fichiers, ils font plus que 1Mo.

La macro s'appelle mise_a_jour, vous trouverez le code.

Merci d'avance pour votre coup de main !

bonjour essyb89 , gmb, Excelleurs(es),

Je suis sur le même sujet que toi.

            With Workbooks(Filename)
                .Sheets("2011").Range("Z5:AQ" & Range("A65536").End(xlUp).Row - 1).Copy
                ThisWorkbook.Sheets("2011").Range("W5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                .Close
'Application.EnableEvents = False
            End With
         

j'ai lu ton code :

Dim l_dt_dateMin As Date
Dim l_dt_dateMax As Date
Dim l_l_derniereLigne As Long
Dim l_t_memErr As ERR_Mem 'variable utilisée pour la gestion d'erreur
        Dim WkCible As Workbook

    On Error GoTo GestErr

l_l_derniereLigne = 1097

    l_dt_dateMin = Len(frmSelectWeek.txtDateMin.Text)
    l_dt_dateMax = Len(frmSelectWeek.txtDateMax.Text)

    l_s_chemin = chercheChemin("synthese MHH")
    If l_s_chemin <> "" Then
    Call afficheGraph("synthese MHH", 30)
        l_s_fichier = ouvreFichierXLS(l_s_chemin)
        Workbooks(l_s_fichier).Activate
        Application.Run "'synthese Atelier MHH TRS ppm V1.xlsm'!Mod_MAJ.mise_a_jour"

        If l_s_fichier <> "" Then

            l_s_ongletSource = "Database"
            l_s_plageSource = "A3:U1048575"
            l_s_ongletCible = "Database MHH"
            l_s_plageCible = "A3:U1048575" & l_l_derniereLigne
            WkCible = Workbooks("synthese Usine A TRS ppm V1.xlsm")
                ThisWorkbook.Sheets(l_s_ongletSource).Range(l_s_plageSource).Copy_ WkCible.Sheets(l_s_ongletCible).Range(l_s_plageCible)

                    'Workbooks("synthese Usine A TRS ppm V1").Sheets("Database MHH").Range ("A3:U1048575")
                    MsgBox "OK OK"

            End If
            closeFile (l_s_fichier)
'    End If

il te manque un truc dans ton code où coller

dans mon code je lui dis ce que tu dois copier et où tu dois le coller

Re, désolé pour la réponse si tardive, j'étais en congé et faisant ce travail à mon boulot...

Voici le code que j'ai fait après les différents conseils et mes recherches, mais en vain...

l_s_ongletSource = "Database"
            l_s_plageSource = "A3:U1048575"
            l_s_ongletCible = "Database MHH"
            l_s_plageCible = "A3:U1048575" & l_l_derniereLigne
'            WkCible = Workbooks("synthese Usine A TRS ppm V1.xlsm")
                Workbooks(l_s_fichier).Sheets(l_s_ongletSource).Range(l_s_plageSource).Copy
                Set WkCible = GetObject("C:\Users\bonninj\Desktop\Tests\synthese Usine A TRS ppm V1.xlsm")
                Set WkCible = ActiveWorkbook
'                WkCible.Windows(1).Visible = True
                ThisWorkbooks.Sheets(l_s_ongletCible).Range(l_s_plageCible).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

L'erreur 424 Objet requis apparait, je sais maintenant que l'objet Workbook pour mon classeur WkCible n'est pas reconnu.

De plus, lorsque j'écris :

Workbooks(WkCible).Sheets(l_s_ongletCible).Range(l_s_plageCible).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

C'est l'erreur 13 Incompatibilité de type qui survient, comme si finalement WkCible n'était pas un classeur alors qu'au début de mon code, j'ai bien écrit Dim WkCible As Workbook

Qu'est ce qui cloche ??

Merci d'avance !!

Résolu, en réalité il ne faut pas chercher à activer un classeur (Workbook) mais plutôt activer une fenêtre (Windows), ainsi on peut naviguer dans l'instance EXCEL entre différents classeur afin de les faire executer des macros et faire des copier-coller (bien-sûr il faut bien penser à ouvrir le classeur à un moment où à un autre.

Voici le code utilisé pour naviguer entre un classeur (où j'y exécute une macro) et le classeur d'origine où je colle mes données et où se trouve le code ci-dessous.

 Workbooks(l_s_fichier).Sheets(l_s_ongletSource).Range(l_s_plageSource).Copy
                Windows("synthese Usine A TRS ppm V1.xlsm").Activate 'activation par windows et non workbook
                Sheets(l_s_ongletCible).Select
                Range("A3").Select 'on sélectionne une seule cellule pour éviter les conflits de plages de cellules non identiques
                ActiveSheet.Paste

Application.CutCopyMode = False 'désactive la fonction copier-coller pour quitter le presse-papier automatiquement

Merci en tout cas pour vos réponses.

Rechercher des sujets similaires à "copier plage classeur"