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 :

Comment formater et calculer des textbox créées dynamiquement?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut Comment formater et calculer des textbox créées dynamiquement?
    Bonjour la communauté,
    J’ai un petit (GROS !!!) souci de formatage et de calcul de textbox dans un UserForm.
    Je vous explique…
    Je crée dynamiquement des textbox par appui sur un bouton CommandButton qui me génère une ligne de textbox dans l’ordre : Nom de la société, Monant HT, Code TVA (qui est un combobox), TVA et Montant TTC.
    J’utilise pour créer ces rubriques dynamiques, un module de classe qui pour le coût fonctionne très bien…
    Je souhaite pouvoir, après chaque saisie d’un textbox (en l’occurrence Montant HT) pouvoir formater - certaines de mes textbox, avec ce format : "### ### ##0.00 €".
    De même, je souhaiterai effectuer – toujours après saisie (du combobox Code TVA cette fois), un calcul simple (du type Montant TTC = Montant HT +TVA – avec un taux de TVA donné par le combobox Code TVA ).
    J'ai bien pensé à utiliser un module de classe utilisant des "Property Get et Set", mais je ne vois pas comment déclencher ce module de classe.
    Mon souci principal est le déclenchement de l’action après saisie (AfterUpdate) puisque cette commande n’est pas disponible dans les modules de classe.
    Question… COMMENT FAIRE ???
    Si parmi cette formidable communauté quelqu’un a une idée… je suis preneur.
    Merci par avance pour vos réponses.
    Jppouma.

  2. #2
    Membre éclairé Avatar de GeoTrouvePas
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Juin 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 185
    Par défaut
    Bonjour,

    rien ne t'empêche, lors de la création d'un nouveau textbox, de le relier à un module de classe.
    Après, pour gérer le format, tu peux utiliser les évènements "KeyPress" ou "Change".

    Ci - dessous un petit exemple de ce que j'avais fait à mes débuts pour gérer un textbox au format Euros (la fonction AfficherAlerte gérait l'affichage d'un message d'alerte dans un labelbox):

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Explicit
    Public WithEvents MonTextbox As MSForms.TextBox
    Private Sub MonTextbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        'Transforme le "." en ","
        If KeyAscii = 46 Then KeyAscii = 44
     
        'Refuse les caractères autres que numériques (ou virgule)
        If KeyAscii <> 44 And (KeyAscii < 48 Or KeyAscii > 57) Then
            KeyAscii = 0
            MonTextbox.BackColor = &HFF&
            Call AfficherAlerte("Caractère interdit")
            Exit Sub
        End If
     
        'Refuse la saisie d'une deuxième virgule
        If KeyAscii = 44 And InStr(MonTextbox, ",") > 0 Then
            KeyAscii = 0
            MonTextbox.BackColor = &HFF&
            Call AfficherAlerte("Une seule virgule possible")
            Exit Sub
        End If
     
        'Refuse une virgule si le textbox est vide
        If KeyAscii = 44 And Len(MonTextbox) = 0 Then
            KeyAscii = 0
            MonTextbox.BackColor = &HFF&
            Call AfficherAlerte("Pas de virgule si le textbox est vide")
            Exit Sub
        End If
     
        'Empêche de saisir plus de 10 chiffres avant la virgule
        If KeyAscii <> 44 Then
            If MonTextbox <> "" Then
                If Len(Int(MonTextbox)) > 9 Then
                If MonTextbox.SelStart < InStr(MonTextbox, ",") Or InStr(MonTextbox, ",") = 0 Then
                    KeyAscii = 0
                    MonTextbox.BackColor = &HFF&
                    Call AfficherAlerte("Pas plus de 10 chiffres avant la virgule")
                    Exit Sub
                End If
            End If
            End If
        End If
     
        'Empêche de saisir plus de 2 chiffres après la virgule
        If Left(Right(MonTextbox.Value, 3), 1) = "," And MonTextbox.SelStart > Len(MonTextbox.Value) - 3 Then
            KeyAscii = 0
            MonTextbox.BackColor = &HFF&
            Call AfficherAlerte("Pas plus de 2 chiffres après la virgule")
            Exit Sub
        End If
     
     
    End Sub
    Private Sub MonTextbox_Change()
        MonTextbox.BackColor = &H80000005
        Call ResetAlerte
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Merci pour ton aide GeoTrouvePas.
    Comme tu me le suggères, je relie bien mes textbox à un module de classe...
    Mais utiliser "Change" lors de la saisie n'est pas pertinent. Dès le premier caractère tapé, ca me formate ma textbox du style "1,00 €258" alors que j'aurais souhaité avoir "1 258,00 €".
    Je vois pas bien comment faire avec "KeyPress".
    Pour ce qui est du contrôle des caractères, j'avais déjà une petite procédure, mais merci quand même pour tes propositions.
    Je tourne en rond sur mon problème... et pas de solution en vue.
    jppouma.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re
    je l'ai déjà démontré comment gérer le format évolutif lorsque qu'on tape le chiffre
    sert toi du tag pour mémoriser le chiffre tapé tel quel et fait le formatage du chiffre du tag dans le value

    pour l'évolution c'est simple c'est le chr(keyascii)du keypress
    je te fait un exemple quand je rentre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    peu etre dans ce genre la
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If KeyAscii = 46 Then KeyAscii = 44
        TextBox1.Tag = TextBox1.Tag & Chr(KeyAscii)
        TextBox1.Value = Format(TextBox1.Tag, "### ### ##0.00 €")
    End Sub
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If InStr(TextBox1.Value, "€") > 0 Then TextBox1 = Split(TextBox1.Value, "€")(0) & "€"
    End Sub
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 8 Then ' si on tape la touche back
           TextBox1.Tag = Mid(TextBox1.Tag, 1, Len(TextBox1.Tag) - 2)
         TextBox1.Value = Format(TextBox1.Tag, "### ### ##0.00 €")
            End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Merci pour ta réponse patricktoulon,
    Je test ta méthode demain.
    Il reste la problématique que j'évoquais dans mon message initial, à savoir le calcul des textbox... "AfterUpdate".
    Si il te reste quelques idées sur le sujet...
    Encore merci.
    jppouma.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/02/2016, 16h46
  2. [XL-2007] Utilisation de l'évènement Exit sur des TextBox crée dynamiquement
    Par leuleu90 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/09/2015, 23h27
  3. Réponses: 1
    Dernier message: 07/01/2008, 19h40
  4. [C#] Récupérer le texte de textBox créées dynamiquement
    Par cyllix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/06/2006, 11h45
  5. Réponses: 1
    Dernier message: 25/04/2006, 16h22

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