Variable VBA recherche de caratères spéciaux
Résolu/Fermé
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
-
20 nov. 2009 à 10:29
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 - 24 nov. 2009 à 09:54
pou pouille Messages postés 207 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 juillet 2012 - 24 nov. 2009 à 09:54
A voir également:
- Variable VBA recherche de caratères spéciaux
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractere speciaux mac - Guide
- Recherche adresse - Guide
12 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
20 nov. 2009 à 11:11
20 nov. 2009 à 11:11
Bonjour,
Voila une proposition :
On teste caractère par caratère.
Pour les guillemets il faut les doubler pour qu'ils soient pris en compte.
A+
Voila une proposition :
Do Enregistrement = InputBox("Nom du programme", "Nom Programme", Left(Nomfichier, Len(Nomfichier) - 4)) If Enregistrement = "" Then MsgBox "rentrer un nom de programme", vbExclamation Loop While Enregistrement = "" For Icar = 1 To Len(Enregistrement) Car = Mid(Enregistrement, Icar, 1) If Car = "/" Or Car = ":" Or Car = "*" Or Car = "?" Or Car = "<" Or Car = """" Or Car = ">" Or Car = "|" Then MsgBox ("attention le nom du fichier ne peut comporter de caratères tels que " & Chr(13) & "\ / : * "" ? < > |") Exit For End If Next Icar
On teste caractère par caratère.
Pour les guillemets il faut les doubler pour qu'ils soient pris en compte.
A+
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
20 nov. 2009 à 11:24
20 nov. 2009 à 11:24
Un grand merci , cela fonctionne très bien en effet ,cependant je souhaiterai que si un caractère incorecte soit détecté , le message d'erreur s'affiche et que l'on revienne à la première étape qui est le Do enregistrement= ...
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
20 nov. 2009 à 11:32
20 nov. 2009 à 11:32
Oui tu peux utiliser la boucle par exemple :
A+
Do Enregistrement = ... If Enregistrement = "" Then MsgBox "rentrer un nom de programme", vbExclamation For Icar = 1 To Len(Enregistrement) Car = Mid(Enregistrement, Icar, 1) If Car = ... MsgBox ("attention le nom du fichier ne peut comporter de caratères tels que " ... Enregistrement = "" Exit For End If Next Icar Loop While Enregistrement = ""
A+
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
20 nov. 2009 à 11:59
20 nov. 2009 à 11:59
cela fonctionne parfaitement merci
(j'avai en tete d'affecter une variable =0 ou 1 et de sortir du loop tant que il y a 1 ou 0, mais c'est bien plus simple comme cela, une seule boucle )
(j'avai en tete d'affecter une variable =0 ou 1 et de sortir du loop tant que il y a 1 ou 0, mais c'est bien plus simple comme cela, une seule boucle )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 nov. 2009 à 12:19
20 nov. 2009 à 12:19
bonjour,
a la bourre comme d'hab mais j'y vas quand m^
avec une fonction réutilisable partout ailleurs qui renvoie vrai ou faux (vrai: il y a un caractère interdit mais on peut choisir l'inverse)
a la bourre comme d'hab mais j'y vas quand m^
avec une fonction réutilisable partout ailleurs qui renvoie vrai ou faux (vrai: il y a un caractère interdit mais on peut choisir l'inverse)
Function detecter_car_interdit(nom_fichier As String) As Boolean Dim interdit Dim cptr As Long interdit = Array("""", "/", "?", ":", "|", "*", "<", ">", "[", "]") For cptr = LBound(interdit) To UBound(interdit) If InStr(nom_fichier, interdit(cptr)) Then detecter_car_interdit = True Exit Function End If Next cptr detecter_car_interdit = False End Function
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
20 nov. 2009 à 13:06
20 nov. 2009 à 13:06
Merci pour ta participation michel_m , peut tu me dire comment intégrer cette fonction ( ou simplement l'appelle de la fonction) à ma boucle .
(je souhaite comprendre un peut mieux l'utilisation et l'appelle de fonction) Merci.
(je souhaite comprendre un peut mieux l'utilisation et l'appelle de fonction) Merci.
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
20 nov. 2009 à 13:48
20 nov. 2009 à 13:48
Salut michel_m
Solution trés élégante (comme d'hab !).
Pour pou pouille voila un exemple d'utilisation de la fonction de Michel.
A+
Solution trés élégante (comme d'hab !).
Pour pou pouille voila un exemple d'utilisation de la fonction de Michel.
Dim Enregistrement As String Do Enregistrement = InputBox("Nom du programme", "Nom Programme", Left(Nomfichier, Len(Nomfichier) - 4)) If Enregistrement = "" Then MsgBox "rentrer un nom de programme", vbExclamation If detecter_car_interdit(Enregistrement) Then MsgBox ("attention le nom du fichier ne peut comporter de caratères tels que " & Chr(13) & "\ / : * "" ? < > |") Enregistrement = "" End If Loop While Enregistrement = ""
A+
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 nov. 2009 à 14:50
20 nov. 2009 à 14:50
Pou pouille: pour s'initier en douce aux sub paramétrées et aux fonctions:
http://www.info-3000.com/vbvba/subfunction.php
l'intérêt d'une fonction est que tu fait ça une bonne fois pour toutes sans avoir à tout réinventer à chaque procédure: tu te constitue ainsi un grenier dans lequel tu puises tranquillement en économisant de la matière grise!
Bon!
J'allais m'y mettre mais heureusement l'ami Pilas l'a fait, donc merci! -merci aussi pour ton appréciation: i am tout colorindex=3-
il y a une petite vach... où je me suis fait piéger: si l'utilisateur tape par ex: "aze.ty.bmp", il faut donc ajouter dans l'array le point.
d'autre part, une extension peut comporter 4 lettres (.jpeg) mais...
je vais regarder ce truc; quand, je sais pas
http://www.info-3000.com/vbvba/subfunction.php
l'intérêt d'une fonction est que tu fait ça une bonne fois pour toutes sans avoir à tout réinventer à chaque procédure: tu te constitue ainsi un grenier dans lequel tu puises tranquillement en économisant de la matière grise!
Bon!
J'allais m'y mettre mais heureusement l'ami Pilas l'a fait, donc merci! -merci aussi pour ton appréciation: i am tout colorindex=3-
il y a une petite vach... où je me suis fait piéger: si l'utilisateur tape par ex: "aze.ty.bmp", il faut donc ajouter dans l'array le point.
d'autre part, une extension peut comporter 4 lettres (.jpeg) mais...
je vais regarder ce truc; quand, je sais pas
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
20 nov. 2009 à 15:02
20 nov. 2009 à 15:02
merci beaucoup,
j'intègrerais cette fonction lundi quand je retournerai bosser ^^.
ce n'est pas la peine de se préoccuper de la terminaison puisque derrière enregistrement (enfin bien plus loin dans ma macro je rajoute l'extension Enregistrement & ".SMD" . ( et j'ai deja essayé sur mon ordi si je fait un truc du genre : toto.doc , il me le prend bien en toto.doc.smd donc aucun problème avec le point)
j'intègrerais cette fonction lundi quand je retournerai bosser ^^.
ce n'est pas la peine de se préoccuper de la terminaison puisque derrière enregistrement (enfin bien plus loin dans ma macro je rajoute l'extension Enregistrement & ".SMD" . ( et j'ai deja essayé sur mon ordi si je fait un truc du genre : toto.doc , il me le prend bien en toto.doc.smd donc aucun problème avec le point)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 nov. 2009 à 15:48
20 nov. 2009 à 15:48
re,re,
je sursaute quand je vois un nom de fichier style "toto.doc.smd" car c'est assez typique d'un virus (avec notamment "toto.doc.vbs") mais... '
ci dessous fonction + générale interdisant les 2 points dans le nom du fichier et avec des extensions à n caractères
je sursaute quand je vois un nom de fichier style "toto.doc.smd" car c'est assez typique d'un virus (avec notamment "toto.doc.vbs") mais... '
ci dessous fonction + générale interdisant les 2 points dans le nom du fichier et avec des extensions à n caractères
Function detecter_car_interdit(nom_fichier) As Boolean Dim interdit Dim cptr As Long 'teste si 2 points dans le nom de fichier If Len(nom_fichier) - Len(Replace(nom_fichier, ".", "")) > 1 Then GoTo erreur 'teste si nom de fichier comporte une extension If InStr(nom_fichier, ".") = 0 Then MsgBox " nom de fichier sans extension", vbCritical GoTo erreur End If ' travaille sur la partie gauche avant l'extension nom_fichier = Left(nom_fichier, InStr(nom_fichier, ".") - 1) interdit = Array("""", "/", "?", ":", "|", "*", "<", ">", "[", "]", ".") For cptr = LBound(interdit) To UBound(interdit) If InStr(nom_fichier, interdit(cptr)) Then GoTo erreur Next cptr detecter_car_interdit = False Exit Function erreur: detecter_car_interdit = True End Function ---------------------------------- Sub test() Dim fichier As String fichier = "az.ertY.jpeg" MsgBox detecter_car_interdit(fichier) End Sub
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
24 nov. 2009 à 08:49
24 nov. 2009 à 08:49
bonjour,
je suis désolé mais je ne savais pas que "toto.doc.vbs" était un virus.
pour moi toto c'est juste histoire de donner un nom bidon à mes fichiers de test.
j'ai donc réutilisé une partie du code pour faire ce que je souhaite (les deux points dans un meme nom de fichier n'étant pas génant pour moi puisque je crée le fichier nommé nom_fichier et que je l'enregistre au format .doc)
Merci comme meme pour ce code que je réutiliserai sans doute un peut plus tard.
de meme pour l'erreur 0 et 75, je pense qu'elles peuvent m'etre utile seulement dans le cas ou le fichier éxiste déja. je post le code donc que j'utilise.
je suis désolé mais je ne savais pas que "toto.doc.vbs" était un virus.
pour moi toto c'est juste histoire de donner un nom bidon à mes fichiers de test.
j'ai donc réutilisé une partie du code pour faire ce que je souhaite (les deux points dans un meme nom de fichier n'étant pas génant pour moi puisque je crée le fichier nommé nom_fichier et que je l'enregistre au format .doc)
Merci comme meme pour ce code que je réutiliserai sans doute un peut plus tard.
de meme pour l'erreur 0 et 75, je pense qu'elles peuvent m'etre utile seulement dans le cas ou le fichier éxiste déja. je post le code donc que j'utilise.
Function detecter_car_interdit(nom_fichier) As Boolean Dim interdit Dim cptr As Long 'teste si 2 points dans le nom de fichier If Len(nom_fichier) - Len(Replace(nom_fichier, ".", "")) > 1 Then GoTo erreur 'teste si nom de fichier comporte une extension If nom_fichier = "" Then MsgBox "rentrer un nom programme", vbExclamation GoTo erreur1 End If interdit = Array("""", "\","/", "?", ":", "|", "*", "<", ">", "[", "]", ".") For cptr = LBound(interdit) To UBound(interdit) If InStr(nom_fichier, interdit(cptr)) Then GoTo erreur Next cptr detecter_car_interdit = False Exit Function erreur: MsgBox ("Attention le nom du fichier ne peut comporter de caratères tels que :" & vbCrLf & vbTab & vbTab & vbTab & "\ / : * "" ? < > | .") erreur1: detecter_car_interdit = True End Function --------------------------------- Do Enregistrement = InputBox("Nom du programme", "Nom Programme", Left(NomFichier, Len(NomFichier) - 4)) Loop While detecter_car_interdit(Enregistrement) = True
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
24 nov. 2009 à 09:44
24 nov. 2009 à 09:44
Bonjour
je ne savais pas que "toto.doc.vbs" était un virus.
Ca veut dire que ca ressemble à un virus mais ca ne l'est pas forcément...la double extension est d'ailleurs repérée par tout anti-virus (m^me Avast...).
Extrait du site de de JC Bellamy sur le virus " I love you"
http://www6.bellamyjc.org/?tdfs=1&kw=Computer+Software+Blog&term=Computer%20Knowledge%20Base%20Software&term=Windows%20Server%20Patch%20Management%20Software&term=Windows%20Server%20Backup%20Software&backfill=0
Le virus est contenu dans un fichier, nommé LOVE-LETTER-FOR-YOU.TXT.vbs, et figure en pièce-jointe dans un courrier électronique. Cette double extension, qui peut sembler étrange, permet au virus de se déguiser aux yeux d'un utilisateur de Windows n'ayant pas reconfiguré l'explorateur. En effet, par défaut, l'explorateur n'affiche pas les extensions "connues", c'est à dire qui sont associées à une application. Or si on dispose de WSH, les fichiers ayant l'extension .vbs sont associés à l'application wscript.exe (par défaut).
Si bien que le virus sera affiché sous le nom LOVE-LETTER-FOR-YOU.TXT , et sera donc pris pour un simple fichier texte (sauf si l'utilisateur remarque l'icône et le type associés).
je ne savais pas que "toto.doc.vbs" était un virus.
Ca veut dire que ca ressemble à un virus mais ca ne l'est pas forcément...la double extension est d'ailleurs repérée par tout anti-virus (m^me Avast...).
Extrait du site de de JC Bellamy sur le virus " I love you"
http://www6.bellamyjc.org/?tdfs=1&kw=Computer+Software+Blog&term=Computer%20Knowledge%20Base%20Software&term=Windows%20Server%20Patch%20Management%20Software&term=Windows%20Server%20Backup%20Software&backfill=0
Le virus est contenu dans un fichier, nommé LOVE-LETTER-FOR-YOU.TXT.vbs, et figure en pièce-jointe dans un courrier électronique. Cette double extension, qui peut sembler étrange, permet au virus de se déguiser aux yeux d'un utilisateur de Windows n'ayant pas reconfiguré l'explorateur. En effet, par défaut, l'explorateur n'affiche pas les extensions "connues", c'est à dire qui sont associées à une application. Or si on dispose de WSH, les fichiers ayant l'extension .vbs sont associés à l'application wscript.exe (par défaut).
Si bien que le virus sera affiché sous le nom LOVE-LETTER-FOR-YOU.TXT , et sera donc pris pour un simple fichier texte (sauf si l'utilisateur remarque l'icône et le type associés).
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
24 nov. 2009 à 09:54
24 nov. 2009 à 09:54
ok je comprend mieux.
j'ai modifier les parametres d'affichage de mon ordi c'est pour cela que j'ai parfois les doubles extentions (car le format *.smd n'est pas connu par windows).
je devrai pas tarder à poster un nouveau sujet parce que ma macro fonctionne bien mais sous 2007 j'ai des problèmes... affaire à suivre.
merci pour les explications
j'ai modifier les parametres d'affichage de mon ordi c'est pour cela que j'ai parfois les doubles extentions (car le format *.smd n'est pas connu par windows).
je devrai pas tarder à poster un nouveau sujet parce que ma macro fonctionne bien mais sous 2007 j'ai des problèmes... affaire à suivre.
merci pour les explications
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
20 nov. 2009 à 17:25
20 nov. 2009 à 17:25
Bonjour tout le monde,
Une autre façon de faire serait de tenter d'ouvrir le fichier et laisser faire windows pour rejeter les mauvais noms.
Dans ton cas l'err 75 t'interesse : le chemin et le nom du fichier sont corrects et il n'existe pas.
Et éventuellement l'err 0 : fichier existant, pour accepter ou refuser.
ex :
Ca peut être fait sous forme de fonction aussi
eric
Une autre façon de faire serait de tenter d'ouvrir le fichier et laisser faire windows pour rejeter les mauvais noms.
Dans ton cas l'err 75 t'interesse : le chemin et le nom du fichier sont corrects et il n'existe pas.
Et éventuellement l'err 0 : fichier existant, pour accepter ou refuser.
ex :
Sub test() fich = FreeFile On Error Resume Next Open "c:\" & "te|st.txt" For Output As #fich MsgBox ("Err " & Err.Number & " : " & Err.Description) Close #fich if err= 0 or err=75 then ok=true ' ecrire fichier endif On Error GoTo 0 End Sub
Ca peut être fait sous forme de fonction aussi
eric
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
21 nov. 2009 à 09:59
21 nov. 2009 à 09:59
bonjour,
Eric: ta démo est très intéressante!!
merci
Eric: ta démo est très intéressante!!
merci