Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Recherche caractères interdits.

800vfr76

XLDnaute Occasionnel
Bonjour à tous,

Je suis à la recherche d'une macro recherchant dans la cellule C9 les caractères interdits dans l'enregistrement des noms de fichier. Si il y a un caractère interdit en C9 un message m'averti que je n'ai pas le droit d'utiliser ces caractères.

Si cela a de l'importance, la cellule C9 est fusionnée jusqu'en L9.

J'ai cherché et trouvé des exemples sur le forum, mais je n'ai pas réussi a les mettre en pratique pour mon cas. Je ne souhaite pas que les caractères interdits soient remplacés.

Merci par avance pour votre aide.
 

DoubleZero

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Bonjour, 800vfr76, le Forum,

Peut-être ainsi :

Code:
Option Explicit
Sub Caractère_interdit_alerter()
If [c9].Value Like "*:*" Or [c9].Value Like "*\*" Or [c9].Value Like "*/*" Or [c9].Value Like "*?*" _
Then MsgBox "Attention : caractère(s) interdit(s) en c9 !"
End Sub

Mais... je pense que la liste est incomplète.

A bientôt
 

800vfr76

XLDnaute Occasionnel
Re : Recherche caractères interdits.

Re,

En fait DoubleZero cela ne marche pas aussi bien que prévu, la macro prend tous les caractères en compte, je peux taper n'importe quelle lettre elle me dis que c'est interdit.
As-tu une idée du problème?
 

DoubleZero

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Re-bonjour,

...cela ne marche pas aussi bien que prévu, la macro prend tous les caractères en compte, je peux taper n'importe quelle lettre elle me dis que c'est interdit...

Toutes mes excuses : je n'ai proposé le code qu'après l'avoir testé avec les caractères interdits.

Pour l'heure, je ne trouve pas LA solution...

Je continue de chercher, à moins qu'un membre expert ne nous offre le code parfait.

A toutes fins utiles, voici la liste des caractères interdits et la taille maximale d'un nom pouvant être attribué.



A bientôt
 

Pièces jointes

  • Erreurs possibles.JPG
    31.9 KB · Affichages: 131

Efgé

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Bonjour 800vfr76 Bonjour 00

En attendant une version RegExp (qui est LA solution, mais que je ne sais pas mettre en oeuvre)

VB:
Sub Test_Nom()
Dim Interdits(), i&
Interdits = Array("[", "]", "\", "/", "?", "*", ":")
If Len([C9].Text) > 31 Then
    MsgBox "Supérieur à 31 caractères", 64, "Attention"
    Exit Sub
End If
For i = LBound(Interdits) To UBound(Interdits)
    If Len(Replace([C9].Text, Interdits(i), "")) < Len([C9].Text) Then
        MsgBox "Présence du caractère : " & Interdits(i), 64, "Attention"
        Exit For
    End If
Next
End Sub

Cordialement
 

Modeste

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Bonjour le fil,

Pas mieux que mes petits camarades (que j'embrasse et salue ... et Dieu reconnaîtra les siens! ) mais une question: on parle des caractères interdits dans les noms de fichiers, au message #1!? Il en manque encore, alors et la limite à 31 caractères n'est pas d'application ... ou je m'é gourré
 

Efgé

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Re
Salut Modeste

Exact, j'étais parti sur les noms de feuilles, donc cela raccourci d'autant ma proposition, quant à la liste de caractères, elle peut assez aisément être modifiée.

Cordialement
 

800vfr76

XLDnaute Occasionnel
Re : Recherche caractères interdits.

Re,

Merci à tous ca marche très bien maintenant, j'ai fait plein d'essais avant cette fois pour pouvoir l'affirmer.

Pour info, liste des caractères interdits:

< > / \ : ? | * " [ ]

Et le nombre de caractères pour le nom d'un fichier est de 218, chemin compris (d'après Windows 7).

Voilà si cela peux aider.
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Re-bonjour, bonjour, Efgé , Modeste ,

Ah…, 800vfr76, nous voilà sauvés ! Deux experts, Efgé et Modeste, ont entendu et répondu à notre S.O.S. ! Bravo et merci à eux.

Mais… je ne peux m’empêcher de braire le code suivant :

VB:
Option Explicit
Sub Moi_pas_comprendre()
'La cellule sélectionnée contient le mot "Pourquoi", suivi d'un espace et du signe de ponctuation "?"
'Pourquoi ?
If Selection.Value Like "*?*" Then MsgBox "INCOMPETENCE AVEREE !" & vbLf & "Enclos regagner..." & vbLf & "ILLICO !..."
End Sub

Grs zibux à Mdeste.

A bientôt
 

Modeste

XLDnaute Barbatruc
Re : Recherche caractères interdits.

cellequiestplusquemodeste à dit:
nous voilà sauvés !
Bonsoir le fil,
Salut fillette

Je ne me prononcerai pas au nom de Fred, mais en vérité, si je devais être considéré comme un expert, sur ce forum ... ledit forum se trouverait sur une pente savonneuse, à forte déclivité ... avec un mur au bas de la pente!

Moi, tu sais bien, je ne hante les couloirs venteux de ce forum que dans l'espoir de t'y croiser de loin en loin

Bises aussi,
 

Staple1600

XLDnaute Barbatruc
Re : Recherche caractères interdits.

Bonjour à tous

On a parlé de regexp il me semble
Alors voici un exemple basique
Code:
Function EstValide(NomFichier$) As Boolean
With CreateObject("vbscript.regexp")
    .Pattern = "[\\/:\*\?""<>\|!~]"
    EstValide = Not .test(NomFichier)
End With
End Function
Code:
Sub test()
Dim S_tringA$, S_tringB$
S_tringA = "+¨^âc()()())b1\\23.txt))"
S_tringB = "Classeur1.xlsm"
MsgBox EstValide(S_tringA)
MsgBox EstValide(S_tringB)
End Sub
Je vous laisse cogiter ou glaner sur le net des patterns plus pointus
(notamment qui teste en plus la validation de l'extension du fichier)

EDITION: suite à l'intervention de Roland_M, j'ai modifié le pattern
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Recherche caractères interdits.

bonjour à tous

tant qu'on y est ...

ne pas oublier le chr(34) !
les signes [ ] ne sont pas interdits.

ceci sur le nom du fichier sans son extension !
on peut mettre un point mais perso c'est à éviter, c'est pour cela que je l'ai rajouté.
Code:
Public Function FTestCarFichInterdit(F$) As Boolean
FTestCarFichInterdit = False
Car$ = "< > \ / | ? : * . " & Chr(34)
For I = 1 To 10
  C$ = Choose(I, "<", ">", "\", "/", "|", "?", ":", "*", ".", Chr(34))
  If InStr(F$, C$) Then
     MsgBox "Dans un nom de fichier," & vbLf & "les caractères suivants sont interdits !" & vbLf & vbLf & Car$, vbCritical, "Info"
     FTestCarFichInterdit = True
  End If
Next
End Function

EDIT: la longueur du fichier est de 255 mais en NTFS c'est 32767 !
l'idéal étant de choisir une longueur raisonnable ! exemple 32 !?
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
768
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…