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 :

Total avec opérateurs "+" et "-" de plusieurs textBox dans une autre textBox


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut Total avec opérateurs "+" et "-" de plusieurs textBox dans une autre textBox
    Bonsoir,

    Il y a deux mois j'ignorais l'expression VBA ; j'ai donc un long chemin à parcourir.

    Requête
    Je souhaite créer une textBox qui serait le résultat (avec opérateurs "+" & "-"),
    en valeur positive ou négative, de plusieurs textBox (renseignées ou non).
    L'idée est de visionner sur le formulaire, dans une textBox, en temps réel, l'éventuel écart de ventilation, au fur et à mesure de la saisie des autres tetxBox.

    Précisions :
    Saisie textBox Recette ou saisie textBox Dépense en valeur positive
    Saisies aléatoires dans les TextBox Ventilation (certaines pouvant ne pas être renseignées) en valeur positive (recette) ou valeur négative (dépense).
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Christine

    As-tu un fichier à notre disposition avec ton Usf et tes Textbox ?

    A+

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Tetbox
    Bonjour Christine, Bonjour le Forum,

    Bienvenue sr le Forum!

    Si j'ai bien compris, tu souhaites voir aparaître dans une textbox le total de plusieurs textbox (en adition ou soustraction).

    L'idée:

    1- associer chaque textbox à une cellule nommée d'une même feuille de calcul(Txt_1 à val_1, Txt_2 à val_2, etc...).
    2 - Le résultat issue d'une cellule comportant la formule somme informerait ta Textbox résultante

    La méthode

    Lier chaque Textbox à un module de classe qui, par l'évènement "Change", impacterait à la fois ton résultat sur la feuille de calcul, et par conséquent ta Textbox résultat.
    Pourquoi un module de classe? Réponse : pour ne pas avoir à gérer x evènements Change ou Exit.

    Si tu le souhaites, on peut partir sur cette voie.

    Mais avant, juste pour info, jette un oeil sur ce tutoriel

    les classe d'objet par Pierrre Fauconnier

    A te lire donc.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut
    Bonjour Bruno

    Je pensais avoir joint le fichier excel mais le extension xlsm étant refusée, je viens de renvoyer le fichier excel sans macro. Ces dernières sont copiées dans un fichier Word.

    Merci


    Bonjour Marcel

    Je viens de joindre deux fichiers pour essayer de mieux expliquer ma requête.
    Comme vous pourrez le constater, je n'ai pas besoin que la textBox "Ventilation" apparaisse dans ma feuille Excel.
    Merci

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Christine,

    1 - Cela m'étonne que l'on ne puisse pas joindre des fichiers à extension ".xlsm" à une discussion. Mais je te crois.
    2 - Dans la méthode que je propose, ce n'est pas la Textbox qui apparaît dans la feuille de calcul mais le résultat, lui-même alimentant ta Textbox résultat dans ton formulaire.
    3- Pour plus de clarté, évite de reprendre la post déjà envoyé en le citant
    4 - Où sont tes fichiers? Je ne les vois pas.

  6. #6
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut total avec opérateurs"+" et "-" de plusieurs textbox dans une autre textbox
    bonjour Christine et Marcel,

    désolé de ne pouvoir apporter de solution au problème posé. mes connaissances VBA sont très limitées.

    je crois qu'on ne peut effectivement pas joindre de fichiers xlsm, sans doute pour éviter le transport de virus. Il faut le joindre au format compressé ZIP ou RAR.

    Sinon, j'ai lu avec intérêt le document (partie 1) de P. Fauconnier que tu as proposé.

    Comment peut-on trouver les autres parties de ce document sur ce site ?

    Merci.

    Cordialement.

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Paul,

    Il est vrai que le tutoriel de Pierre est - je le dis sans flagornerie aucune - essentiel pour aborder les modules de classe.

    (Moi-ême suis débutant en la matière)

    Sauf erreur, la suite est prévue mais encore à l'état de projet.

    Des exemples figurent sur ce forum, bien entendu, ainsi que chez les voisins du laboratoire (chez l'amie Misange gardien du site).

    Bonsoir Christine,

    Je viens de constater que les 2 fichiers étaient attachés à ton premier post.

    En préambule, 4 remarques
    1 - Pour trouver la 1ère ligne vide, évite la méthode Find avec argument "".
    Rien n'est plus dangereux. Utilise plutôt les méthodes End(xl...)
    2 - Prends l'habitude de nommer tes contrôles en suivant cette syntaxe : typeof + "_" + nom. Exemple : Txt_photo, Cbx_manuels, etc.. On s'y retrouve mieux!
    3 - Les modules de classe sont faits pour éviter la gestion mutiple d'un même évènement (en l'occurence ici, l'évènement "Change") (D'où la déclaration "WithEvents"). Mais j'admets volontiers que c'est une nouveauté.

    Je vois la méthode à prendre pour ce cas présent.

    Afin de faciliter la tâche, ne pourrais-tu pas enregistrer ton classeur sous format .xls (Excel 2003) et le joindre à ton post.
    Une fois cela effectué, tu pourras supprimer les 2 premiers fichiers.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Par défaut
    Bonjour Marcel
    Voici le fichier excel 97-2003
    Je vais m'absenter une quinzaine de jours.
    Dès mon retour, je me mettrai à plancher sur mon problème
    Cordialement
    ChristineToccata
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Module de classe pour gestion de l'affichage et du Textbox résultat
    Bonsoir Christine, Bonsoir le Forum,

    1 - Définir des noms de cellules correspondants aux noms de Textbox qui alimentent la classe d'Objet. Ces Textbox sont intégrés à un formulaire Usf_Journal.
    Chaque cellule nommée j_xxxx sera informée par le texte du contrôle Txt_xxxx
    A l'initialisation du formulaire Usf_Journal, ces contrôles alimentent une classe d'objets personnelle appelée Class_Txt_Journal. Class_Txt_Journal est le nom du module de classe
    Ici la nouvelle classe est appelée par la variable tableau "Postes."

    Code formulaire

    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
    Option Explicit
     
    Option Base 1
     
    'Module de classe
     
    'On définit une série de contrôles comme faisant partie _
            d'une classe d'objets personnelle appelée Class_Txt_Journal _
            Class_Txt_Journal est le nom du module de classe
     
    Dim Postes() As New Class_Txt_Journal
     
    Private Sub UserForm_Initialize()
     
    Dim wsj As Worksheet
    Dim dernl As Integer
    Dim n As Byte
    Dim Liste_Postes As Variant, Liste_col  As Variant
    Dim post
     
    'Variable wsj affectée à la feuille "Journal"
    Set wsj = ThisWorkbook.Worksheets("Journal")
     
    'Recherche de la première ligne vide à informer
    With wsj
            dernl = .Cells(.Rows.Count, 4).End(xlUp).Offset(1, 0).Row
    End With
     
    'Tableau des contrôles alimentant la classe d'objets personnelle, sauf le dernier
    Liste_Postes = Array("Recette", "Dépense", "Chorale", "Informatique", "Photo", "Théatre", "CpteACpte", "Contrôle")
     
    'Tableau des colonnes auxquelles appartiennent les cellules nommées
    Liste_col = Array(6, 8, 10, 11, 12, 13, 14, 15)
     
    'Compteur
    n = 0
     
    For Each post In Liste_Postes
            n = n + 1
            ThisWorkbook.Names.Add Name:="j_" & post, RefersTo:=wsj.Cells(dernl, Liste_col(n))
            'Tous les conrôles du tableau alimentant la classe d'objets personnelle, sauf le dernier
            If n < UBound(Liste_Postes) Then
                    ReDim Preserve Postes(1 To n)
                    Set Postes(n).Cl_Txt = Controls("Txt_" & post)
            End If
    Next post
     
    'Variable libérée
    Set wsj = Nothing
     
    End Sub
     
    Private Sub Btn_Valider_Click()
     
    Me.Hide
    Unload Me
     
    End Sub
    2 - Le module de classe va gérer en direct les Textbox ainsi que les cellules nommées de la feuille de calcul
    En saisissant les valeurs Textbox, on peut voir l'alimentation simultanée des cellules et du Textbox Contrôle.

    Déclaration évènementielle de la variable affectée au contrrôle.

    Sauf erreur, la déclaration sert à obtenir les méthodes et propriétés en automatique (Lorsque l'on saisit un "." après la variable) (Penser à gérer l'option correspondante du VBE, si nécessaire).

    Code à intégrer au module de classe nommé "Class_Txt_Journal" :

    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
    Option Explicit
     
    Const monformat = "### ### ##0.00"
     
    'La classe d'ojets sert à intercepter les évènements
    Public WithEvents Cl_Txt As MSForms.TextBox
     
    Private Sub Cl_Txt_Change()
     
    Dim occurs As String
    Dim leformat As String
     
    With Cl_Txt
     
        'Gestion du format 0.00 au fur et à mesure de la saisie du contrôle
        leformat = Right(monformat, Len(.Value) + 3)
        .Value = Format(.Value, leformat)
        If Len(.Value) > 4 Then
                If InStr(.Value, ".") = 0 Then
                        .SelStart = Len(.Value) - 3
                Else
                        If Mid(.Value, Len(.Value) - 3, 1) = "." Then
                                If Right(.Value, 2) + 0 = 0 Then
                                        .Value = Left(.Value, InStr(.Value, ".") - 1)
                                        .SelStart = .SelStart + 1
                                Else
                                        .SelStart = Len(.Value) - 1
                                End If
                        End If
                End If
        End If
     
        If Right(.Value, 2) + 0 > 0 Then .SelStart = Len(.Value) - 1
        'Pour le fun !
        If Right(.Value, 1) + 0 > 0 Then .SelStart = Len(.Value)
     
        'Extraction du nom pur afin d'alimenter la cellule nommée correspondante
        occurs = Right(.Name, Len(.Name) - 4)
     
    End With
     
    With Worksheets("Journal")
            'La cellule nommée correspondante à la Textbox est alimentée - en direct - par le contenu de celui-ci
            .Range("j_" & occurs).Value = Cl_Txt.Text + 0
            'Le contrôle test Txt_Contrôle est informée par la résultante des cellules de la feulle de calcul
            Usf_Journal.Txt_Contrôle.Text = Format(.Range("j_contrôle"), "# ### ##0.00")
    End With
     
    End Sub
    Merci aux amis Patrick TOULON et mercatog. Pour la gestion de l'affichage, je me suis inspiré de leurs propositions sur une discussion que j'avais lancée Mise en forme Textbox
    La difficulté provient pour ce nouveau cas ici de la saisie du séparateur décimal.

    Bonne soirée à tous

Discussions similaires

  1. [XL-2010] userform / textbox avec date / faire une addition dans une autre textbox
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2014, 18h21
  2. Réponses: 11
    Dernier message: 20/03/2007, 01h13
  3. [DOM] insertion d'une balise dans une autre avec DOM
    Par sebus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/03/2007, 01h16

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