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

VBA Discussion :

Problème avec le SetFocus


Sujet :

VBA

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 138
    Points
    138
    Par défaut Problème avec le SetFocus
    Bonjour à tous,

    J'ai un Sub qui me sert à vérifier si la personne saisie bien que du text et un autre des numériques.

    Ca fonctionne très sauf une instruction celle de garder le focus.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub verifieTexte(LaChaine As String, lavariable As String)
        Dim reg As New VBScript_RegExp_55.RegExp
        Dim ValideTexte As Boolean
     
        reg.Pattern = "^[A-Z]{4}$"
        ValideTexte = reg.Test(LaChaine)
     
        Set reg = Nothing
     
        If LaChaine <> "" And ValideTexte = False Then
            MsgBox ("Merci de saisir quatre lettres !")
            Me.Controls(lavariable).Value = ""
            Me.Controls(lavariable).SetFocus
        End If
    End Sub
     
    Sub verifieChiffre(lavariable As String, vHaute As Integer, vDefaut As String)
        Dim vtHaute As String
        vtHaute = vHaute
        If (Not IsNumeric(Me.Controls(lavariable).Value) Or Me.Controls(lavariable).Value < 0 Or Me.Controls(lavariable).Value > vHaute) And Me.Controls(lavariable).Value <> "" Then
            MsgBox ("Merci de saisir un chiffre compris entre 0 et " + vtHaute + " !")
            Me.Controls(lavariable).Value = vDefaut
            Me.Controls(lavariable).SetFocus
        End If
        If Me.Controls(lavariable).Value = "" Then Me.Controls(lavariable).Value = vDefaut
    End Sub
    Merci de votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Passioné
    Inscrit en
    Août 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passioné
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 82
    Points : 116
    Points
    116
    Par défaut
    Qu'est-ce qui arrive dans "lavariable" ?

    Apparement :
    - Me.Controls("Text1").SetFocus fonctionne
    - Me.Controls("Me.Text1").SetFocus ne fonctionne pas

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 138
    Points
    138
    Par défaut
    bonjour

    comme tu l'as dit en premier

    la variable lavariable est sous la forme "codePro"

    voici mon appel

    call verifieTexte(codePro.Value, "codePro")

    la syntaxe Me.Controls(lavariable).Value = "" est correcte car la mise à vide fonctionne très bien.

    si tu veux d'autre explication pas de problème

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 138
    Points
    138
    Par défaut
    Bonjour à tous,

    j'ai trouvé une solution qui m'a permis de réaliser mon objectif.

    Je reprends la définition de mon objectif :

    L'utilisateur qui fait une erreur de saisie doit reste sur la cellule jusqu'à ce qu'il ne fasse plus d'erreur ou qu'il saisisse "" et entrer.
    Et il faut retourner un message d'erreur bien sûr.

    Alors voila comment il faut faire grâce à la méthode Cancel = True/False

    Sur l'événement exit de la zone de saisie il faut taper
    Cancel = nbEntier(TEST, "mavar", 4, "0", 4, 2)

    Dans la fonction il faut retourner une valeur boolean True or False
    True si il y a une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    'Attribut leUF : nom du UserForm utilisé dans la fonction
    'Attribut lavariable : nom de l'objet utilisé dans la fonction
    'Attribut longueur : longueur maximum autorisée pour la saisie à cet objet
    'Attribut vDefaut : valeur à attribuer par défaut si une erreur est détectée
    'Attribut vHaute : valeur maximum autorisée pour la saisie à cet objet
    'Attribut vBas : valeur minimum autorisée pour la saisie à cet objet
    'Attribut eMsg : message à transmettre en cas d'erreur (valeur par défaut = "")
    Function nbEntier(leUF As UserForm, lavariable As String, longueur As String, vDefaut As String, _
                      Optional vHaute As Long = 100, Optional vBas As Integer = 0, Optional eMsg As String = "") _
                      As Boolean
     
        'Necessite d'activer la reference Microsoft VBScript Regular Expression x.x Object Library
        Dim reg As New VBScript_RegExp_55.RegExp
        Dim ValideNBE As Boolean
     
        reg.Pattern = "^[0-9]{1," + longueur + "}$"
        ValideNBE = reg.test(leUF.Controls(lavariable).Value)
     
        Set reg = Nothing
     
        If (leUF.Controls(lavariable).Value <> "" And leUF.Controls(lavariable).Value <> vDefaut) And _
        (ValideNBE = False Or (IsNumeric(leUF.Controls(lavariable).Value) And _
                (leUF.Controls(lavariable).Value < vBas Or leUF.Controls(lavariable).Value > vHaute))) _
        Then
            If eMsg <> "" Then
                MsgBox (eMsg)
            Else
                MsgBox ("Merci de saisir seulement des entiers compris entre " + CStr(vBas) + " et " + CStr(vHaute) + "!")
            End If
            leUF.Controls(lavariable).Value = ""
            nbEntier = True
        Else
            If leUF.Controls(lavariable).Value = "" Then leUF.Controls(lavariable).Value = vDefaut
        End If
     
    End Function
    Voilà en espérant que ça aidera d'autre utilisateur

    Merci à tous

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

Discussions similaires

  1. [AC-2010] Problème avec SetFocus
    Par prosper02 dans le forum VBA Access
    Réponses: 6
    Dernier message: 04/05/2013, 13h07
  2. [XL-2010] Problème avec SetFocus
    Par Missouflo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2013, 20h52
  3. problème avec CheckBox - EditText.setFocusable()
    Par karamovic dans le forum Android
    Réponses: 4
    Dernier message: 04/06/2012, 16h49
  4. Problème avec setFocus
    Par veriecherie dans le forum IHM
    Réponses: 8
    Dernier message: 28/07/2009, 10h31
  5. [AC-2003] problème avec acropdf et setfocus
    Par atchoooum dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/05/2009, 11h14

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