Copier une plage de cellules d'un classeur vers un autre Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
j
jessyb89
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 9 août 2017
Version d'Excel : 2013 FR

Message par jessyb89 » 18 août 2017, 10:12

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 :D
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 !
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'064
Appréciations reçues : 389
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 18 août 2017, 11:17

Bonjour

Essaie comme ça :
Dim WkCible As Workbook
WkCible = WorkBooks("synthese Usine A")
...
Bye !
j
jessyb89
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 9 août 2017
Version d'Excel : 2013 FR

Message par jessyb89 » 18 août 2017, 11:42

J'ai essayé mais toujours la même erreur, comme s'il ne pouvait pas trouver le classeur "synthese Usine A"...
Une idée ?
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'064
Appréciations reçues : 389
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 18 août 2017, 11:49

Alors, joins tes classeurs et on regardera ça de plus près !
Bye !
j
jessyb89
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 9 août 2017
Version d'Excel : 2013 FR

Message par jessyb89 » 18 août 2017, 13:39

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 !
synthese Usine A TRS ppm V1.xlsm
(739.5 Kio) Téléchargé 52 fois
m
medas
Membre habitué
Membre habitué
Messages : 90
Inscrit le : 8 janvier 2016
Version d'Excel : 2003-2010

Message par medas » 18 août 2017, 14:08

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
j
jessyb89
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 9 août 2017
Version d'Excel : 2013 FR

Message par jessyb89 » 27 août 2017, 19:56

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 !!
j
jessyb89
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 9 août 2017
Version d'Excel : 2013 FR

Message par jessyb89 » 7 septembre 2017, 09:35

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.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message