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 :

Retour de focus sur txtbox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Par défaut Retour de focus sur txtbox
    Bonjour à tous les contributeurs

    Pour remplir un tableau (résultats d'un questionnaire avec numéros de questionnaire défini), j'ai créé un formulaire.
    Dans mon formulaire, j'indique dans un 1er textbox (txNum) le numéro du questionnaire pour compléter la ligne correspondante du tableau avec les valeurs notées dans des textbox suivants.
    Cela fonctionne sans problème. Quand je valide mon formulaire, les données sont bien transférées dans le tableau et je peux ainsi saisir les réponses des questionnaires sans avoir à les classer ou rechercher la bonne ligne dans le tableau.
    Gain de temps incontestable !

    Là ou j'ai une difficulté, c'est quand à la sortie du 1er tetxtbox (Private Sub txNum_Exit...), je teste l'existence du numéro de questionnaire dans la liste. Si le numéro n'existe pas, j'affiche un msgbox.
    Je n'arrive pas à redonner le focus à mon txNum en fermant ce msgbox, il faut, ou cliquer dans le txNum, ou utiliser la touche de tabulation.
    Dans le code, j'ai essayé de placer "txNum.setfocus" avant "exit sub" mais cela ne fonctionne pas.
    J'ai aussi essayé de placer "Private Sub UserForm_Initialize()" au même endroit mais cela ne fonctionne pas non plus.

    Existe-t'il une solution par le code ?
    Merci d'avance !

  2. #2
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 507
    Par défaut
    Salut,
    Un peu de lecture qui va surement t'aider à comprendre...

  3. #3
    Membre averti Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Par défaut pour expliquer
    Merci Valtrase pour te pencher sur mon problème.
    J'ai essayé de suivre le lien indiqué mais je ne trouve pas la solution
    Voilà une partie du code qui se produit quand le quitte le txtNum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub txNum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            numequip = txNum.Value
     
           'si le numéro est trop grand
              If numequip > valeur_cherchée Then
                        message = "Pas d'équipage avec le n° " + txNum.Value + " !"
                        txNum.Value = ""     ' j'efface ma valeur entrée qui n'est donc pas bonne
                        info = MsgBox(message, vbExclamation)
                        txNum.SetFocus
                        Exit Sub
    et c'est là où j'aimerais que le curseur revienne directement dans ce textbox. Je vois que le "txtnum.setFocus" placé là ne sert pas à grand chose.
    Sinon le programme fonctionne.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    C'est pourtant clair:
    Paramètres
    Nom Requis/Facultatif Type de données Description
    Cancel Obligatoire Entier Affectez la valeur True pour annuler l'événement.

  5. #5
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 507
    Par défaut
    Salut,
    En plus des explications de deedolith, j'ajouterais et c'est la première ligne de la page.
    L’événement Exit se produit juste avant qu’un contrôle ne perde le focus au profit d’un autre contrôle dans le même formulaire ou état.
    Donc en gros tu essaie de donner le focus à un contrôle qui l'a encore et qui va le perdre... si tu ne passes pas la variable Cancel à True.
    Voici quelques explications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub txNum_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            numequip = txNum.Value ' // Nul besoin ici de passer par une variable
     
           'si le numéro est trop grand
              If numequip > valeur_cherchée Then ' // On évite les accents, VB est Anglais ;)
                        Message = "Pas d'équipage avec le n° " + txNum.Value + " !" ' // Ca c'est inutile ici
                        txNum.Value = ""     ' j'efface ma valeur entrée qui n'est donc pas bonne ' // je déconseille d'effacer, afin de laisser l'utilisateur voir la valeur.
                        info = MsgBox(Message, vbExclamation) ' // C'est juste un message donc inutile d'y affecter une variable de retour
                        txNum.SetFocus ' // Ca aussi c'est inutile
                        Exit Sub ' // On évite les sortie de Sub ou Fonction on leur préfère les Select Case ou If Else.
    Donc en gros cela pourait donner quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub txtNum_Exit(ByVal Cancel As MSForms.ReturnBoolean)'si le numéro est trop grand
        With txtNum
            If CInt(.Value) > SearchValue Then    ' // J'ai remplacé valeur_cherchée par SearchValue
                .SelStart = 0
                .SelLength = Len(.Value)
                MsgBox "Pas d'équipage avec le n° " + .Value + " !", _
                       vbOKOnly + vbInformation, "Erreur de saisie"
                Cancel = True    ' // Ici on annule la saisie on reste donc sur le textbox nul besoin de lui donner le focus
            Else
                ' // Ici le code si la valeur est infèrieure
            End If
        End With
    End Sub

  6. #6
    Membre averti Avatar de Mike924
    Homme Profil pro
    bénévole association
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : bénévole association
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Par défaut
    Bonsoir
    Merci Valtrase pour tes explications. Cela me parait plus clair maintenant et je comprends mieux mes erreurs.
    Je ne code pas beaucoup et apprends tout doucement, j'essaye d'améliorer mes fichiers Excel. Cela me prend du temps d'autant plus que mes neurones commencent à prendre de la bouteille.

    Je vais essayer de revoir mon code complet puisque je teste aussi la présence de saisies déjà effectuées. En fait, si un questionnaire a déjà été saisi, j'affiche un message d'alerte et je récupère les valeurs dans le tableau. Cela peut être utile en cas de correction mais évite aussi d'écraser des saisies en cas d'erreur de frappe.

    Si j'arrive à faire fonctionner le tout, je posterai un message et afficherai le sujet comme résolu.
    Merci encore et Bien Cordialement !

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

Discussions similaires

  1. Retour du focus sur un champ après onBlur
    Par ZippoBis dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/03/2012, 09h32
  2. Focus sur TxtBox dans Datalist
    Par jfontaine dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/05/2011, 10h51
  3. Focus sur DrawGrid
    Par zworg dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/05/2004, 13h44
  4. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  5. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06

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