Limiter certaines lettres dans une cellule

ShuarS

XLDnaute Occasionnel
Bonjour à tous :)

Dans la macro ci dessous, comment puis je faire pour autoriser en plus des caractères numériques, uniquement les lettres a, b et s svp ?

ABS ou abs exactement.
VB:
With Intersect(.Range("B2:B" & .Rows.Count).SpecialCells(xlCellTypeConstants).EntireRow, .[D:Q])
        .Locked = False
        .Value = ""
        .Validation.Add xlValidateDecimal, , Formula1:="0", Formula2:="100"
        '.Validation.Add xlValidate?????, , Formula1:="A" "B" "S" "a" "b" "s"  ????

Merci pour votre aide,
Shu
 
Dernière édition:

ShuarS

XLDnaute Occasionnel
Je me suis dépatouillé avec l'enregistreur mais j'imagine qu'il est possible d'écrire ça plus proprement.
VB:
Range("D2:Q2").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="ABS"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With

Qu'en pensez vous ?
 

job75

XLDnaute Barbatruc
Notez que la formule précédente autorise le séparateur décimal (virgule chez moi) au sein des chiffres.

Si on veut aussi l'interdire utiliser cette formule :
Code:
=NON(MOD(SUBSTITUE(SUBSTITUE(D2;"ABS";);"abs";)&0;1))
En version anglaise elle s'écrit :
Code:
=NOT(MOD(SUBSTITUTE(SUBSTITUTE(D2,"ABS",),"abs",)&0,1))
Edit : ici on n'a pas besoin de convertir avec -(xxx) la fonction MOD s'en charge.
 
Dernière édition:

ShuarS

XLDnaute Occasionnel
Bonjour à vous @job75 et merci pour vos explications détaillées :)

Dans mon cas je cherchais à passer par VBA car la plage des cellules est variable.
Et de cette manière je ne charge pas le fichier de base, car tout est directement appelé via une macro dans un .xlam sur serveur.

Mais je prends bonne note de vos lignes de commandes.

Bonne journée,
Shu
 

job75

XLDnaute Barbatruc
En VBA on utilisera ce code pour la 2ème formule :
VB:
With [D2:Q2] 'plage à adapter
    .Validation.Delete
    .Validation.Add xlValidateCustom, Formula1:="=NOT(MOD(SUBSTITUTE(SUBSTITUTE(" & .Cells(1).Address(0, 0) & ",""ABS"",),""abs"",)&0,1))"
End With
 

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren