Aide pour macro
bonjour
JE suis en train de faie une macro et je désire qu'elle enregistre la feuille active d'excel sans les formules et en effacant le bouton dans l'impression et dans l'enregistrement. Le problème, L'enreguistrement se fait bien et l(imprezssion mais le bouton est toujours présent et il est actif dans le fichier nregistré. Comment corriger cela? Je vous mets la macro que j'ai faite. Merci d'avance poiur votre aide.
J'ai oublié;les privates ont étémise dans le'onglet Thisworkbbok
Sub ExtraireEtEnregistrerFeuilleSansFormulesEtBouton()
Dim Feuille As Worksheet
Dim NouveauClasseur As Workbook
Dim NomFichier As Variant
Dim Sh As Shape
' Définir la feuille à extraire (par exemple, "Planning")
Set Feuille = ThisWorkbook.Sheets("Planning")
' Créer un nouveau classeur
Set NouveauClasseur = Workbooks.Add
' Copier la feuille entière dans le nouveau classeur
Feuille.Copy Before:=NouveauClasseur.Sheets(1)
' Supprimer le bouton de contrôle de formulaire dans la feuille copiée
On Error Resume Next
Set Sh = NouveauClasseur.Sheets(1).Shapes("ENREGISTRER")
If Not Sh Is Nothing Then Sh.Delete
On Error GoTo 0
' Remplacer les formules par des valeurs dans la feuille copiée
With NouveauClasseur.Sheets(1)
.UsedRange.Value = .UsedRange.Value
End With
' Demander à l'utilisateur de choisir l'emplacement et le nom du fichier
NomFichier = Application.GetSaveAsFilename(InitialFileName:="NouvelleFeuille.xlsx", FileFilter:="Fichiers Excel (*.xlsx), *.xlsx")
' Si l'utilisateur annule la saisie, arrêter la macro
If NomFichier = False Then
MsgBox "L'enregistrement a été annulé.", vbExclamation
NouveauClasseur.Close SaveChanges:=False
Exit Sub
End If
' Enregistrer le nouveau classeur au format .xlsx
On Error GoTo ErreurEnregistrement
NouveauClasseur.SaveAs Filename:=NomFichier, FileFormat:=xlOpenXMLWorkbook
MsgBox "La feuille a été extraite et enregistrée sans formules avec succès.", vbInformation
NouveauClasseur.Close SaveChanges:=False
Exit Sub
ErreurEnregistrement:
MsgBox "Erreur lors de l'enregistrement du fichier. Veuillez vérifier le nom du fichier et le chemin.", vbCritical
NouveauClasseur.Close SaveChanges:=False
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' Masquer le bouton avant l'impression
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Planning")
ws.Shapes("ENREGISTRER").Visible = False
End Sub
Private Sub Workbook_AfterPrint(Cancel As Boolean)
' Afficher le bouton après l'impression
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Planning")
ws.Shapes("ENREGISTRER").Visible = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Masquer le bouton avant l'enregistrement
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Planning")
ws.Shapes("ENEGISTRER").Visible = False
End Sub
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
' Afficher le bouton après l'enregistrement
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Planning")
ws.Shapes("ENREGISTRER").Visible = True
End Subedit moderation : code mis entre balises via le bouton </>, merci d'y penser à l'avenir.
Bonjour,
En utilisant la balise code comme indiqué dans la charte
Voici celui à utiliser (je pense)
' Supprimer le bouton de contrôle de formulaire dans la feuille copiée
On Error Resume Next
For Each Sh In NouveauClasseur.Sheets(1).Shapes
If Not Sh Is Nothing Then Sh.Delete
Next Sh
On Error GoTo 0Remplacer les lignes existantes concernées par ce code.
Bonsoir à vous deux !
Une proposition : Lors de la création d'un classeur il y a au moins une feuille. Donc pas besoin de transposer l'ancienne...
Ensuite un double collage spécial : une fois les valeur, une fois la mise en forme, et comme cela plus de bouton à gérer.
Le reste du code inchangé. Evidemment, je suis partis du principe qu'il n'y avait qu'un seul shape sur la feuille (le bouton)...
Le code :
Sub ExtraireEtEnregistrerFeuilleSansFormulesEtBouton()
Dim Feuille As Worksheet
Dim NouveauClasseur As Workbook
Dim NomFichier As Variant
Dim Sh As Shape
' Définir la feuille à extraire (par exemple, "Planning")
Set Feuille = ThisWorkbook.Sheets("Planning")
' Créer un nouveau classeur
Set NouveauClasseur = Workbooks.Add
' début modif LouReeD
Feuille.Cells.Copy
NouveauClasseur.Sheets(1).Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
' fin modif LouReeD
' Demander à l'utilisateur de choisir l'emplacement et le nom du fichier
NomFichier = Application.GetSaveAsFilename(InitialFileName:="NouvelleFeuille.xlsx", FileFilter:="Fichiers Excel (*.xlsx), *.xlsx")
' Si l'utilisateur annule la saisie, arrêter la macro
If NomFichier = False Then
MsgBox "L'enregistrement a été annulé.", vbExclamation
NouveauClasseur.Close SaveChanges:=False
Exit Sub
End If
' Enregistrer le nouveau classeur au format .xlsx
On Error GoTo ErreurEnregistrement
NouveauClasseur.SaveAs Filename:=NomFichier, FileFormat:=xlOpenXMLWorkbook
MsgBox "La feuille a été extraite et enregistrée sans formules avec succès.", vbInformation
NouveauClasseur.Close SaveChanges:=False
Exit Sub
ErreurEnregistrement:
MsgBox "Erreur lors de l'enregistrement du fichier. Veuillez vérifier le nom du fichier et le chemin.", vbCritical
NouveauClasseur.Close SaveChanges:=False
End Sub@ bientôt
LouReeD
bonsoir LouReed etJExcel2fr
Merci pour vos réponses rapides. Les deux fonctionnent très bien.L'idée de lou est original. Je conserve le deux
bonne soirée et merci encore
Bonsoir,
merci pour votre retour et vos remerciements !
@ bientôt
LouReeD