Copier une plage / coller sur autre fichier Excel
Bonjour a tous et a toutes,
Je reviens vers vous pour essayer de résoudre un de mes problème
je m'explique :
J'ai dans mon fichier excel un tableau que je voudrais copier dans un autre fichier
pour cela :
- via un bouton sur la feuille concernés
- copier le tableau jusqu'à la dernière ligne rempli FAIT
- créer un nouveau fichier sur le bureau FAIT
- lui donner un nom FAIT
- l'ouvrir FAIT
- créer un seul onglet et le renommer FAIT
- coller mon tableau en gardant la mise en page source
- enregistrer et fermer le fichier excel créer
- revenir sur mon fichier source
Voici le code que j'ai pu trouver et modifier (je ne pense pas que ça soit le meilleur)
me manque la fin :/
Private Sub CommandButton4_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim DernLigne As Integer
'copie la feuille OT a envoyé
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Sheets("OT a envoyé").Range("A1:G" & DernLigne).Copy
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 5)
xlApp.SheetsInNewWorkbook = 1
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'donner le chemin d'enregistrement et donner un nom
xlBook.SaveAs ("C:\Users\Sébastien\Desktop\OT CMOS.xlsx")
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = "OT"
'On ferme l'application
'xlApp.Quit
Application.CutCopyMode = False
End Sub
Merci d'avance
Bonjour,
Je ne vois pas trop où est le problème parce que copier-coller une plage, c'est :
Plage.copy destination
Pas vraiment sorcier et il suffit de le lire une fois pour pouvoir répéter l'opération... !
Par contre ton code m'intrigue : je ne vois pas bien l'intérêt, travaillant à partir d'Excel, de créer une autre instance de l'application pour une opération aussi simple que créer un classeur, y coller une plage et le sauvegarder...
En reprenant ta macro, j'aurais procédé plutôt ainsi :
Private Sub CommandButton4_Click()
Dim xlBook As Workbook
Dim xlSheet As Worksheet
Dim DernLigne As Integer
'On défini le nombre d'onglets
Appplication.SheetsInNewWorkbook = 1
'On ajoute un classeur
Set xlBook = Workbooks.Add
'On nomme l'onglet du classeur
Set xlSheet = xlBook.Worksheets(1)
xlSheet.Name = "OT"
'copie la feuille OT a envoyé et colle dans nouveau classeur
With ThisWorkbook.Sheets("OT a envoyé").
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
.Range("A1:G" & DernLigne).Copy xlSheet.Range("A1")
End With
'donner le chemin d'enregistrement et donner un nom
xlBook.SaveAs ("C:\Users\Sébastien\Desktop\OT CMOS.xlsx")
'On ferme le classeur
xlBook.Close
End Sub
Si je puis me permettre un autre commentaire, je considère que la place d'un fichier n'est jamais sur le bureau. Alors, j'ignore qui donne ce genre d'exercice mais cela me paraît au moins farfelu !
Si tu regardes les différences avec ta macro d'origine, j'ai supprimé la création d'une instance d'Excel (on y est), j'ai passé la copie après création du classeur pour pouvoir coller en même temps (une seule instruction) et placé l'enregistrement à la suite (un enregistrement au lieu de deux, mais cela ne réduit pas les lignes de code, car le second pouvait intervenir sur la ligne de fermeture en ajoutant l'argument True après Close), et j'ai éliminé le CutCopyMode... (qui n'aurait eu d'utilité que si tu avais fermé le classeur source immédiatement après la copie pour éviter que le système te demande si tu voulais vider le presse-papier, or ce classeur n'est pas fermé, et les opérations accomplies après copie ont déjà vidé le presse-papier).
Cordialement.