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 :

Application d'un taux selon condition [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut Application d'un taux selon condition
    Bonsoir au forum,

    Je souhaite appliquer un taux selon le montant d'une TextBox qui peuvent comporter des décimales
    ex. : si la TextBox est inférieure à 39 alors la ComboBox aura pour taux 1.30
    si la TextBox est comprise entre 40 et 79 alors la ComboBox aura pour taux 1.20, etc

    Voici le code mais il fonctionne qu'à moitié, c-à-d, dès que je tape 81.60 le taux devrait correspondre à 1.15 mais affiche 1.2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case TextBox
        Case Is < 39
        ComboBox.Value = "1.30"
        Case Is > 40 and < 79
        ComboBox.Value = "1.20"
        Case Is > 80 and < 140
        ComboBox.Value = "1.15"
        Case Is > 141
        ComboBox.Value = "1.10"
    End Select
    Ou est l'erreur ?

    Stephanie

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 459
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 459
    Points : 16 335
    Points
    16 335
    Par défaut
    Bonjour


    La textbox reçoit du texte donc il faut une conversion pour tester une valeur
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir 78Chris et au forum

    Je n'est pas bien saisie votre réponse, plus explicitement ça donne quoi en vba ?

    Merci

    Stephanie

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonsoir,

    J'obtiens un résultat correct avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
    Select Case TextBox1.Value
        Case Is < 40
            ComboBox1.Value = "1.30"
        Case 40 To 79
            ComboBox1.Value = "1.20"
        Case 80 To 140
            ComboBox1.Value = "1.15"
        Case Is > 140
            ComboBox1.Value = "1.10"
    End Select
    End Sub
    Cordialement.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir gFZT82, 78Chris et au forum,

    Merci gFZT82, cela fonctionne comme je le souhaite. Sans abuse de votre temps, comment faire pour exécuté ceci à toutes les TextBox de mon Userform ?

    exemple :
    TextBox1 Combobox1
    TextBox2 Combobox2
    TextBox3 Combobox3
    TextBox4 Combobox4
    ...
    ...
    TextBox20 Combobox20

    Merci de votre aide

    Stephanie

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Si tes contrôles sont utilisés dans un Userform
    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
    Option Explicit
    Private Sub CommandButton1_Click()
    Dim Valeur As Double
    Dim Num As Integer
    Dim Ctrl As Control
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is MSForms.TextBox Then
                Valeur = Ctrl.Object.Value
                Num = Mid(Ctrl.Name, 8, 9 ^ 9)
                Select Case Valeur
                Case Is < 40
                    Controls("ComboBox" & Num).Value = "1.30"
                Case 40 To 79
                    Controls("ComboBox" & Num).Value = "1.20"
                Case 80 To 140
                    Controls("ComboBox" & Num).Value = "1.15"
                Case Is > 140
                    Controls("ComboBox" & Num).Value = "1.10"
                End Select
            End If
        Next Ctrl
    End Sub
    Cordialement.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir gFZT82, 78Chris et au forum,

    gFZT82, ceci fonctionne mais le problème j'ai d'autres TextBox et Combobox dans l'userform. Je n'ai pas été suffisamment précise lors de mes précédents posts, en fait ça se présente comme ça :

    ComboboxCat ComboboxArt TextBoxInfArt TextBoxPU ComboboxMarge TextBoxVte
    ComboboxCat1 ComboboxArt1 TextBoxInfArt1 TextBoxPU1 ComboboxMarge1 TextBoxVte1
    ComboboxCat2 ComboboxArt2 TextBoxInfArt2 TextBoxPU2 ComboboxMarge2 TextBoxVte2
    ComboboxCat3 ComboboxArt3 TextBoxInfArt3 TextBoxPU3 ComboboxMarge3 TextBoxVte3
    ...
    ...
    ComboboxCat20 ComboboxArt20 TextBoxInfArt20 TextBoxPU20 ComboboxMarge20 TextBoxVte20

    Le code du post4 s'applique pour les
    TextBoxPU ComboboxMarge,
    TextBoxPU1 ComboboxMarge1
    TextBoxPU2 ComboboxMarge2, etc

    En vous remerciant à l'avance,

    Stephanie

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu peux bidouiller le code pour faire en sorte que seuls les TextBox qui se terminent par "PU(x)" soient pris en compte et que le traitement s’applique aux ComboBox qui se terminent par "Marge(x)".
    Ca doit passer ... à moins que tu aies oublié de mentionner un autre détail .
    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
    Private Sub CommandButton1_Click()
    Dim Valeur As Double
    Dim Num As String
    Dim Ctrl As Control
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is MSForms.TextBox Then
                If Mid(Ctrl.Name, 8, 2) = "PU" Then
                    Valeur = Ctrl.Object.Value
                    If Len(Ctrl.Name) > 9 Then
                        Num = Mid(Ctrl.Name, 10, 9 ^ 9)
                    Else
                        Num = ""
                    End If
                    Select Case Valeur
                    Case Is < 40
                        Controls("ComboboxMarge" & Num).Value = "1.30"
                    Case 40 To 79
                        Controls("ComboboxMarge" & Num).Value = "1.20"
                    Case 80 To 140
                        Controls("ComboboxMarge" & Num).Value = "1.15"
                    Case Is > 140
                        Controls("ComboboxMarge" & Num).Value = "1.10"
                    End Select
                End If
            End If
        Next Ctrl
    End Sub
    Cordialement.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir gFZT82, 78Chris et au forum,

    gFZT82, je ne veux pas abuser de votre temps mais je ne vois pas comment faire même en faisant des recherche avec notre ami g....

    Avez-vous une idée sur ce que vous m'avez conseille ?

    En vous remerciant pour le temps passé et de votre compréhension

    stephanie

    PS : je balbutie depuis peu de temps dans le vba

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    As-tu testé le dernier code ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir gFZT82, 78Chris et au forum,

    gFZT82, j'ai apporté quelques modifications à mon fichier. J'ai collé le code dans module2 "Public Sub ChgtTaux" mais je rencontre un autre problème dans le code (message erreur : utilisation incorrecte du mot cle Me)

    le mot "Me" souligné dans ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        For Each Ctrl In Me.Controls
    Il y a pas mal de souci dans mon fichier car mon code est trop compliqué (beaucoup de répétitions) et j'aimerais bien le simplifié hélas j'ai trop peu de connaissances en vba mais j'avance petit à petit grâce à vous tous.

    gFZT82, je peux vous joindre mon fichier en mp

    En vous remerciant

    Stephanie

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tu as mis ta procédure dans un module standard, soit à la place de Me tu mets Userform1 (au cas ou c'est appliqué à ton Userform1) soit tu mets une variable usf comme paramètre de ta procédure et au lieu de Me tu mets usf (l'appel dans userform1 se fera par
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir mercatog, gFZT82, 78Chris et au forum,

    J'ai une autre question :
    Peut-on simplifier ?

    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
    Private Sub CBoxMarge1_Change()
    'Calcul du produit avec la marge (celle-ci est définie suivant le prix dans module2)
    TtBoxPAchMArt1.Value = Val(TtBoxPAchArt1) * Val(CBoxMarge1)
    If ChkBoxPort = True Then TtBoxPVteArt1.Value = Val(TtBoxPAchMArt1) + Val(CBoxPort) Else TtBoxPVteArt1.Value = Val(TtBoxPAchMArt1)
    Totaux
    End Sub
     
    Private Sub CBoxMarge2_Change()
    TtBoxPAchMArt2.Value = Val(TtBoxPAchArt2) * Val(CBoxMarge2)
    If ChkBoxPort = True Then TtBoxPVteArt2.Value = Val(TtBoxPAchMArt2) + Val(CBoxPort) Else TtBoxPVteArt2.Value = Val(TtBoxPAchMArt2)
    Totaux
    End Sub
     
    Private Sub CBoxMarge3_Change()
    TtBoxPAchMArt3.Value = Val(TtBoxPAchArt3) * Val(CBoxMarge3)
    If ChkBoxPort = True Then TtBoxPVteArt3.Value = Val(TtBoxPAchMArt3) + Val(CBoxPort) Else TtBoxPVteArt3.Value = Val(TtBoxPAchMArt3)
    Totaux
    ...
    ...
    Private Sub CBoxMarge20_Change()
    TtBoxPAchMArt20.Value = Val(TtBoxPAchArt20) * Val(CBoxMarge20)
    If ChkBoxPort = True Then TtBoxPVteArt20.Value = Val(TtBoxPAchMArt20) + Val(CBoxPort) Else TtBoxPVteArt20.Value = Val(TtBoxPAchMArt20)
    Totaux
    End Sub
    Pour info dans Module2
    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
    Public Sub ChgtTaux()
    Dim Valeur As Double
    Dim Num As String
    Dim Ctrl As Control
        For Each Ctrl In UserForm1.Controls
            If TypeOf Ctrl Is MSForms.TextBox Then
                If Mid(Ctrl.Name, 8, 2) = "TtBoxPAchArt" Then
                    Valeur = Ctrl.Object.Value
                    If Len(Ctrl.Name) > 9 Then
                        Num = Mid(Ctrl.Name, 10, 9 ^ 9)
                    Else
                        Num = ""
                    End If
                    Select Case Valeur
                    Case Is < 20
                        Controls("CBoxMarge" & Num).Value = "1.40"
                    Case 21 To 49
                        Controls("CBoxMarge" & Num).Value = "1.30"
                    Case 50 To 79
                        Controls("CBoxMarge" & Num).Value = "1.25"
                    Case 80 To 119
                        Controls("CBoxMarge" & Num).Value = "1.20"
                    Case 120 To 149
                        Controls("CBoxMarge" & Num).Value = "1.15"
                    Case Is > 150
                        Controls("CBoxMarge" & Num).Value = "1.10"
                    End Select
                End If
            End If
        Next Ctrl
    End Sub
     
    Public Sub TotPAchArt()
    TotalPAchArt = Val(TtBoxPAchArt1) + Val(TtBoxPAchArt2) + Val(TtBoxPAchArt3) + Val(TtBoxPAchArt4) + Val(TtBoxPAchArt5) + Val(TtBoxPAchArt6) + Val(TtBoxPAchArt7) + Val(TtBoxPAchArt8) + Val(TtBoxPAchArt9) + Val(TtBoxPAchArt10) + Val(TtBoxPAchArt11) + Val(TtBoxPAchArt12) + Val(TtBoxPAchArt13) + Val(TtBoxPAchArt14) + Val(TtBoxPAchArt15) + Val(TtBoxPAchArt16) + Val(TtBoxPAchArt17) + Val(TtBoxPAchArt18) + Val(TtBoxPAchArt19) + Val(TtBoxPAchArt20)
    End Sub
     
    Public Sub TotMarge()
    TtBoxMarge.Value = Val(TotalPVteArt) - Val(TotalPAchArt)
    End Sub
     
    Public Sub TotAchMArt()
    TtBoxMarge.Value = Val(TtBoxPAchMArt1) + Val(TtBoxPAchMArt2) + Val(TtBoxPAchMArt3) + Val(TtBoxPAchMArt4) + Val(TtBoxPAchMArt5) + Val(TtBoxPAchMArt6) + Val(TtBoxPAchMArt7) + Val(TtBoxPAchMArt8) + Val(TtBoxPAchMArt9) + Val(TtBoxPAchMArt10) + Val(TtBoxPAchMArt11) + Val(TtBoxPAchMArt12) + Val(TtBoxPAchMArt13) + Val(TtBoxPAchMArt14) + Val(TtBoxPAchMArt15) + Val(TtBoxPAchMArt16) + Val(TtBoxPAchMArt17) + Val(TtBoxPAchMArt18) + Val(TtBoxPAchMArt19) + Val(TtBoxPAchMArtTtBoxPAchMArt20)
    End Sub
     
    Public Sub TotPVte()
    TotalPVteArt.Value = Val(TtBoxPVteArt1) + Val(TtBoxPVteArt2) + Val(TtBoxPVteArt3) + Val(TtBoxPVteArt4) + Val(TtBoxPVteArt5) + Val(TtBoxPVteArt6) + Val(TtBoxPVteArt7) + Val(TtBoxPVteArt8) + Val(TtBoxPVteArt9) + Val(TtBoxPVteArt10) + Val(TtBoxPVteArt11) + Val(TtBoxPVteArt12) + Val(TtBoxPVteArt13) + Val(TtBoxPVteArt14) + Val(TtBoxPVteArt15) + Val(TtBoxPVteArt16) + Val(TtBoxPVteArt17) + Val(TtBoxPVteArt18) + Val(TtBoxPVteArt19) + Val(TtBoxPVteArt20)
    End Sub
     
    Public Sub Totaux()
    TotPAchArt
    TotMarge
    TotAchMArt
    TotPVte
    End Sub
    Merci d'avance

    Stephanie

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Peut-on simplifier?
    Un module de classe s'impose
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour mercatog, gFZT82, 78Chris et au forum,

    J'ai cherche avec notre ami g... mais j'avoue que ce n'est pas évident !

    Voici ce que j'ai fais dans Userform1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim CBoxMarge(1 To 20) As New ClasseMarg
    Dim CBoxPort(1 To 20) As New ClassePort
    Dim TtBoxPAchArt(1 To 20) As New ClassePA
    dans module de classe "ClasseMarg"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public WithEvents GrMarge As MSForms.ComboBox
    Private Sub CBoxMarge_change()
    TtBoxPAchMArt.Value = Val(TtBoxPAchArt) * Val(CBoxMarge)
    If ChkBoxPort = True Then TtBoxPVteArt.Value = Val(TtBoxPAchMArt) + Val(CBoxPort) Else TtBoxPVteArt.Value = Val(TtBoxPAchMArt)
    Totaux'Module2 cité dans précédent post
    End Sub
    , pour "ClassePort"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents GrPort As MSForms.ComboBox
    Private Sub GrPort_change()
    TtBoxPVteArt.Value = Val(TtBoxPAchMArt) + Val(CBoxPort)
    End Sub
    , pour "ClassePA"
    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
    Public WithEvents GrPA As MSForms.TextBox
    Private Sub GrPA_change()
    'Affiche la ligne suivante (si on peur appeler ceci une ligne)
    If TtBoxPAchArt <> "" Then
        ComboBox.Visible = True
        CBoxArt.Visible = True
        TtBoxInfoArt.Visible = True
        TtBoxPAchArt.Visible = True
        CBoxMarge2Visible = True
        TtBoxPAchMArt.Visible = True
            If ChkBoxPort = False Then CBoxPort.Visible = True
        TtBoxPVteArt.Visible = True
    End If
    'Applique le % de marge par rapport au P. d'Achat (module2)
    ChgtTaux
     
    'Calcul le P. de Vte (P. Margé + Frais de port)
    If ChkBoxPort = True Then TtBoxPVteArt.Value = Val(TtBoxPAchMArt) + Val(CBoxPort) Else TtBoxPVteArt.Value = Val(TtBoxPAchMArt)
    Totaux
    End Sub
    Ça ne fonctionne pas, "Dim CBoxPort(1 To 20) As New ClassePort est souligné !
    Erreur de compilation: le membre existe déjà dans un module objet dont le présent module est dérivé

    Pourquoi et est-ce quelqu'un peux m'expliquer le fonctionnement ?

    Merci d'avance

    Stephanie

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour te guider

    1. Module de classe ClasseMarg (remarque, tu peux utiliser un seul module de classe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Public WithEvents GrMarge As MSForms.ComboBox
     
    Private Sub GrMarge_Change()
    Dim Ind As Byte
     
    Ind = Val(Replace(GrMarge.Name, "CBoxMarge", ""))  'l'indice de la combo
    If Ind > 0 Then
        UserForm1.Controls("TtBoxPAchMArt" & Ind).Value = Val(UserForm1.Controls("TtBoxPAchArt" & Ind).Value) * Val(GrMarge.Value)
        UserForm1.Controls("TtBoxPVteArt" & Ind).Value = Val(UserForm1.Controls("TtBoxPAchMArt" & Ind).Value) + IIf(UserForm1.ChkBoxPort, Val(UserForm1.CBoxPort.Value), 0)
        Totaux
    End If
    End Sub
    2. Dans le module de ton userform
    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
    Option Explicit
     
    Dim CM() As New ClasseMarg
     
    Private Sub UserForm_Initialize()
    Dim Cntrl As Control
    Dim i As Byte
     
    For Each Cntrl In Me.Controls
        If TypeOf Cntrl Is MSForms.ComboBox Then
            If Left(Cntrl.Name, 9) = "CBoxMarge" Then
                i = i + 1
                ReDim Preserve CM(1 To i)
                Set CM(i).GrMarge = Cntrl
            End If
        End If
    Next Cntrl
    End Sub
    PS: tu n'as qu'une seule CBoxPort. Pas besoin de créer une classe pour elle
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour mercatog, gFZT82, 78Chris et au forum,

    Aperçu de l'UserForm (format genre tableau avec lignes et colonnes)voir pièce jointe

    ComboboxCat1 CBoxArt1 TtBoxInfoArt1 TtBoxPAchArt1 CBoxMarge1 TtBoxPAchMArt1 CBoxPort1 TtBoxPVteArt1
    ComboboxCat2 CBoxArt2 TtBoxInfoArt2 TtBoxPAchArt2 CBoxMarge2 TtBoxPAchMArt2 CBoxPort2 TtBoxPVteArt2(condition : invisible jusqu'à remplissage de TtBoxPAchArt1)
    ComboboxCat3 CBoxArt3 TtBoxInfoArt3 TtBoxPAchArt3 CBoxMarge3 TtBoxPAchMArt3 CBoxPort3 TtBoxPVteArt3 (condition : invisible jusqu'à remplissage de TtBoxPAchArt2)
    ...
    ...
    ComboboxCat20 CBoxArt20 TtBoxInfoArt20 TtBoxPAchAr20 CBoxMarge20 TtBoxPAchMArt20 CBoxPort20 TtBoxPVteArt20 (condition : invisible jusqu'à remplissage de TextBoxPU19)

    ChkBoxPort CBoxP TextBoxTotauxPU TextBoxTotauxVte

    mercatog, bonne remarque concernant CBoxPort que j'ai renommé depuis votre dernière intervention en "CBoxP", car c'est un control indépendant géré avec la CheckBox "ChkBoxPort". C'est cela qui provoqué l'erreur "membre existe déjà dans un module objet dont le présent module est dérivé"

    Le calcul s'effectue de la manière suivante
    - si ChkBoxPort = True alors CBoxPort1, CBoxPort2, ...CBoxPort20 sont invisibles et donc le port unique "CBoxP" est ajouté pour chaque ligne

    La ligne2 (ComboboxCat2 CBoxArt2 TtBoxInfoArt2 TtBoxPAchArt2 CBoxMarge2 TtBoxPAchMArt2 CBoxPort2 TtBoxPVteArt2) doit s'affiché quand TtBoxPAchArt1 est remplie, puis la 3, etc.

    J'espère que mes explications sont claires car je cafouille un peu avec mon code et le votre, mais avec votre aide et de la persévernce ça va le faire !

    en vous remerciant à l'avance de votre grande utilité et support,

    Stephanie
    Images attachées Images attachées  

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    L'approche est la suivante:
    Au lieu d'écrire 20 fois le même code Change sur les 20 ComboBox est d'utiliser un module de classe et d'y écrire une seule fois le code utilisé par les ComboBox.
    Au chargement de l'userform, Il suffit d'instancier les 20 combobox.

    Maintenant tu es devant une usine à gaz je présume par mauvais choix ou par mauvaise conception.

    Pour intégrer le tout dans un code organisé, logique et facilement maintenable, il y a du travail à faire.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour mercatog, gFZT82, 78Chris et au forum,

    Si je comprends bien, je suis obligé de repartir de zero. Ou est-ce que je peux trouver l'aide pour ce genre de code ?

    je n'ai rien trouve là : http://excel.developpez.com/cours/?page=prog#userform

    que dois-je chercher (terme ou mot à taper dans moteur de recherche) pour trouve ce que je veux

    Merci

    Stephanie

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pourquoi 20 rangées identiques? Qu'on se préoccupe de cacher et de rendre visible...etc
    En plus avec 20 rangées, on est limités par la saisie, et si par hasard on veux saisir 36 données??

    Une seule rangée suffit (éventuellement accompagnée d'une listbox multicolonnes ou bien une listeview pour l'affichage des données saisies et validées)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [RAVE] champs selon conditions
    Par missmarion dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2006, 16h20
  2. [HTML][CSS] Redimensionner une image selon condition
    Par Eilkh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/02/2006, 15h55
  3. [VB.net] Générer une date selon condition
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 16h12
  4. [VB.NET] Changer de classe selon condition
    Par daner06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2004, 10h04
  5. DLLs chargées selon condition
    Par Benjamin GAGNEUX dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 12/08/2004, 18h14

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