Lorsque vous voulez enregistrer un fichier et que le nom est issu d'une variable, par exemple comportant le nom d'une machine, il parait utile de vérifier que tous les caractères qui compose le nom soient autorisés par Windows, sinon, vous risquez d'avoir une erreur que peut-être vous n'avez pas géré.
Pour vérifie le nom d'un fichier, simplement :
Nom = ValideNomFichier(Nom)
Les caractères non autorisés seront remplacés par des traits d'union (par défaut) ou par tout autre caractère si vous utilisez la syntaxe :
Nom = ValideNomFichier(Nom, "@")
Pour l'utiliser, collez ce code dans un module, ou récupérez le module dans le Zip.
C'est tout
Source / Exemple :
Public Function ValideNomFichier(ByVal sNomFichier As String, _
Optional sRemplaceCaractèrePar As String = "-") As String
' Cette fonction renvoie un nom de fichier autorisé
' On remplace les mauvais caractères par sRemplaceCaractèrePar
' (valeur par défaut = signe moins '-')
' Les caractères autorisés sont :
' A-Z Lettre + Signe plus
' 0-9 Nombre , Virgule
' space Espace ; Point-virgule
' ' Apostrophe = Signe égal
' - Tiret @ Arobase
' ! Point d'exclamation [ ] Crochets
' # Dièse _ Tiret de soulignement
' $ Dollar { } Accolades
' % Pour cent ~ Tilde
' & Et commercial ` Accent
' ( ) Parenthèses . Point
' plus toutes les combinaisons valables des lettres avec accents
' !! Cette fonction ne fonctionne pas avec des chemins complets
' puisque le caractère back-slash '\' n'est pas autorisé
Dim Temp As String, Car As String, r As Long
' Avant de commencer, on va vérifier que le caractère de remplacement est
' lui-même autorisé (ce serait trop bête)
sRemplaceCaractèrePar = Left(sRemplaceCaractèrePar, 1) ' un seul caractère
If Not (sRemplaceCaractèrePar Like "[A-Z]" Or _
sRemplaceCaractèrePar Like "[a-z]" Or _
sRemplaceCaractèrePar Like "[0-9]" Or _
sRemplaceCaractèrePar Like "[ '!#$%&()+,;=@{}~`.]" Or _
sRemplaceCaractèrePar Like "[-]" Or _
sRemplaceCaractèrePar Like "[[]" Or _
sRemplaceCaractèrePar Like "[]]" Or _
sRemplaceCaractèrePar Like "[_]" Or _
sRemplaceCaractèrePar Like "[àéèêïîôùû]") Then _
sRemplaceCaractèrePar = "-" ' Si non autorisé, impose trait d'union
Temp = sNomFichier
' Vérifie que chaque caractère est autorisé
For r = 1 To Len(Temp)
Car = Mid(Temp, r, 1)
If Not (Car Like "[A-Z]" Or _
Car Like "[a-z]" Or _
Car Like "[0-9]" Or _
Car Like "[ '!#$%&()+,;=@{}~`.]" Or _
Car Like "[-]" Or _
Car Like "[[]" Or _
Car Like "[]]" Or _
Car Like "[_]" Or _
Car Like "[àéèêïîôùû]") Then _
Mid(Temp, r, 1) = sRemplaceCaractèrePar
Next r
' S'il y a eu plusieurs remplacements à la suite, on va se retrouver avec
' plusieurs signes '-' à la queue leuleu : pas joli : On n'en laisse qu'un.
Do While InStr(1, Temp, sRemplaceCaractèrePar & sRemplaceCaractèrePar) <> 0
Temp = Replace(Temp, sRemplaceCaractèrePar & sRemplaceCaractèrePar, sRemplaceCaractèrePar)
DoEvents
Loop
' Renvoie le nom modifié
ValideNomFichier = Temp
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.