Enregistrement si fichier existant

Bonsoir

voila mon sushi.

j'ai un fichier de départ à partir duquel je crée un fichier secondaire via ce bout de code.

 Ext = ".xlsm"
    Fichier = Prep.Range("B2") & "-" & Prep.Range("D2") & Ext
    On Error Resume Next
    ActiveWorkbook.SaveAs chemin & "\" & Fichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
 

Ce fichier, s'enregistre automatique s'il n'existe pas déjà d'autres fichiers avec ce nom.

le souci est que si le fichier existe, une fenêtre s'ouvre en demandant si l'on veut écraser l'ancien fichier.

Si on choisi cette option pas de problème tout ce passe bien.

Si on refuse d'écraser le fichier on tombe alors sur une erreur de plantage et un embryon de fichier secondaire se crée.

Existe-t-il un moyen si l'on refuse d'écraser le fichier d'avoir une fenêtre "classique" nous permettant de choisir le nom du fichier à enregistrer?

J'espère avoir été assez clair.

++

Troph

PS la ligne "on error resume next" ne fait rien à l'affaire. je l'avais mise en désespoir de cause.

Bonsoir,

Alors je n'ai pas une réponse à ta demande, mais quelque chose pourrait t'aider.

Il s'agit du Application.DisplayAlerts qui pourrait t'éviter d'avoir la fenêtre d'erreur.

Cependant, cela forcerait l'écrasement de l'ancien fichier.

Bonne soirée

ok merci de l'info, mais c'est tout de même une procédure risquée... Non ?

Bonsoir

A rajouter avec Application.DisplayAlerts = False

Pas testé

Sub test()
 Ext = ".xlsm"
    Fichier = Prep.Range("B2") & "-" & Prep.Range("D2") & Ext
   If Dir(chemin & "\" & Fichier) <> "" Then
      If MsgBox("Un fichier à ce nom est déjà présent" & vbCr & vbCr & "On l'écrase ?", vbCritical + vbYesNo + vbDefaultButton2, "Opération irreversible") <> vbYes Then Exit Sub
    End If
    [surligner=#FFFF80]Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs chemin & "\" & Fichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    Application.DisplayAlerts = True
End Sub

Ne sachant pas quel est le fichier derrière et l'utilisation qui en est faite, je ne peux me prononcer sur le risque que génère une telle procédure.

Personnellement, je l'utilise quand je sais que je ne veux pas enregistrer un fichier avant de le fermer (j'acquitte les alertes avant et les réactive juste après l'instruction).


Banzai64 a écrit :

Bonsoir

A rajouter avec Application.DisplayAlerts = False

Pas testé

Sub test()
 Ext = ".xlsm"
    Fichier = Prep.Range("B2") & "-" & Prep.Range("D2") & Ext
   If Dir(chemin & "\" & Fichier) <> "" Then
      If MsgBox("Un fichier à ce nom est déjà présent" & vbCr & vbCr & "On l'écrase ?", vbCritical + vbYesNo + vbDefaultButton2, "Opération irreversible") <> vbYes Then Exit Sub
    End If
    [surligner=#FFFF80]Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs chemin & "\" & Fichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    Application.DisplayAlerts = True
End Sub

Si Banzai te propose la même chose que moi, c'est qu'il s'agit sûrement de la meilleure solution. (D'ailleurs bonsoir Banzai)

Je teste de ce pas.


Bonsoir

le but de ce fichier est pour la paye des salariés. (donc mieux vaut ne pas écraser leurs heures de travail)

Comme les personnes qui vont utiliser le fichiers vont paniquer si ya le moindre souci... il faut prendre toutes les précautions avant de le leur envoyer.

alors votre procédure permet en effet l'affichage d'une autre fenêtre oui non.

si clique sur oui écrasement du fichier précédent et création normale du fichier secondaire.

si clique sur non, on se retrouve avec un embryon de fichier comme avant.

En fait il faudrait pouvoir avoir une étape supplémentaire permettant de choisir un nouveau nom.

je sais pas si un userform serait le bien venu ou s'il y a plus simple, comme retrouver la procédure qu'utilise excel lors de l'enregistrement de fichier par exemple.

Troph

Bonjour

Trophinou a écrit :

si clique sur non, on se retrouve avec un embryon de fichier comme avant.

Alors fais le test avant la création du fichier ( Sem.Copy )

Ainsi tu auras la possibilité de changer les valeurs de B2 et D2

Si des soucis pour le faire, fournis le dernier fichier en cours

Il existe la possibilité d'utiliser le formulaire "Enregistrer sous":

Dim IntialName As String
Dim fileSaveName As Variant
InitialName = ThisWorkbook.Name
fileSaveName = Application.GetSaveAsFilename(InitialFileName:=InitialName, _
    fileFilter:="Fichiers Excel (*.xls; *.xlsx; *.xlsm), *.xls; *.xlsx; *.xlsm")

If fileSaveName <> "" Then Thisworkbook.SaveAs FileName:=fileSaveName
End If

Bonsoir excel malin

il me met "variable non définie" en pointant cette ligne.

InitialName = ThisWorkbook.Name

Bonsoir Banzai

si je mets avant Sem.copy il fait bien tout ce que tu dis, sauf qu'il me fout le bordel dans tous les onglets après.

bon pas grave, ils n'auront qu'à faire attention.

Bonjour

Trophinou a écrit :

si je mets avant Sem.copy il fait bien tout ce que tu dis, sauf qu'il me fout le bordel dans tous les onglets après.

Je ne comprends pas

Si avant de créer le classeur tu testes son existence

Si tu réponds Oui ---> fichier ancien est écrasé et le code continu comme avant

Si tu réponds Non --> sortie de la macro

Rechercher des sujets similaires à "enregistrement fichier existant"