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 Sub

edit 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

image

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 0

Remplacer 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

Rechercher des sujets similaires à "aide macro"