Introduction

Lorsque l’on sauve un fichier dans Windows, certains caractères sont proscrits du fait qu’ils sont réservés pour des usages particuliers.

  • > Plus grand que (Redirection )
  • < Plus petit que (Redirection inversée)
  • |  Barre verticale (Pipe)
  •  »  Les guillemets
  • :  Deux points
  • /  Slash (Chemin)
  • \  Antislash (Fractionnement)
  • * Sert de joker (représente de 0 à x caractères quelques soient leurs valeurs)
  • ? Sert de joker (représente 1 caractère quelque soit sa valeur)

Code de la procédure

Function ReplaceCharactersFileName(ByVal FileName As String, _
                                   Optional Proscribed As String = "-,\/:|;_,*?<>;',""") As String
 ' Author  : Philippe Tulliez (http://philippe.tulliez.be
 ' Date    : 18/02/1998
 ' Version : 1.1
 ' Fonction renvoyant une chaîne de caractères
 '          en remplacant les caractères proscrits par un autre caractère
 ' Arguments
 ' FileName     ' Nom du fichier à modifier
 ' [Proscribed] ' Liste des caractères à procrire et son caractère de remplacement
 '                Valeur par défaut -,\/:|;_,*?<>
 ' Organisation et syntaxe de l'argument Proscribed
 '  Cette chaîne peut avoir de 1 à plusieurs groupes
 '  Chaque groupe est séparé par un ;
 '  Groupe1;Groupe2;Groupe3
 '  - Syntaxe des Groupes
 '    CaractèreDeRemplacement,CaractèresARemplacer
 '    le premier caractère d'un groupe est le caractère de remplacement
 '            de ceux qui suivent la virgule
 ' Ex : -,\/:| [;_,*?<>] (Dans le 1er groupe les caractères \/:| sont remplacés par -
 Dim myTable() As String, mySubst() As String, sc As Byte, t As Byte
 FileName = Trim(FileName)
 myTable = Split(Proscribed, ";")
 For t = 0 To UBound(myTable)
  mySubst = Split(myTable(t), ",")
  For sc = 1 To Len(mySubst(1))
   If InStr(FileName, Mid(mySubst(1), sc, 1)) Then
    FileName = Replace(FileName, Mid(mySubst(1), sc, 1), mySubst(0))
   End If
  Next sc
 Next t
 ReplaceCharactersFileName = FileName
End Function

Exemple de son utilisation

Sub TestReplaceCharactersFileName()
 Dim FileName As String, NewFileName As String
 FileName = "2015/11/12-Offre:""Toto"">Vue Commande.xlsm"
 NewFileName = ReplaceCharactersFileName(FileName)
 ThisWorkbook.SaveAs FileName:=NewFileName
End Sub

La chaîne de caractères envoyée par la variable nommée FileName à la fonction ReplaceCharactersFileName est égal à

2015/11/12-Offre:"Toto">Vue Commande.xlsm

La valeur renvoyée par la fonction est 2015-11-12-Offre-'Toto'_Vue Commande.xlsm