Export avec enregistrement si fichier existant

Bonjour,

J'ai cette macro qui fonctionne niquel.

Si le fichier existe déjà, j'ai bien le message qui me demande si je veux le remplacer.

Si je clique sur oui, aucun soucis, quand je clique sur non, débogage erreur 1004.

Comment insérer exit sub quand je clique sur non ?

Sub test()
Dim Nom, Chemin As String

  Nom = Sheets("Feuil1").Name & " - " & Sheets("Feuil2").Range("E5") & " " & Year(Date)
  With Sheets("Feuil2")
    Chemin = .Range("E7") & .Range("E4") & "\" & Nom
  End With
   With Application
    .ScreenUpdating = False
    .DisplayAlerts = True
  End With
    Sheets("Feuil1").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ActiveWorkbook.SaveAs Filename:=Chemin
    ActiveWorkbook.Close
End Sub
Fred35 a écrit :

Bonjour,

J'ai cette macro qui fonctionne niquel.

Si le fichier existe déjà, j'ai bien le message qui me demande si je veux le remplacer.

Si je clique sur oui, aucun soucis, quand je clique sur non, débogage erreur 1004.

Comment insérer exit sub quand je clique sur non ?

bonjour,

essaie en activant la détection d'erreur, à tester.

Sub test()
Dim Nom, Chemin As String

  Nom = Sheets("Feuil1").Name & " - " & Sheets("Feuil2").Range("E5") & " " & Year(Date)
  With Sheets("Feuil2")
    Chemin = .Range("E7") & .Range("E4") & "\" & Nom
  End With
   With Application
    .ScreenUpdating = False
    .DisplayAlerts = True
  End With
    Sheets("Feuil1").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 on error goto terreur:
    ActiveWorkbook.SaveAs Filename:=Chemin
    On Error Goto 0
    ActiveWorkbook.Close
Exit Sub
terreur:
Resume Next
End Sub

Bonjour

A tester

Sub test()
Dim Nom, Chemin As String

  Nom = Sheets("Feuil1").Name & " - " & Sheets("Feuil2").Range("E5") & " " & Year(Date)
  With Sheets("Feuil2")
    Chemin = .Range("E7") & .Range("E4") & "\" & Nom
  End With

  If Dir(Chemin) <> "" Then
    If MsgBox("Un fichier nommé '" & Nom & "' existe déjà à cet emplacement." & vbCr & _
              "Voulez-vous le remplacer ?", vbQuestion + vbYesNo + vbDefaultButton2, _
              "Nouvelle version") <> vbYes Then Exit Sub
  End If

   With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
  End With
    Sheets("Feuil1").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ActiveWorkbook.SaveAs Filename:=Chemin
    ActiveWorkbook.Close
End Sub

Bonjour h2so4

Merci messieurs pour vos réponses.

J'ai testé les 2 et concernant la solution de Banzai elle ne fonctionne pas, en fait il créer le fichier sans alerte, normal vu que DisplayAlerts = False, le petit bout de code ajouté ne semble pas fonctionner.

Concernant celle de H2so4, elle répond en partie au problème, mais me demande si je souhaite enregistrer le classeurXX.

Et il ne faudrait pas ce message.

Je vais faire un petit fichier d'exemple et revenir vers vous

Bonjour

Fred35 a écrit :

en fait il créer le fichier sans alerte

Normal : Créer veut dire que le fichier n'existe pas

Normalement :

si le fichier existe --> message perso

Si réponse Oui : Dans ce cas le DisplayAlerts à False empêche le message système

Si réponse Non : Dans ce cas on quitte la procédure

C'est sur je n'ai pas testé

Voici le fichier en question, qui devrait te rappeler quelque chose Banzai

Banzai64 a écrit :

Normalement :

si le fichier existe --> message perso

Si réponse Oui : Dans ce cas le DisplayAlerts à False empêche le message système

Si réponse Non : Dans ce cas on quitte la procédure

Je confirme qu'il n'y a aucun message perso

Dans ce bout de code If Dir(Chemin) <> "" Then

Si le dossier n'est pas vide alors on applique la macro, mais le dossier ne sera jamais vide puisque j'ai une sauvegarde journalière, il y a juste le nom du fichier qui change avec la date.

Fred35 a écrit :

Merci messieurs pour vos réponses.

J'ai testé les 2 et concernant la solution de Banzai elle ne fonctionne pas, en fait il créer le fichier sans alerte, normal vu que DisplayAlerts = False, le petit bout de code ajouté ne semble pas fonctionner.

Concernant celle de H2so4, elle répond en partie au problème, mais me demande si je souhaite enregistrer le classeurXX.

Et il ne faudrait pas ce message.

Je vais faire un petit fichier d'exemple et revenir vers vous

Sub test()
Dim Nom, Chemin As String

  Nom = Sheets("Feuil1").Name & " - " & Sheets("Feuil2").Range("E5") & " " & Year(Date)
  With Sheets("Feuil2")
    Chemin = .Range("E7") & .Range("E4") & "\" & Nom
  End With
   With Application
    .ScreenUpdating = False
    .DisplayAlerts = True
  End With
    Sheets("Feuil1").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  if dir(chemin)="" then
    ActiveWorkbook.SaveAs Filename:=Chemin
  end if
    ActiveWorkbook.Close
Exit Sub

End Sub

Bonjour H2so4

J'ai fait un test sur ta méthode et j'obtiens une erreur 1004, la méthode 'SaveAs' de l'objet _Workbook a échoué...

Bonsoir,

et ainsi ?

Sub test()
Dim Nom, Chemin As String

  Nom = Sheets("Feuil1").Name & " - " & Sheets("Feuil2").Range("E5") & " " & Year(Now())
  With Sheets("Feuil2")
    Chemin = .Range("E7") & .Range("E4") & "\" & Nom
  End With
   With Application
    .ScreenUpdating = False
    .DisplayAlerts =False
  End With
    Sheets("Feuil1").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").Copy
    ActiveWorkbook.ActiveSheet.Range("A2:D100").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  If Dir(Chemin  & ".xl*") = ""  Then
    ActiveWorkbook.SaveAs Filename:=Chemin
  Else
    ActiveWorkbook.Saved = True
  End If
    ActiveWorkbook.Close
Exit Sub

End Sub

Avec cette méthode si le fichier existe déjà, on quitte la macro sinon on crée le fichier, ça me convient bien, rien à valider, encore mieux pour mes collègues et pas d'erreur possible du coup

Merci

Petite question au niveau de l'export

Peut on faire en sorte que le fichier exporté soit un fichier partagé ?

Pour éviter à mes cher collègues de faire outils / partagé le classeur, je voulais savoir si lors de l'enregistrement du fichier il existait une solution ?

Rechercher des sujets similaires à "export enregistrement fichier existant"