Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 (RESOLU) Réinitialiser le fichier initial

chaelie2015

XLDnaute Accro
Bonsoir Forum
VB:
Sub SauveGarder()
    'Gestion des erreurs
    On Error GoTo 1

    Application.DisplayAlerts = False 'On désactive les messages d'alerte

    If Range("D11").Value = "" Then ' On teste que la cellule a bien été saisie ou pas
        MsgBox "*** Attention *** Vous n'avez pas saisi le Nom de l'Affaire." & vbCrLf & _
        "Merci de faire le nécessaire avant de réaliser la sauvegarde.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
        Range("D11").Select
    Else
        With ActiveWorkbook
            ' .SaveAs Filename:=ThisWorkbook.Path & "\" & Range("D11"), FileFormat:=xlOpenXMLWorkbookMacroEnabled
            .SaveAs Filename:=ThisWorkbook.Path & "\" & Range("D11"), FileFormat:=xlOpenXMLWorkbookMacroEnabled
            
        End With
        MsgBox "Votre fichier [ " & Range("D11") & "] a bien été enregistré dans votre dossier"
    End If
  ' Effacer le contenu de la cellule D11 du fichier initial
  ThisWorkbook.Sheets("Feuil1").Range("D11").ClearContents
          
    Application.DisplayAlerts = True
 
1
End Sub
Ce code sauvegarde une copie du classeur actif sous le nom spécifié dans la cellule D11 au format xlsm et il fonctionne très bien.
Mon objectif est de réinitialiser le fichier initial (effacer le contenu de la cellule D11) une fois la copie est crée, mais ce n'est pas le cas dans ce code, cela efface le contenu du fichier qui a été créé, ce qui n'est pas souhaité.
je veux qu'il efface le contenu de la cellule D11 dans le fichier initial seulement
Merci
 
Solution
Je souhaite que la cellule D11 se vide automatiquement uniquement dans le fichier initial lorsqu'il est fermé, tandis que dans le fichier qui a été créé la valeur de D11 est conservée.
Dans ce cas :
VB:
Sub SauveGarder()
Dim memo$
With Sheets("Feuil1").Range("D11")
    If .Value = "" Then
        MsgBox "*** Attention *** Vous n'avez pas saisi le Nom de l'Affaire." & vbCrLf & _
            "Merci de faire le nécessaire avant de réaliser la sauvegarde.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
        .Select
    ElseIf Dir(ThisWorkbook.Path & "\" & .Value & ".xlsm") <> "" Then
        MsgBox "Ce nom a déjà été utilisé, modifiez-le !", vbOKOnly + vbExclamation, "Sauvegarde de l'affaire CEO"
        .Select...

job75

XLDnaute Barbatruc
Bonsoir chaelie2015,

Avec SaveCopyAs :
VB:
Sub SauveGarder()
With Sheets("Feuil1").Range("D11")
    If .Value = "" Then
        MsgBox "*** Attention *** Vous n'avez pas saisi le Nom de l'Affaire." & vbCrLf & _
            "Merci de faire le nécessaire avant de réaliser la sauvegarde.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
        .Select
    Else
        ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\" & .Value & ".xlsm"
        MsgBox "Votre fichier [" & .Value & "] a bien été enregistré dans votre dossier"
        .Value = ""
    End If
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Bonjour chaelie2015, le forum,

Avec SaveAs c'est plus compliqué :
VB:
Sub SauveGarder()
Dim memo$
With Sheets("Feuil1").Range("D11")
    If .Value = "" Then
        MsgBox "*** Attention *** Vous n'avez pas saisi le Nom de l'Affaire." & vbCrLf & _
            "Merci de faire le nécessaire avant de réaliser la sauvegarde.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
        .Select
    ElseIf Dir(ThisWorkbook.Path & "\" & .Value & ".xlsm") <> "" Then
        MsgBox "Ce nom a déjà été utilisé, modifiez-le !", vbOKOnly + vbExclamation, "Sauvegarde de l'affaire CEO"
        .Select
    Else
        memo = .Value
        Application.EnableEvents = False 'désactive les évànements
        .Value = ""
        ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & memo & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        .Value = memo
        Application.EnableEvents = True 'réactive les évànements
        MsgBox "Votre fichier [" & memo & "] a bien été enregistré dans votre dossier.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
    End If
End With
End Sub
Je comprends que les fichiers créés ne doivent être enregistrés qu'avec la cellule D11 vide.

Pour cela il faut cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Sheets("Feuil1").Range("D11") = "" Then Exit Sub
Cancel = True
MsgBox "La commande 'Enregistrer' est neutralisée.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
End Sub
A+
 

Pièces jointes

  • Classeur(1).xlsm
    19.3 KB · Affichages: 3

chaelie2015

XLDnaute Accro
Bonsoir Job75

Je souhaite que la cellule D11 se vide automatiquement uniquement dans le fichier initial lorsqu'il est fermé, tandis que dans le fichier qui a été créé la valeur de D11 est conservée.
Lors de la prochaine ouverture du fichier initial, la cellule sera vide, ce qui me permettra de créer un nouveau fichier.
Merci
 

chaelie2015

XLDnaute Accro
Re
ce code empêche l'enregistrement du classeur si la cellule D11 de la feuille "Feuil1" n'est pas vide, et il informe l'utilisateur de cette action.
À mon avis , je ne pense pas que nous ayons besoin de ce code. Je préfère un complément au code que vous avez proposé, permettant d'effacer la cellule D11 uniquement dans le fichier initial.
Merci et Bon Week-end
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je n'ai jamais utilisé cette extension, et je ne la maîtrise pas. La question a déjà été posée, mais je ne la maîtrise pas.
Dans l'autre fil, je t'ai succinctement expliqué comment ça fonctionne.

Je vais essayer de détailler un peu plus.
Quand tu ouvres Excel, tu choisis un modèle. Généralement tu prends un modèle de classeur vierge.
Ici il te suffira d'ouvrir un modèle de ton classeur actuel.
Lorsque tu voudras enregistrer le classeur, la sauvegarde se fera sous le nom que tu voudras, le modèle sera ainsi fermé sans être modifié et le fichier enregistré restera ouvert.
 
Dernière édition:

job75

XLDnaute Barbatruc
Je souhaite que la cellule D11 se vide automatiquement uniquement dans le fichier initial lorsqu'il est fermé, tandis que dans le fichier qui a été créé la valeur de D11 est conservée.
Dans ce cas :
VB:
Sub SauveGarder()
Dim memo$
With Sheets("Feuil1").Range("D11")
    If .Value = "" Then
        MsgBox "*** Attention *** Vous n'avez pas saisi le Nom de l'Affaire." & vbCrLf & _
            "Merci de faire le nécessaire avant de réaliser la sauvegarde.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
        .Select
    ElseIf Dir(ThisWorkbook.Path & "\" & .Value & ".xlsm") <> "" Then
        MsgBox "Ce nom a déjà été utilisé, modifiez-le !", vbOKOnly + vbExclamation, "Sauvegarde de l'affaire CEO"
        .Select
    Else
        memo = .Value
        .Value = ""
        ThisWorkbook.Save
        ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & memo & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        .Value = memo
        ThisWorkbook.Save
        MsgBox "Votre fichier [" & memo & "] a bien été enregistré dans votre dossier.", vbOKOnly + vbInformation, "Sauvegarde de l'affaire CEO"
    End If
End With
End Sub
Et plus de code dans ThisWorkbook.
 

Pièces jointes

  • Classeur(2).xlsm
    18.4 KB · Affichages: 2

Discussions similaires

Réponses
7
Affichages
392
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…