Incrémenter le nom d'un fichier existant

Bonjour à tous,

Ma macro a pour objectif d'enregistrer le workbook actif. Sauf que si le nom existe déjà alors je souhaiterais l'incrémenter au fur et à mesure d'un suffixe.

Par exemple:

1/ Dans mon dossier "MonDossier", j'ai un classeur nommé "Hello".

2/ Je sauvegarde via ma macro mon classeur actif et le nomme "Hello".

3/ Ma macro le nommera "Hello_v1".

4/ Et ainsi de suite, si je sauvegarde de nouveau alors elle le nommera "Hello_v2".

J'ai réalisé une macro mais elle incrémente en prenant comme repère la longueur du nom du workbook, ce qui me pose problème.

Name= "Hello"
NameFile = "C:\MonDossier\" & Name & ".xlsm"

If Len(Dir(NameFile)) > 0 Then
    MsgExist = MsgBox("Un fichier nommé  " & NameFile & " existe déjà." & Chr(13) & "Souhaitez-vous le remplacer?", vbYesNoCancel + vbInformation, "Important")

    'Yes: Fichier est remplacé
    If MsgExist = vbYes Then
        ActiveWorkbook.SaveCopyAs Filename:=NameFile
        Else

    'No: Fichier est renommé en incrémentant un suffixe au nom du nouveau fichier
    If MsgExist = vbNo Then
        For i = 0 To Len(Dir(NameFile))
        NameFile = "C:\MonDossier\" & File & "_v" & i & ".xlsm"
        ActiveWorkbook.SaveCopyAs Filename:=NameFile
        Next
        Else

    'Cancel: Fichier ni remplacé, ni renommé
     If MsgExist = vbCancel Then
        MsgBox "L'enregistrement n'a pas pu aboutir.", vbExclamation
        End If
        End If
        End If

Else: ActiveWorkbook.SaveCopyAs Filename:=NameFile

End If

Pourriez-vous jeter un oeil sur ma macro et me dire ce que je dois changer pour qu'elle incrémente souhaitée, s'il vous plaît?

Merci d'avance pour votre aide.

Bonne fin de semaine.

Bonjour,

Ton incrémentation ne peut fonctionner car il boucle sur la longueur du nom de ton filename

et le nom de l'incrémentation non plus

Teste ceci

Comme tu travailles toujours sur la même feuille, à chaque enregistrement il va prendre la valeur de A1 (que j'ai mis au hazard) et qui s'incrémente à chaque nouvel enregistrement

Sub test()
Name = "Hello"
NameFile = ThisWorkbook.Path & Name & ".xlsm"

  If Len(Dir(NameFile)) > 0 Then
      MsgExist = MsgBox("Un fichier nommé  " & NameFile & " existe déjà." & Chr(13) & "Souhaitez-vous le remplacer?", vbYesNoCancel + vbInformation, "Important")
      'Yes: Fichier est remplacé
      If MsgExist = vbYes Then
          ActiveWorkbook.SaveCopyAs Filename:=NameFile
      Else
        'No: Fichier est renommé en incrémentant un suffixe au nom du nouveau fichier
        If MsgExist = vbNo Then
          i = i + ActiveSheet.Range("A1")
          NameFile = Name & "_v" & i & ".xlsm"
          ActiveWorkbook.SaveCopyAs Filename:=NameFile
          ActiveSheet.Range("A1") = ActiveSheet.Range("A1") + 1
        Else
          'Cancel: Fichier ni remplacé, ni renommé
          If MsgExist = vbCancel Then
            MsgBox "L'enregistrement n'a pas pu aboutir.", vbExclamation
          End If
        End If
      End If
  Else: ActiveWorkbook.SaveCopyAs Filename:=NameFile
  End If
End Sub

Bonjour @M12,

Je vous remercie pour votre aide.

J'ai essayé le code mais j'ai une erreur: "Run-time error '13': Type mismatch" et la ligne "i= i+ ActiveSheet.Range("A1")" est surligné.

Pourriez-vous m'éclairer afin de debugger la macro svp?

Merci par avance pour votre aide.

La ligne :

i = i + ActiveSheet.Range("A1")

--> i = 1 + ActiveSheet.Range("A1")

Bonjour @Xmenpl,

Malheuresement, ç ane fonctionne toujours pas, la même ligne est surligné en erreur.

Existe-il une autre alternative svp?

Merci d'avance pour votre aide.

Salut

essai ca ;

Sub test()

Name = "Hello"
NameFile = "D:\MonDossier\" & Name & ".xlsm"

If Len(Dir(NameFile)) > 0 Then
    MsgExist = MsgBox("Un fichier nommé  " & NameFile & " existe déjà." _
    & Chr(13) & "Souhaitez-vous le remplacer?", vbYesNoCancel + vbInformation, "Important")

    'Yes: Fichier est remplacé
    If MsgExist = vbYes Then
        ActiveWorkbook.SaveCopyAs Filename:=NameFile

    'No: Fichier est renommé en incrémentant un suffixe au nom du nouveau fichier
    ElseIf MsgExist = vbNo Then

        NameFile = "D:\MonDossier\" & Left((Dir(NameFile)), 5) & Val(Mid((Dir(NameFile)), 6))+1 & ".xlsm"
        ActiveWorkbook.SaveCopyAs Filename:=NameFile

    'Cancel: Fichier ni remplacé, ni renommé
     ElseIf MsgExist = vbCancel Then
        MsgBox "L'enregistrement n'a pas pu aboutir.", vbExclamation

     End If
Else

ActiveWorkbook.SaveCopyAs Filename:=NameFile
End If
End Sub

edit :NameFile = "D:\MonDossier\" & Left((Dir(NameFile)), 5) & Val(Mid((Dir(NameFile)), 6)) + 1 & ".xlsm"

Bonjour à tous, Bonjour @Amir

Super, votre solution a bien fonctionné Merci beaucoup pour votre aide!

J'ai une dernière question sur ce topic.

Est-il possible dans le cas où l'utilisateur clic sur CANCEL d'arrêter la macro, svp?

Autrement dit de cesser le run de la macro mais sans générer de bug.

Merci d'avance si vous pouvez m'aider sur ce détail.

Bonsoir à tous,

Un membre du forum pourrait m'éclairer au sujet de ma question:

Est-il possible dans le cas où l'utilisateur clic sur CANCEL d'arrêter la macro, svp?

Autrement dit de cesser le run de la macro mais sans générer de bug.

Lorsque je dis "Clic sur cancel", je parle du cancel généré par une message box avec pour option "vbYesNoCancel"

J'espère que ma question est claire.

Merci d'avance pour tous ceux qui pourront m'aider sur cette problématique.

Rechercher des sujets similaires à "incrementer nom fichier existant"