IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

IsNumeric et LCase "stricts"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut IsNumeric et LCase "stricts"
    Bonjour à toutes et à tous !

    J'ai un petit problème que je ne sais pas régler et j'aurais voulu avoir votre avis. Tout d'abord, voilà le bout de code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If nomref = "X" Or nomref = "O" Or nomref = "I" Or (IsNumeric(nomref)) Or LCase(nomref) = nomref Then
                        MsgBox "Une référence ne peut pas être en minuscules, en chiffres ni comporter de X, O ou I.", vbCritical, "Erreur"
    Ainsi, nomref (étant ce que je rentre dans une InputBox) ne peut être ni une minuscule, ni un X, un O ou un I, ni même un chiffre. Cependant les combinaisons marchent du moment qu'il y a un caractère autorisé dans la chaîne. Ainsi, A15 marche alors que je ne voudrais pas ça vu qu'il y a des chiffres dedans. De même, aaaaA marche car le A majuscule existe. Etc Etc.

    Comment peut-on donc bloquer toutes les minuscules et tous les chiffres dans ma saisie afin que seules les majuscules, hormis X, O et I, et leurs combinaisons soient acceptées ? De plus, la saisie vide doit être autorisée et ici ce n'est pas le cas.

    Cordialement.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut DeaD78 et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nomref=ucase(nomref)
    If nomref = "X" Or nomref = "O" Or nomref = "I" Or (nomref like "+[0-9]*" Then
                        MsgBox "Une référence ne peut pas être en minuscules, en chiffres ni comporter de X, O ou I.", vbCritical, "Erreur"
    La solution la plus simple, c'est de forcer la saisie en Majuscule. Mais si ça ne convient pas, regarde "Option Compare dans l'aide, avec une demande de comparaison de nomref=ucase(nomref).
    A+

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Merci beaucoup à vous 2!

    Je me suis un peu arrangé. Au final j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    While Not bool
                    nomref = InputBox("Nom des références si elles existent ?", "Nom des références")
                    If StrPtr(nomref) = 0 Then
                        Call Clear
                        End
                    End If
                    nomref = UCase(nomref)
                    If (nomref Like "*[X,O,I]*") Or (nomref Like "*[0-9]*") Then
                        MsgBox "Une référence ne peut pas être en minuscules, en chiffres ni comporter de X, O ou I.", vbCritical, "Erreur"
                    Else
                        bool = True
                    End If
                Wend
    Gorfael, j'ai dû mettre afin que cela marche peu importe où le caractère se trouve dans la chaîne.

    Ouskel'nor, j'ai mis dans un seul Like la reconnaissance du X, O et I mais par contre je ne comprends pas ce que tu as voulu dire par supprimer la saisie entre les saisies successives. Tu peux m'éclairer ce point stp?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    A la fin de l'inputbox, j'ai ajouté nomref. Si la saisie n'est pas bonne, à l'affichage suivant de l'inputbox, tu as la valeur saisie en plus du message, valeur que l'utilisateur n'aurait plus qu'à modifier.
    Une remarque : En insérant un msgbox, tu te compliques la vie. Tu pourrais adapter mon code en mettant simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do
        nomref = UCase(InputBox("Saisie" & msg, , nomref))
        msg = vbCr & vbCr & "Une référence ne peut pas être en minuscules, en chiffres ni comporter de X, O ou I."
    Loop While nomref <> "" And (nomref Like "*O*" Or nomref Like "*#*" Or nomref Like "*X*" Or nomref Like "*I*")
    MsgBox nomref
    Ainsi, au second passage, tu aurais le message incorporé à l'inputbox

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    D'accord, j'ai compris Merci pour l'astuce afin d'avoir une InputBox avec pour valeur par défaut la dernière saisie ! Je m'en souviendrai Par contre, pour ce cas, il vaut mieux avoir de nouveau un champ vide. Merci !

    Et merci pour ton astuce, c'est vrai que ça fait plus "light"

    Allez, Résolu

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do
        nomref = UCase(InputBox("Saisie" & vbCr & vbCr & "Une référence ne peut pas être en minuscules, en chiffres ni comporter de X, O ou I.", , nomref))
    Loop While nomref <> "" And (nomref Like "*O*" Or nomref Like "*#*" Or nomref Like "*X*" Or nomref Like "*I*")
    MsgBox nomref
    Si tu veux que la saisie soit supprimée entre les saisies successives, supprime nomref dans la valeur par défaut de l'inputbox.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo