Copier une feuille avec marges et echelle
Bonjour
Toujours sur mon fichier excel, je suis confronté à un nv problème :
Je dois d'un click sur un bouton copier toute une feuille. On m'a donné le code pour le faire et il marche très bien sauf qu'il ne copie pas la mise en page et surtt les marges et l'echelle qui est à 80%(dans les options de mise en page)
J'imagine qu'il ne faut rajouter qu'une ligne ou 2 toutes betes mais j'ai pas trouvé mon bonheur dans google.
Voila déjà le code de la macro
Sub copie()
'ActiveSheet.Index = position de la feuille active
'Sheets.Count = nombre de feuilles dans le classeur
'On sort de la macro si la position de la feuille active
'est différente du nombre de feuilles du classeur
If ActiveSheet.Index <> Sheets.Count Then MsgBox _
"Vous n'êtes pas sur la dernière feuille", vbInformation: Exit Sub
' Désactive la mise à jour de l'écran
Application.ScreenUpdating = False
Cells.Copy
Sheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Paste
ActiveSheet.Range("a1").Select
Application.CutCopyMode = False
End SubMerci pour toute aide
-- 29 Mar 2011, 20:20 --
ah oui je viens de me rendre compte qu'il ne garde pas non plus la protection de la feuille, un moyen d'arranger ca aussi?
Bonsoir,
Pour le paramétrage de l'impression, regarde du coté de "PageSetup" :
With ActiveSheet.PageSetup
.PrintArea = "" 'rien si pas de plage sinon, adresse de la plage
.Zoom = 80
.LeftMargin = 10
.RightMargin = 10
.TopMargin = 10
.BottomMargin = 10
.Orientation = xlPortrait
'etc...
End WithEt pour la protection, il te faut la faire avec :
ActiveSheet.Protect "MonMotDePasse"Hervé.
Merci Hervé
Je teste ça dès demain
-- 30 Mar 2011, 19:58 --
Ca marche, merci pour l'info
un nv probleme se presente :
Sub Copie()
'ActiveSheet.Index = position de la feuille active
'Sheets.Count = nombre de feuilles dans le classeur
'On sort de la macro si la position de la feuille active
'est différente du nombre de feuilles du classeur
If ActiveSheet.Index <> Sheets.Count Then MsgBox _
"Vous n'êtes pas sur la dernière feuille", vbInformation: Exit Sub
' Désactive la mise à jour de l'écran
Application.ScreenUpdating = False
ActiveSheet.Unprotect "0000"
Cells.Copy
Sheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Paste
ActiveSheet.Range("a1").Select
Application.CutCopyMode = False
With ActiveSheet.PageSetup
.Zoom = 75
.TopMargin = 58
.BottomMargin = 35
End With
ActiveSheet.Protect "0000"
End SubJe rappelle vite fait ce que fait ma macro. Elle crée une copie de la dernière feuille de mon classeur (appelons la feuil7) et uniquement de la derniere feuille (ca ne marche pas avec feuil6 ou feuil5 ou etc).
En rajoutant la protection de la feuille, les boutons de mes macros ne sont pas copiés sur la feuille nouvellement créée (feuil8). J'ai donc pensé à deproteger la feuille avant l'execution de la macro. Cela fonctionne mais laisse la feuille precedente (feuil7) sans aucune protection.
J'aurais besoin que la macro :
- Deprotege la feuille active
- Creer une nouvelle feuille
- Copie le contenu de la feuille active dans la nouvelle feuille
- Reprotege la feuille active
- Protege la feuille nouvellement créée
- Ouvre la feuille nouvellement créée
J'avais éventuellement pensé à une nvelle macro qui serait lancée en même tps que celle que j'ai affichée dans ce post et qui s'occuperait exclusivement de la reactivation de la protection de la feuille qui vient d'etre copiée (feuil7 dans notre exemple). Mais j'y arrive pô.
Merci
Bonjour
A la fin de ta macro, la feuille active est la feuille nouvellement créée.
Il suffit donc d'ajouter ceci avant le End Sub :
Sheets(Sheets.Count - 1).Protect "0000"Pour protéger la feuille précédente.
Amicalement
Nad
Arf c'etait tout bête
Merci infiniment Nad