XL 2016 Copier coller feuille dans un autre classeur excel

StanislasC

XLDnaute Nouveau
Bonjour,

Je bloque sur un code VBA et je sollicite votre aide :)

J'essaye de réaliser une Macro VBA qui s'active selon une condition particulière et qui copie une feuille, la colle dans un autre classeur mais aussi fait en sorte que ce soit un coller qui "désactive les formules" qui étaient présentes sur la feuille initiale car ce sont des données qui s'écrasent tous les mois. Ce code a pour but pour moi de faire une sauvegarde des données du mois avant qu'elles ne soient écrasées pour un nouveau mois.

Je mets en PJ un fichier test qui je l'espère vous aidera à comprendre mon besoin

-Dans les cellules de A2 à A16 ce sont des formules qui affiches des résultats chiffrés, lorsqu'on arrive au dernier jour du mois, tous les résultats de ces formules affichent ""
Lorsque toutes les cellules affichent "", c'est la condition de déclenchement du copier coller de cette même feuille dans un autre classeur Excel.

-Lors de ce copier coller, j'aimerai aussi que la nouvelle feuille soit renommé par les cases A20 et B20 dans l'Excel.

Là où je ne sais pas si c'est possible, c'est de faire en sorte que cette nouvelle feuille ne soit pas affectée par les MAJ de la feuille d'origine car ce sont techniquement des formules que l'on copie.

Merci d'avance pour l'aide que vous pourrez m'apporter.
N'hésitez pas à me demander des précisions si je n'ai pas été clair sur certains points.

Stanislas.
 

Pièces jointes

  • Fichier Test VBA copier coller.xlsm
    11.3 KB · Affichages: 9

xUpsilon

XLDnaute Accro
Bonjour,

Si la condition de déclenchement est que les cellules soient vides, et que c'est la même plage à copier, vous n'allez copier que du texte vide, même si c'est un copie/colle valeur. Soit il faut copier une autre plage, soit il faut que la condition soit autre chose, mais je doute que vous soyez intéressé par un copie/colle d'une plage vide.

Bonne journée,
 

xUpsilon

XLDnaute Accro
Voici une possibilité pour aller chercher un fichier dans lequel rajouter une feuille et copier/coller valeur une certaine plage.
Il faut encore l'adapter.
VB:
Const sWbk_Cible As String = "Chemin_du_fichier"

Sub CopieColle()

Dim oWbk_Source As Excel.Workbook
Set oWbk_Source = ThisWorkbook
Dim oWs_Source As Excel.Worksheet
Set oWs_Source = oWbk_Source.Worksheets(1)

For nLig = 2 To 16
    If oWs_Source.Range("A" & nLig) <> "" Then Exit Sub
Next nLig

Dim oWbk_Cible As Excel.Workbook
Set oWbk_Cible = Workbooks.Open(Filename:=sWbk_Cible)
Dim oWs_Cible As Excel.Worksheet
Set oWs_Cible = oWbk_Cible.Worksheets.Add

oWs_Cible.Name = oWs_Source.Range("A20") & " " & oWs_Source.Range("B20")
oWs_Source.Range("A2:A16").Copy
oWs_Cible.Range("A2:A16").PasteSpecial xlPasteValues

End Sub

Bonne journée
 

StanislasC

XLDnaute Nouveau
J'ai essayé ce code en l'appliquant à mes vrais fichier mais rien ne ce passe, je ne sais pas si c'est une erreur de ma part ou si quelque chose ne fonctionne pas.

Mais je me demandais aussi si ce code là copie colle une feuille entière ou donc juste la plage de donnée "A2:A16") que tu notes

Voici le code que j'ai en actualisant avec mes données :

Const FTD As String = "chemin du fichier" '(j'ai mis le bon chemin dans mon code)


Dim fichier_source As Excel.Workbook

Set fichier_source = ThisWorkbook

Dim feuille_source As Excel.Worksheet

Set feuille_source = fichier_source.Worksheets(8)


For nLig = 15 To 37

If feuille_source.Range("I" & nLig) <> "" Then Exit Sub

Next nLig


Dim fichier_cible As Excel.Workbook

Set fichier_cible = Workbooks.Open(Filename:=FTD)

Dim feuille_cible As Excel.Worksheet

Set feuille_cible = fichier_cible.Worksheets.Add


feuille.Name = feuille_source.Range("K6") & " " & feuille_source.Range("K5")

feuille_source.Range("A1:D40").Copy

feuille_cible.Range("A1:D40").PasteSpecial xlPasteValues
 

xUpsilon

XLDnaute Accro
La plage copiée est le Range devant le .Copy.
Range("A2:A16").Copy veut dire que je copie la plage de A2 à A16.
Si tu veux copier une autre plage, il faut adapter. Soit de manière fixe comme ce que j'ai fait ici avec les noms de cellule directement, soit de manière dynamique à l'aide d'instructions supplémentaires. (voir Range.End)

Bonne journée,
 

xUpsilon

XLDnaute Accro
Deux possibilités. Soit tu veux copier/coller la feuille complète en tant qu'objet (comme si dans le bandeau en bas de ton écran tu faisais clic droit + Déplacer ou Copier), soit tu veux copier/coller tout le contenu de la feuille.
Si tu veux copier/coller tout le contenu, je te conseille de définir des délimitations, parce que si tu sélectionnes l'entièreté de la feuille ça risque de dégommer ton ordi. La meilleure solution reste de chercher l'extremité la plus en bas à droite de la feuille (via Range.End(xlUp)/Range.End(xlToLeft)) et de redimensionner la plage que tu copies/colles.

Bonne journée,
 

Discussions similaires

Réponses
7
Affichages
391

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly