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 :

Calculer 2 sommes affichés sur textbox ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    Assistante Développement
    Inscrit en
    Juin 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistante Développement
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 116
    Par défaut Calculer 2 sommes affichés sur textbox ?

    bonjour,

    je voudrais savoir comment calculer 2 sommes affichés sur 2 textbox en VBA.

    Je suis sur EXCEL2010, j'ai un formulaire avec 1 combobox et 3 textboxs.

    Ma formule:
    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
    Private Sub OK_Click()
    'feuille contenant la valeur à chercher
    With Sheets("tarifs HT")
      'de la ligne 2 à la dernière ligne utilisée de la colonne C
      For i = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
        'recherche de la ligne en colonne A qui correspond à la sélection de la ComboBox
        If .Cells(i, 1) = Me.tarifs Then
          'si oui tarifs = colonne suivante même ligne
          droitentree = .Cells(i, 3)
          'de la colonne A à la dernière colonne de la région courante (on balaie la 1ère ligne à la recherche d'une date)
          For j = 1 To .[a1].CurrentRegion.Columns.Count
            'par défaut, on prend la cotisation colonne 4 ("D")
            cotisationan = .Cells(i, 4)
            'mais si on trouve une date correspondante dans les autres colonnes on écrase la valeur par défaut
            If IsDate(.Cells(1, j)) Then
              'recherche du tarif selon la date
              'on compare la date de début et la date de fin de la période
              If CDate(Me.Datel) >= .Cells(1, j) And CDate(Me.Datel) <= .Cells(2, j) Then
                cotisationan = .Cells(i, j)
                'on ajoute la cotisation avec le droit d'entrée pour le total
     
                Exit For
              End If
            End If
          Next j
          Exit For
        End If
      Next i
    End With
    End Sub
    c'est l'aide que m'a apporté un des membres confirmé du club.

    Je ne sais quoi ajouter avant =sommeprod (cotisationan + droitentree) pour que le total s'affiche dans mon dernier TextBox, qui s'appelle TarifHT.

    Merci de votre aide...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    Peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TarifHT.Value=(cotisationan.value+droitentree.value)

  3. #3
    Membre expérimenté Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Par défaut Faire une somme ... faire un somme ???
    Je ne sais quoi ajouter avant =sommeprod (cotisationan + droitentree) pour que le total s'affiche dans mon dernier TextBox, qui s'appelle TarifHT.
    Où est le "sommeprod" ?
    Le TextBox est-il dans un formulaire ? Doit-il est remplit au moment du Click sur OK ? Y a-t-il un unload du formulaire juste après le Click ?

    Pour calculer une somme, souvent on utilise l'opérateur +

  4. #4
    Membre confirmé
    Femme Profil pro
    Assistante Développement
    Inscrit en
    Juin 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistante Développement
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 116
    Par défaut
    bonjour,
    Le TextBox est-il dans un formulaire ? Doit-il est remplit au moment du Click sur OK ? Y a-t-il un unload du formulaire juste après le Click ?
    oui, c'est un formulaire, la réponse de NEC14 me renvoie un message d'erreur !

    je vous joint le reste du 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub CANCEL_Click()
    Unload Me
    End Sub
    Private Sub OK_Click()
    'feuille contenant la valeur à chercher
    With Sheets("tarifs HT")
      'de la ligne 2 à la dernière ligne utilisée de la colonne C
      For i = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
        'recherche de la ligne en colonne A qui correspond à la sélection de la ComboBox
        If .Cells(i, 1) = Me.tarifs Then
          'si oui tarifs = colonne suivante même ligne
          droitentree = .Cells(i, 3)
          'de la colonne A à la dernière colonne de la région courante (on balaie la 1ère ligne à la recherche d'une date)
          For j = 1 To .[a1].CurrentRegion.Columns.Count
            'par défaut, on prend la cotisation colonne 4 ("D")
            cotisationan = .Cells(i, 4)
            'mais si on trouve une date correspondante dans les autres colonnes on écrase la valeur par défaut
            If IsDate(.Cells(1, j)) Then
              'recherche du tarif selon la date
              'on compare la date de début et la date de fin de la période
              If CDate(Me.Datel) >= .Cells(1, j) And CDate(Me.Datel) <= .Cells(2, j) Then
                cotisationan = .Cells(i, j)
                'on ajoute la cotisation avec le droit d'entrée pour le total
                TarifHT.Value = (cotisationan.Value + droitentree.Value)
                Exit For
              End If
            End If
          Next j
          Exit For
        End If
      Next i
    End With
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim S As Worksheet
    Dim R As Range
    Dim var As Variant
    '--- Monte les données dans la ComboBox ---
    Set S = Sheets("tarifs HT")
    Set R = S.Range("a3:a" & S.[a65536].End(xlUp).Row)
    var = R
    Me.tarifs.List = var
    '-------------
        Datel = Format(Date, "dd/mm/yyyy")
    End Sub
    Il me manque juste cette particularité, la (sommeprod) était une idée, je ne l'avais pas encore enregistrée.

    merci à tous de votre aide.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Quel est le message d'erreur ?

    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TarifHT.value=val(cotisationan) + val(droitentree)

  6. #6
    Membre confirmé
    Femme Profil pro
    Assistante Développement
    Inscrit en
    Juin 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistante Développement
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 116
    Par défaut calculer 2 sommes dans un TextBox
    bonjour,

    le message d'erreur :
    erreur d'exécution 424 objet requis
    idem avec le code que vous venez de me donner.

    Par contre, j'ai peut être oublié de le déclarer "en variant" peut être ?

    Merci de m'éclairer.

  7. #7
    Membre expérimenté Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Par défaut Il faut essayer encore plus simple ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.TarifHT=cotisationan + droitentree

  8. #8
    Membre confirmé
    Femme Profil pro
    Assistante Développement
    Inscrit en
    Juin 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistante Développement
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 116
    Par défaut
    bonjour,

    message d'erreur
    membre de méthode ou de données introuvable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.TarifHT=cotisationan + droitentree
    merci beaucoup cela devient urgent.

  9. #9
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour
    Avec ceci peut etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usfmachin.tarifHt=cotisationan+droitentree
    En mode debogage, est-ce que les valeurs de cotisationan et droitentree sont bonne? Auquel cas l'erreur vient de TarifHT.

  10. #10
    Membre confirmé
    Femme Profil pro
    Assistante Développement
    Inscrit en
    Juin 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistante Développement
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2008
    Messages : 116
    Par défaut
    merci beaucoup, c'est super je peux toujours compter sur vous

    vous êtes vraiment un site génial...

    j'ai abandonné le total, cela devenait trop complexe...

  11. #11
    Membre expérimenté Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Par défaut
    Bonjour,
    je ne vois pas la déclaration des variables i et j. Cela signifie qu'il n'y a pas Option Explicit en entête du projet.
    Du coup, je ne sais pas ce que sont cotisationan et droitentree. Si ce sont des TextBox, il faut les adresser explicitement par Me.contisationan et Me.droitentree. Ça lève toute ambiguïté. Pareil pour Datel. Si c'est un contrôle du formulaire, il faut l'adresser pas Me.Datel.

    La propriété par défaut d'un TextBox est la propriété Value qui est de type String. Pour additionner le contenu de ces chaines, il est préférable de les convertir explicitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.TarifHT = CDec(Me.CotisationAn) + CDec(Me.DroitEntree)
    Du point de vue du code :
    L'affectation de la valeur par défaut (colonne 4) ne sert à rien. D'abord elle arrive trop trad, elle est dans la boucle sur j. A chaque tour de boucle, on remet la même valeur au même endroit. Ensuite, si aucune plage de date n'est reconnue, alors on ne passe jamais dans la fameuse addition et la somme n'est pas affichée.
    Il faut affecter la valeur par défaut de Me.CotisationAn juste avant la boucle sur j et faire l'addition juste après le next j.
    Au lieu de calculer sur Click d'un bouton OK, on peut attacher ce code à l'évènement Change de Me.Tarifs. Le formulaire sera plus "dynamique" : les résultats s'affichent dès que l'on a fait un choix dans la liste.

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Option Explicit
     
    Const FondRouge = &H8080FF
     
    Private Sub CANCEL_Click()
        Unload Me
    End Sub
     
    Private Sub OK_Click()
     
    End Sub
     
     
    Private Sub Datel_Change()
        If IsDate(Me.Datel) Then
            Me.Datel.BackColor = Me.Tarifs.BackColor
            Tarifs_Change
        Else
            Me.Datel.BackColor = FondRouge
        End If
     
    End Sub
     
    Private Sub Tarifs_Change()
        Dim i As Integer, j As Integer
     
        'feuille contenant la valeur à chercher
        With Sheets("tarifs HT")
            'de la ligne 2 à la dernière ligne utilisée de la colonne C
            For i = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
                'recherche de la ligne en colonne A qui correspond à la sélection de la ComboBox
                If .Cells(i, 1) = Me.Tarifs Then
                    'si oui tarifs = colonne suivante même ligne
                    Me.DroitEntree = .Cells(i, 3)
                    'de la colonne A à la dernière colonne de la région courante (on balaie la 1ère ligne à la recherche d'une date)
                    'par défaut, on prend la cotisation colonne 4 ("D")
                    Me.CotisationAn = .Cells(i, 4)
                    If IsDate(Me.Datel) Then
                        For j = 1 To .[a1].CurrentRegion.Columns.Count
                            'mais si on trouve une date correspondante dans les autres colonnes on écrase la valeur par défaut
                            If IsDate(.Cells(1, j)) Then
                                  'recherche du tarif selon la date
                                  'on compare la date de début et la date de fin de la période
                                  If CDate(Me.Datel.Value) >= .Cells(1, j) And CDate(Me.Datel.Value) <= .Cells(2, j) Then
                                        CotisationAn = .Cells(i, j)
                                        'on ajoute la cotisation avec le droit d'entrée pour le total
                                        Exit For
                                  End If
                                End If
                        Next j
                    End If
                    Me.TarifHT = CDec(Me.CotisationAn) + CDec(Me.DroitEntree)
                    Exit For
                End If
            Next i
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim S As Worksheet
        Dim R As Range
        Dim var As Variant
     
        '--- Monte les données dans la ComboBox ---
        Set S = Sheets("tarifs HT")
        Set R = S.Range("A3", S.Cells(S.Cells(S.Rows.Count, 1).End(xlUp).Row, 1))
        'Set R = S.Range("a3:a" & S.[a65536].End(xlUp).Row)
        var = R
        Me.Tarifs.List = var
        '-------------
        Me.Datel = Format(Date, "dd/mm/yyyy")
    End Sub

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

Discussions similaires

  1. [Débutant] calculer la somme de deux textbox C# csharp
    Par aspkiddy dans le forum ASP.NET
    Réponses: 23
    Dernier message: 29/06/2011, 19h00
  2. Réponses: 5
    Dernier message: 10/06/2009, 11h59
  3. faire une somme recursive sur 1 colonne sur 2 dates consecutives et l'afficher
    Par 461219 dans le forum Adaptive Server Enterprise
    Réponses: 12
    Dernier message: 24/11/2008, 16h09
  4. calcul de somme sur un cube
    Par kev0631 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 07/08/2007, 15h10
  5. Colonne de calcul à afficher sur un graph
    Par Hanae dans le forum BIRT
    Réponses: 4
    Dernier message: 16/07/2007, 14h29

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