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 :

Boucle sur TextBox_AfterUpdate


Sujet :

VBA

  1. #1
    Membre à l'essai
    Homme Profil pro
    Centre Spatial Guyanais
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Centre Spatial Guyanais
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Boucle sur TextBox_AfterUpdate
    Bonjour,

    Je souhaiterais faire une boucle sur quelques TextBox_AfterUpdate()
    Txt1_AfterUpdate(), Txt2_AfterUpdate(), Txt3_AfterUpdate()...etc...
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub txt1_AfterUpdate()
        If IsNumeric(Me.txt1.Value) Then
         Me.txt1.Value = Format(Me.txt1.Value, "# ##0.00 €")
        End If
    End Sub
    Je n'arrive pas à le faire en boucle, si quelqu'un pouvait me donner un exemple ou un lien.
    Merci par avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    sauf erreur de ma part

    le AfterUpdate se déclenche quand une donnée est modifié dans le textbox

    Je ne pense pas que tu modifie plusieurs textbox en même temps

    je ne comprends pas ta demande de boucle...

    l'option la plus probable est que je n'ai rien compris à ton besoin....

  3. #3
    Membre à l'essai
    Homme Profil pro
    Centre Spatial Guyanais
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Centre Spatial Guyanais
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci a_diard de bien vouloir me répondre,
    Je me suis mal exprimé, désolé.
    J'ai dans un UserForm 30 lignes et 3 colonnes de textbox.
    je n'interviens que dans les 2 premières colonnes et la 3ème fait les calculs, c'est la 2ème qui me pose "problème".

    ex : 25.32 x 12.38€ = 313.46€
    lorsque je saisie 12.38 dans la 2ème, la troisième affiche 313.46€ et la 2ème passe au format 12.38€

    J'ai donc dans mon programme 30fois txt_afterupdate pour la 2eme colonne et je souhaitais simplifier ca avec une boucle.
    Je ne peux pas le faire avec txt_Change() car après chaque saisie dans cette colonne la 3ème fait le calcul (au format monétaire )et la 2ème doit être au format monétaire aussi.
    Certaines lignes du UserForm peuvent être vides, et je peux entrer des valeurs plusieurs lignes plus bas.
    Les données sont transférées après dans un fichier, et peuvent être récupérées ultérieurement dans le UserForm.

    Je ne sais pas si je me suis mieux exprimé cette fois.......

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 951
    Points
    55 951
    Billets dans le blog
    131
    Par défaut
    Salut.

    Une façon simple de procéder, mais qui requiert de manipuler chaque évènement AfterUpdate des textbox, est de déporter le traitement dans une procédure appelée par chaque évènement AfterUpdate des textbox concernés.

    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
    Private Sub TextBox1_AfterUpdate()
      TextBoxAfterUpdate TextBox1
    End Sub
     
    Private Sub TextBox2_AfterUpdate()
      TextBoxAfterUpdate TextBox2
    End Sub
     
    Private Sub TextBox3_AfterUpdate()
     TextBoxAfterUpdate TextBox3
    End Sub
     
    Private Sub TextBoxAfterUpdate(tbo As MSForms.TextBox)
      MsgBox tbo.Name & " modifié"
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    Centre Spatial Guyanais
    Inscrit en
    Janvier 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Centre Spatial Guyanais
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci messieurs TULLIEZ et FAUCONNIER,
    Je vais me pencher sur les tutos de Mr Philippe TULLIEZ, car je pense partir sur le module de classe.
    La méthode de Mr Pierre FAUCONNIER est plus simple, mais ne simplifie pas énormément ma programmation actuelle (1 ligne seulement par TextBox).
    Dès que j'ai ma solution, je reviendrais vers vous pour vous tenir au courant, j'attends donc avant d'appuyer sur résolu.

    Encore merci

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 951
    Points
    55 951
    Billets dans le blog
    131
    Par défaut
    Plus simple, je ne sais pas, car ce qui est simple pour certains peut ne pas l'être pour d'autres. En l'absence d'une grille de critères commune, il est malaisé de parler de "plus simple".

    Créer une classe qui gère les évènements pour plusieurs contrôles se réalise de la manière suivante:

    Créer un module de classe et y saisir le code suivant. On voit que l'objet reçoit un msforms.textbox et l'attribue à une variable du module de classe, Private ou Public. La classe peut alors gérer certains évènements des textbox, comme ici Change.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Private WithEvents mTbo As MSForms.TextBox
     
    Sub Init(Value As MSForms.TextBox)
      Set mTbo = Value
    End Sub
     
    Private Sub mTbo_Change()
      MsgBox mTbo.Name & " est modifié"
    End Sub
    A l'initialisation du userform, on boucle sur les contrôles et on ajoute à une collection du userform les contrôles TextBox.
    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
    Option Explicit
     
    Private tbos As Collection
     
    Private Sub UserForm_Initialize()
      Dim c As MSForms.Control
      Dim MyTbo As cTbo
     
      Set tbos = New Collection
      For Each c In Me.Controls
        If TypeName(c) = "TextBox" Then
          Set MyTbo = New cTbo
          MyTbo.Init c
          tbos.Add MyTbo
        End If
      Next
    End Sub

    Le problème est que les évènements d'un msforms.textbox ne sont pas tous repris dans les évènements d'une variable msforms.textbox. Il en manque 4, dont celui qui t'intéresse: BeforeUpdate, AfterUpdate, Enter, Exit.



    Au delà de cet aspect technique, je me pose toujours la question de savoir pourquoi on réinvente Excel avec 90 textbox qui, si j'ai bien compris le problème posé, ressemblent peu ou prou à une plage de cellules de 30 lignes et 3 colonnes. Pourquoi refaire en programmation ce pour quoi Excel est fait? Ne serait-il pas plus simple d'utiliser ce qui existe?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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