VBA - Enregistrer un onglet en conservant les valeurs et le format
Bonjour à tous,
Il est certain que ma question a déjà été posée, mais je n'ai pas trouvé... Je vous remercie donc par avance de votre tolérance dans vos réponses.
J'ai créé le fichier joint pour faire le suivi des astreintes.
L'idée est que après remplissage des onglets "planning" et "feuille d'intervention" il soit possible d'établir une feuille de temps (Onglet RH) pour un mois donné.
Ces 3 feuilles sont existantes et fonctionnelles.
Maintenant, j'essai d'enregistrer l'onglet RH individuel dans un nouveau classeur qui porte le nom du collaborateur et l'année et mois concerné (macro dans le fichier). Mais lorsque je fais cette manip, l'onglet du nouveau fichier conserve les formules et perd la mise en page (incluant les mises en forme conditionnelles).
En bref, j'aimerai que la page ressemble strictement à l'onglet "RH" mais uniquement avec les valeurs et la mise en forme.
Auriez vous une idée?
Merci de votre aide
Bonjour,
Pas sûr que ce soit le plus efficace mais ça fait le travail :
Sub DUPLIQUER()
Dim WS_I As Worksheet
Dim WS_F As Worksheet
Set WS_I = ThisWorkbook.Worksheets("RH Individuel ") 'Défini la feuille a copier
WS_I.Copy 'Copie la feuille dans un nouveau classeur
Set WS_F = ActiveWorkbook.ActiveSheet 'Défini le nouveau classeur dans la variable
WS_I.UsedRange.Copy 'Copie la plage utilisée de la feuille initiale
WS_F.UsedRange.PasteSpecial Paste:=xlPasteAllUsingSourceTheme 'la colle dans feuille finale pour conserver MEFC
WS_F.UsedRange.Copy 'Copie la plage utilisée de la feuille finale
WS_F.UsedRange.PasteSpecial xlPasteValues 'La colle en valeur
End SubCdlt,
Merci de ton aide Ergotamine.
Du coup, j'ai inséré tes lignes de la manière suivante:
Sub enregistrement()
'Déclaration des variables
Dim extension As String
Dim chemin As String
Dim nomfichier As String
Dim style As Integer
Dim HeureExport As String
Dim WS_I As Worksheet
Dim WS_F As Worksheet
'Rend les actions invisibles
Application.ScreenUpdating = False
'Définition du nommage de fichier
HeureExport = Format(Hour(Time), "00") & "" & Format(Minute(Time), "00") & "" & Format(Second(Time), "00")
extension = ".xlsx"
chemin = "C:\Astreintes\"
nomfichier = Range("M1") & " " & Range("L1") & " " & Range("L5") & HeureExport & extension
'Défini la feuille a copier
Set WS_I = ThisWorkbook.Worksheets("RH Individuel ")
'Copie la feuille dans un nouveau classeur
WS_I.Copy
'Défini le nouveau classeur dans la variable
Set WS_F = ActiveWorkbook.ActiveSheet
'Copie la plage utilisée de la feuille initiale
WS_I.Range("A1:M34").Copy
'Option de collage
WS_F.UsedRange.PasteSpecial Paste:=xlPasteAllUsingSourceTheme
WS_F.UsedRange.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
'Option de mise en forme
WS_F.Columns("A:D").Hidden = True
WS_F.Range("K3") = WS_F.Range("L1")
WS_F.Range("M3") = WS_F.Range("M1")
'Enregistrement
With ActiveWorkbook
.ActiveSheet.DrawingObjects.Delete
.SaveAs Filename:=chemin & nomfichier
.Close
Application.ScreenUpdating = True
CreateObject("WScript.Shell").Popup "Le fichier " & chemin & nomfichier & " est enregistré", 1, "Enregistrement"
End With
End SubIl ne manque plus qu'une chose :
Il y a des protections sur le fichier... lorsque j'ôte les protections, la macro fait le job. En revanche, lorsque je laisse les protections, j'ai un beau message d'erreur.
J'aimerai que cette macro s'execute avec la protection activé. Une idée?
Bonjour,
Il est possible d’ôter les protections par VBA. De quel type sont-elles ? Classeur ? Feuille ? Ci-contre des pistes, il suffit de retirer la protection adéquate au début de la macro et de la réactiver à la fin :
ThisWorbook.Unprotect "mot de passe" 'pour déprotéger classeur
ThisWorkbook.Protect "mot de passe" 'pour protéger classeur
ActiveSheet.Unprotect "mot de passe" 'pour protéger feuille
ActiveSheet.Protect "mot de passe" 'pour protéger feuilleCdlt,
Merci beaucoup Ergotamine.
Ca fonctionne parfaitement.