caractères interdits

  • Initiateur de la discussion thombar
  • Date de début
T

thombar

Guest
bonjour,

Comment ne pas autoriser à un utilisateur d'insérer des caractères dans une cellule ?

liste des caractères interdits : \ / : ? * < > . "

(j'utilise la valeur de cette cellule comme une partie du nom d'un fichier enregistré automatiquement, avec des caractères comme ceux-là dans la cellule, ca plante...)

une simple ligne du style : "si tu trouve un de ces caractères dans cette cellule alors message qui dit de refaire" me conviendrait.

merci !!!
 
M

Monique

Guest
Bonjour,

Tu peux taper ces 9 caractères interdits dans les cellules allant de A1 à I1
Tu sélectionnes la plage dans laquelle il ne faut pas saisir ces caractères.
On admet que tu sélectionnes une plage à partir de K5.
Barre de menu - Données - Validation -
Dans l'onglet "Options", tu choisis "Autoriser personnalisé"
Dans la zone "Formule", tu tapes :
=NON(ESTERREUR(TROUVE($A$1;K5)+TROUVE($B$1;K5)+TROUVE($C$1;K5)+TROUVE($D$1;K5)+TROUVE($E$1;K5)+TROUVE($F$1;K5)+TROUVE($G$1;K5)+TROUVE($H$1;K5)+TROUVE($I$1;K5)))
Dans l'onglet "Alerte d'erreur", tu tapes ton message.

Tu peux aussi taper :
=NON(ESTERREUR(TROUVE("\";K5)+TROUVE("/";K5)+TROUVE(":";K5)+TROUVE("?";K5)+TROUVE("*";K5)+TROUVE("<";K5)+TROUVE(">";K5)+TROUVE(".";K5)+TROUVE($I$1;K5)))
en logeant le " dans une cellule (I1 pour cet exemple), car le " refuse de rentrer entre deux " "
 
L

Lord Nelson

Guest
Salut,
En VBA, on peut la jouer comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$7" Then
If Target.Value = "" Then Exit Sub
Dim I As Integer, CarExclus As String, Chn As String, PosX As Integer
CarExclus = "/\:?*<>." & Chr$(34)
Chn = Target.Value
For I = 1 To Len(CarExclus)
PosX = InStr(Chn, Mid(CarExclus, I, 1))
If PosX > 0 Then
Chn = Left(Chn, PosX - 1) & Right(Chn, Len(Chn) - PosX)
Target.Value = Chn
Exit For
End If
Next
End If
End Sub

L'idée est de supprimer automatiquement tout caractère indésirable.
On pourrait aussi prévoir un message destiné à l'utilisateur fautif, mais ne risque-t-on pas de le traumatiser ?

A+
LN
 
T

thombar

Guest
Merci pour vos précieuses réponses, je retiens en particulier celle de Lord Nelson qui me convient parfaitement. Bravo.

Je possède une feuille où j'ai deux cellules distinctes à traiter. (ex : C7 et G2). Comment modifier ce fabuleux code pour intégrer cela ?

merci !!
 
L

Lord Nelson

Guest
Bonjour le Forum,

C'est le point d'entrée de la procédure que tu dois traiter :

If Target.Address = "$C$7" Then
peut être modifié en :
If Target.Address = "$C$7" Or Target.Address = "$B$2" Then
mais si tu as de nombreuses cellules à valider :
If Instr("$A$1;$B$2;$C$3;$D$4;$E$5....", Target.Address) >0 Then

Merci pour ton appréciation, j'en rougis...
A+
 

Discussions similaires

Réponses
3
Affichages
299

Statistiques des forums

Discussions
312 276
Messages
2 086 711
Membres
103 377
dernier inscrit
fredy45