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

Conception Discussion :

projet macro 2 : épreuve automatisée sous userform


Sujet :

Conception

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut projet macro 2 : épreuve automatisée sous userform
    Hello le forum !

    Me revoilà pour un deuxième projet.

    Une première ébauche de l'USF :

    Nom : RL1.jpg
Affichages : 246
Taille : 100,1 Ko

    Un premier objectif est de comptabiliser le nombre de checkbox cochés par colonne et de transmettre les valeurs dans les labels correspondants.
    Je rencontre une première difficulté...
    J'y parviens avec le CommandButton1 mais je ne trouve pas de solution pour automatiser la saisie en live sans avoir recours au Button.

    Voici où j'en suis :

    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
    Private Sub CommandButton1_Click()
    Dim box1 As Integer: Dim box2 As Integer: Dim box3 As Integer: Dim box4 As Integer
    Dim box5 As Integer: Dim box6 As Integer: Dim box7 As Integer: Dim box8 As Integer
    Dim box9 As Integer: Dim box10 As Integer: Dim box11 As Integer: Dim box12 As Integer
    Dim box13 As Integer: Dim box14 As Integer: Dim box15 As Integer: Dim box16 As Integer
    Dim Total1 As Integer 
     
    If CheckBox1.Value = True Then
        box1 = 1
    Else
        box1 = 0
    End If
     
    If CheckBox2.Value = True Then
        box2 = 1
    Else
        box2 = 0
    End If
     
    If CheckBox3.Value = True Then
        box3 = 1
    Else
        box3 = 0
    End If
     
    If CheckBox4.Value = True Then
        box4 = 1
    Else
        box4 = 0
    End If
    '........................
    Total1 = box1 + box2 + box3 + box4
    Me.Label1 = Total1
     
     
    End Sub
    J'ai cherché sur le fofo et ailleurs et n'ai rien trouvé hormis des codes hyper complexes que je n'arrive pas à déchiffrer
    Si quelqu'un a une petite piste ..
    Merci d'avance
    A +

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Bonjour,

    A tester :

    Dans un module standard :

    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
     
    Option Explicit
     
    Sub LancerLeUserform()
     
        With UserForm1
             .Show
         End With
     
    End Sub
     
     
    Sub DecompterLesCheckboxParColonne()
     
    Dim MonControl As Control
    Dim MaColonne1 As Variant, MaColonne2 As Variant, Macolonne3 As Variant
    Dim I As Integer
     
     
        MaColonne1 = Array("CheckBox11", "CheckBox12")
        MaColonne2 = Array("CheckBox21", "CheckBox22")
        Macolonne3 = Array("CheckBox31", "CheckBox32")
     
     
     
        With UserForm1
     
     
             .Label1 = ""
             .Label2 = ""
             .Label3 = ""
     
             For Each MonControl In .Controls
                For I = LBound(MaColonne1, 1) To UBound(MaColonne1, 1)
                    If MonControl.Name = MaColonne1(I) Then
                       If MonControl = True Then .Label1 = Val(.Label1) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne2, 1) To UBound(MaColonne2, 1)
                    If MonControl.Name = MaColonne2(I) Then
                       If MonControl = True Then .Label2 = Val(.Label2) + 1
                    End If
                Next I
     
                For I = LBound(Macolonne3, 1) To UBound(Macolonne3, 1)
                    If MonControl.Name = Macolonne3(I) Then
                       If MonControl = True Then .Label3 = Val(.Label3) + 1
                    End If
                Next I
     
             Next MonControl
     
        End With
     
    End Sub
    Dans le 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
    23
    24
    25
    26
     
    Option Explicit
     
    Private Sub CheckBox11_Click()
            DecompterLesCheckboxParColonne
    End Sub
     
    Private Sub CheckBox12_Click()
            DecompterLesCheckboxParColonne
    End Sub
     
    Private Sub CheckBox21_Click()
            DecompterLesCheckboxParColonne
    End Sub
     
    Private Sub CheckBox22_Click()
            DecompterLesCheckboxParColonne
    End Sub
     
    Private Sub CheckBox31_Click()
            DecompterLesCheckboxParColonne
    End Sub
     
    Private Sub CheckBox32_Click()
            DecompterLesCheckboxParColonne
    End Sub
    Pièce jointe 389571

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Bonjour Eric, Bonjour à toutes et à tous,

    Un grand merci Eric, ça fonctionne impec !



    Dans le module :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Option Explicit
     
    Sub LancerLeUserform()
     
        With UserForm1
             .Show
         End With
     
    End Sub
     
     
    Sub DecompterLesCheckboxParColonne()
     
    Dim MonControl As Control
    Dim MaColonne1 As Variant, MaColonne2 As Variant, Macolonne3 As Variant, Macolonne4 As Variant, MaColonne5 As Variant 
    Dim MaColonne6 As Variant, Macolonne7 As Variant, Macolonne8 As Variant, MaColonne9 As Variant
    Dim I As Integer
     
     
        MaColonne1 = Array("CheckBox11", "CheckBox12", "CheckBox13", "CheckBox14", _
                            "CheckBox15", "CheckBox16", "CheckBox17", "CheckBox18", _
                            "CheckBox19", "CheckBox110", "CheckBox111", "CheckBox112", _
                            "CheckBox113", "CheckBox114", "CheckBox115", "CheckBox116")
     
        MaColonne2 = Array("CheckBox21", "CheckBox22", "CheckBox23", "CheckBox24", _
                            "CheckBox25", "CheckBox26", "CheckBox27", "CheckBox28", _
                            "CheckBox29", "CheckBox210", "CheckBox211", "CheckBox212", _
                            "CheckBox213", "CheckBox214", "CheckBox215", "CheckBox216")
     
        Macolonne3 = Array("CheckBox31", "CheckBox32", "CheckBox33", "CheckBox34", _
                            "CheckBox35", "CheckBox36", "CheckBox37", "CheckBox38", _
                            "CheckBox39", "CheckBox310", "CheckBox311", "CheckBox312", _
                            "CheckBox313", "CheckBox314", "CheckBox315", "CheckBox316")
     
        Macolonne4 = Array("CheckBox41", "CheckBox42", "CheckBox43", "CheckBox44", _
                            "CheckBox45", "CheckBox46", "CheckBox47", "CheckBox48", _
                            "CheckBox49", "CheckBox410", "CheckBox411", "CheckBox412", _
                            "CheckBox413", "CheckBox414", "CheckBox415", "CheckBox416")
     
        MaColonne5 = Array("CheckBox51", "CheckBox52", "CheckBox53", "CheckBox54", _
                            "CheckBox55", "CheckBox56", "CheckBox57", "CheckBox58", _
                            "CheckBox59", "CheckBox510", "CheckBox511", "CheckBox512", _
                            "CheckBox513", "CheckBox514", "CheckBox515", "CheckBox516")
     
        MaColonne6 = Array("CheckBox61", "CheckBox62", "CheckBox63", "CheckBox64", _
                            "CheckBox65", "CheckBox66", "CheckBox67", "CheckBox68", _
                            "CheckBox69", "CheckBox610", "CheckBox611", "CheckBox612", _
                            "CheckBox613", "CheckBox614", "CheckBox615", "CheckBox616")
     
        Macolonne7 = Array("CheckBox71", "CheckBox72", "CheckBox73", "CheckBox74", _
                            "CheckBox75", "CheckBox76", "CheckBox77", "CheckBox78", _
                            "CheckBox79", "CheckBox710", "CheckBox711", "CheckBox712", _
                            "CheckBox713", "CheckBox714", "CheckBox715", "CheckBox716")
     
        Macolonne8 = Array("CheckBox81", "CheckBox82", "CheckBox83", "CheckBox84", _
                            "CheckBox85", "CheckBox86", "CheckBox87", "CheckBox88", _
                            "CheckBox89", "CheckBox810", "CheckBox811", "CheckBox812", _
                            "CheckBox813", "CheckBox814", "CheckBox815", "CheckBox816")
     
        MaColonne9 = Array("CheckBox91", "CheckBox92", "CheckBox93", "CheckBox94", _
                            "CheckBox95", "CheckBox96", "CheckBox97", "CheckBox98", _
                            "CheckBox99", "CheckBox910", "CheckBox911", "CheckBox912", _
                            "CheckBox913", "CheckBox914", "CheckBox915", "CheckBox916")
     
        With UserForm1
     
     
             .Label33 = ""
             .Label34 = ""
             .Label35 = ""
             .Label36 = ""
             .Label37 = ""
             .Label38 = ""
             .Label39 = ""
             .Label40 = ""
             .Label41 = ""
     
     
             For Each MonControl In .Controls
     
                For I = LBound(MaColonne1, 1) To UBound(MaColonne1, 1)
                    If MonControl.Name = MaColonne1(I) Then
                       If MonControl = True Then .Label33 = Val(.Label33) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne2, 1) To UBound(MaColonne2, 1)
                    If MonControl.Name = MaColonne2(I) Then
                       If MonControl = True Then .Label34 = Val(.Label34) + 1
                    End If
                Next I
     
                For I = LBound(Macolonne3, 1) To UBound(Macolonne3, 1)
                    If MonControl.Name = Macolonne3(I) Then
                       If MonControl = True Then .Label35 = Val(.Label35) + 1
                    End If
                Next I
     
                For I = LBound(Macolonne4, 1) To UBound(Macolonne4, 1)
                    If MonControl.Name = Macolonne4(I) Then
                       If MonControl = True Then .Label36 = Val(.Label36) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne5, 1) To UBound(MaColonne5, 1)
                    If MonControl.Name = MaColonne5(I) Then
                       If MonControl = True Then .Label37 = Val(.Label37) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne6, 1) To UBound(MaColonne6, 1)
                    If MonControl.Name = MaColonne6(I) Then
                       If MonControl = True Then .Label38 = Val(.Label38) + 1
                    End If
                Next I
     
                For I = LBound(Macolonne7, 1) To UBound(Macolonne7, 1)
                    If MonControl.Name = Macolonne7(I) Then
                       If MonControl = True Then .Label39 = Val(.Label39) + 1
                    End If
                Next I
     
                For I = LBound(Macolonne8, 1) To UBound(Macolonne8, 1)
                    If MonControl.Name = Macolonne8(I) Then
                       If MonControl = True Then .Label40 = Val(.Label40) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne9, 1) To UBound(MaColonne9, 1)
                    If MonControl.Name = MaColonne9(I) Then
                       If MonControl = True Then .Label41 = Val(.Label41) + 1
                    End If
                Next I
     
     
             Next MonControl
     
        End With
     
    End Sub

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut petit souci de nombre décimal
    Hello le forum,

    En reprenant la procédure proposée par Eric, tout est ok pour additionner des nombres entiers
    Je voudrais désormais pouvoir additionner des décimaux (dans l'exemple ci-dessous : 0,25) mais ça bogue, du moins le label reste bloqué à 0,25 quelque soit le nombre de bouton coché.
    Dois-je déclarer quelque part une variable Single ou Double ?
    Merci d'avance

    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
    Public Sub bem()
     
    Dim MonControl As Control
    Dim colonne1 As Variant, colonne2 As Variant
    Dim I As Integer
     
     
     
        colonne1 = Array("OptBtnRI11", "OptBtnRI12", "OptBtnRI13", "OptBtnRI14", "OptBtnRI15", "OptBtnRI16" _
                        , "OptBtnRI17", "OptBtnRI18", "OptBtnRI19", "OptBtnRI110", "OptBtnRI111", "OptBtnRI112")
     
        colonne2 = Array("OptBtnRI21", "OptBtnRI22", "OptBtnRI23", "OptBtnRI24", "OptBtnRI25", "OptBtnR26" _
                        , "OptBtnRI27", "OptBtnRI28", "OptBtnRI29", "OptBtnRI210", "OptBtnRI211", "OptBtnRI212")
     
     
        With UserForm1
     
             .Somme = "0"
     
     
             For Each MonControl In .Controls
     
              For I = LBound(colonne1, 1) To UBound(colonne1, 1)
                   If MonControl.Name = colonne1(I) Then
                      If MonControl = True Then .Somme = Val(.Somme) + 1 'là OK
                    End If
              Next I
     
              For I = LBound(colonne2, 1) To UBound(colonne2, 1)
                   If MonControl.Name = colonne2(I) Then
                      If MonControl = True Then .Somme = Val(.Somme) + 1 / 4 'là ça bloque à 0,25
                    End If
              Next I
     
     
             Next MonControl
     
     
     
        End With
     
     
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Bonsoir,

    A adapter :

    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
     
    Sub DecompterLesCheckboxParColonne()
     
    Dim MonControl As Control
    Dim MaColonne1 As Variant, MaColonne2 As Variant, Macolonne3 As Variant
    Dim I As Integer
    Dim ValeurColonne2 As Single
     
        MaColonne1 = Array("CheckBox11", "CheckBox12")
        MaColonne2 = Array("CheckBox21", "CheckBox22")
        Macolonne3 = Array("CheckBox31", "CheckBox32")
     
        ValeurColonne2 = 0#
     
     
        With UserForm1
     
     
             .Label1 = ""
             .Label2 = ""
             .Label3 = ""
     
             For Each MonControl In .Controls
                For I = LBound(MaColonne1, 1) To UBound(MaColonne1, 1)
                    If MonControl.Name = MaColonne1(I) Then
                       If MonControl = True Then .Label1 = Val(.Label1) + 1
                    End If
                Next I
     
                For I = LBound(MaColonne2, 1) To UBound(MaColonne2, 1)
                    If MonControl.Name = MaColonne2(I) Then
                       If MonControl = True Then ValeurColonne2 = ValeurColonne2 + 0.25
                    End If
                Next I
     
                For I = LBound(Macolonne3, 1) To UBound(Macolonne3, 1)
                    If MonControl.Name = Macolonne3(I) Then
                       If MonControl = True Then .Label3 = Val(.Label3) + 1
                    End If
                Next I
     
             Next MonControl
     
             .Label2 = ValeurColonne2
     
        End With
     
    End Sub

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Bonjour Eric, Bonjour le forum,

    Merci de ton aide Eric ça fonctionne impeccable pour la colonne 0,25.

    Mais ça se complique un peu :

    Nom : CalculOptionButton.jpg
Affichages : 183
Taille : 49,7 Ko

    En fait, je dois arriver au total de tous les boutons cochés (dans la figure ci-dessus il y a 2 essais indépendants => R. immédiat et R. différé donc 2 totaux différents).
    Chaque item ligne (triangle, Base, Egal etc...) va recevoir une valeur propre qui sera 0 ou 0.25 ou 0.5 ou 1.

    Faut-il passer par Select Case True ???

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Une solution assez simple consisterait à mettre la valeur de chaque contrôle dans sa propriété Tag et faire le décompte sur chacune des séries.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Salut à tous,
    Merci du tuyau Eric, je vais regarder à cela.
    A +

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Bonjour,

    Tu ne mémorises pas tes résultats ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Salut Eric,

    Si, ils seront injectés dans un classeur.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Si, ils seront injectés dans un classeur.
    Je voulais dire par là : toutes les réponses et pas seulement la note globale.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    pardon..

    non je n'enregistre que les totaux

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Bon finalement je n'ai pas utilisé la propriété Tag mais ta procédure initiale.
    C'est tout bon !

    Dis-moi Eric, à quoi servent les lignes Total = 0# ??

    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
    Public Sub bem()
     
    Dim MonControl As Control
    Dim RI1 As Variant, RI2 As Variant, RI3 As Variant, RI4 As Variant
    Dim I As Integer
    Dim TotalRI1 As Single, TotalRI2 As Single, TotalRI3 As Single, TotalRI4 As Single
     
     
        RI1 = Array("OptBtnRI11", "OptBtnRI12", "OptBtnRI13", "OptBtnRI14", _
                    "OptBtnRI15", "OptBtnRI16", "OptBtnRI17", "OptBtnRI18", _
                    "OptBtnRI19", "OptBtnRI110", "OptBtnRI111", "OptBtnRI112")
     
        RI2 = Array("OptBtnRI21", "OptBtnRI22", "OptBtnRI23", "OptBtnRI24", _
                    "OptBtnRI25", "OptBtnRI26", "OptBtnRI27", "OptBtnRI28", _
                    "OptBtnRI29", "OptBtnRI210", "OptBtnRI211", "OptBtnRI212")
     
        RI3 = Array("OptBtnRI31", "OptBtnRI32", "OptBtnRI33", "OptBtnRI34", _
                    "OptBtnRI35", "OptBtnRI36", "OptBtnRI37", "OptBtnRI38", _
                    "OptBtnRI39", "OptBtnRI310", "OptBtnRI311", "OptBtnRI312")
     
        RI4 = Array("OptBtnRI41", "OptBtnRI42", "OptBtnRI43", "OptBtnRI44", _
                    "OptBtnRI45", "OptBtnRI46", "OptBtnRI47", "OptBtnRI48", _
                    "OptBtnRI49", "OptBtnRI410", "OptBtnRI411", "OptBtnRI412")
     
        TotalRI1 = 0#
        TotalRI2 = 0#
        TotalRI3 = 0#
        TotalRI4 = 0#
     
        With UserForm1
     
            .RIBEM = "0"
     
     
            For Each MonControl In .Controls
     
                For I = LBound(RI1, 1) To UBound(RI1, 1)
                    If MonControl.Name = RI1(I) Then
                       If MonControl = True Then TotalRI1 = TotalRI1 + 0
                    End If
                Next I
     
                For I = LBound(RI2, 1) To UBound(RI2, 1)
                    If MonControl.Name = RI2(I) Then
                       If MonControl = True Then TotalRI2 = TotalRI2 + 0.25
                    End If
                Next I
     
                For I = LBound(RI3, 1) To UBound(RI3, 1)
                    If MonControl.Name = RI3(I) Then
                       If MonControl = True Then TotalRI3 = TotalRI3 + 0.5
                    End If
                Next I
     
                For I = LBound(RI4, 1) To UBound(RI4, 1)
                    If MonControl.Name = RI4(I) Then
                       If MonControl = True Then TotalRI4 = TotalRI4 + 1
                    End If
                Next I
     
            Next MonControl
     
            .RIBEM = TotalRI1 + TotalRI2 + TotalRI3 + TotalRI4
     
        End With
     
    End Sub

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Simple habitude pour fixer les valeurs de départs. Ici tu n'es pas obligé, tes variables étant locales, mais au moins tu ne poses pas la question.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut problème injection de données si aucune checkbox n'est cochée
    Salut à toutes et à tous,

    @ Eric : merci pour ces précisions

    Je rencontre un petit problème.
    Dans l'USF ci-dessous, j'ai deux scores maximum de 15.
    Chaque Checkbox cochée diminue le total de 1.
    Le souci concerne l'injection des données dans mon classeur quand aucune case n'est cochée.
    Dans l'exemple ci-dessous aucun problème pour l'injection du 12 en "A1" par contre le 15 ne s'injecte pas en "A2" sauf si je coche et décoche.
    Un problème d'initialisation de l'USF à son ouverture je suppose...
    Après je peux faire simple et rentrer la valeur 15 par défaut dans mes classeurs mais bon.... si quelqu'un a une idée, je suis preneur !

    Merci à vous, à +

    Nom : si_non_coché.jpg
Affichages : 199
Taille : 39,3 Ko



    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Option Explicit
     
    '*************************
    'lecture mots réguliers
    '*************************
    Public Sub lecture_MR()
     
    Dim MonControl As Control
    Dim LMR As Variant
    Dim i As Integer
    Dim TotalLMR As Integer
    Dim wbk As Workbook
     
        LMR = Array("CheckBoxLMR1", "CheckBoxLMR2", "CheckBoxLMR3", _
                    "CheckBoxLMR4", "CheckBoxLMR5", "CheckBoxLMR6", _
                    "CheckBoxLMR7", "CheckBoxLMR8", "CheckBoxLMR9", _
                    "CheckBoxLMR10", "CheckBoxLMR11", "CheckBoxLMR12", _
                    "CheckBoxLMR13", "CheckBoxLMR14", "CheckBoxLMR15")
     
     
     
        With UserForm1
     
            TotalLMR = 15
     
            For Each MonControl In .Controls
     
                For i = LBound(LMR, 1) To UBound(LMR, 1)
                    If MonControl.Name = LMR(i) Then
                       If MonControl = True Then TotalLMR = TotalLMR - 1
                    End If
                Next i
     
            Next MonControl
     
            .Total_LMR = TotalLMR
     
            For Each wbk In Application.Workbooks
                wbk.Worksheets("Bilan").Range("A1").Value = Val(.Total_LMR)
            Next
     
        End With
     
    End Sub
     
    '*************************
    'lecture mots irréguliers
    '*************************
    Public Sub lecture_MI()
     
    Dim MonControl As Control
    Dim LMI As Variant
    Dim i As Integer
    Dim TotalLMI As Integer
    Dim wbk As Workbook
     
            LMI = Array("CheckBoxLMI1", "CheckBoxLMI2", "CheckBoxLMI3", _
                        "CheckBoxLMI4", "CheckBoxLMI5", "CheckBoxLMI6", _
                        "CheckBoxLMI7", "CheckBoxLMI8", "CheckBoxLMI9", _
                        "CheckBoxLMI10", "CheckBoxLMI11", "CheckBoxLMI12", _
                        "CheckBoxLMI13", "CheckBoxLMI14", "CheckBoxLMI15")
     
     
        With UserForm1
     
            TotalLMI = 15
     
            For Each MonControl In .Controls
     
                For i = LBound(LMI, 1) To UBound(LMI, 1)
                    If MonControl.Name = LMI(i) Then
                       If MonControl = True Then TotalLMI = TotalLMI - 1
                    End If
                Next i
     
            Next MonControl
     
            .Total_LMI = TotalLMI
     
            For Each wbk In Application.Workbooks
                wbk.Worksheets("Bilan").Range("A2").Value = Val(.Total_LMI)
            Next
     
        End With
     
    End Sub

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Après je peux faire simple et rentrer la valeur 15 par défaut dans mes classeurs mais bon.... si quelqu'un a une idée, je suis preneur !
    Bonjour,

    Oui c'est comme cela que je ferais. Je mettrais la valeur à 15 à l'ouverture de la boite de dialogue. C'est transparent pour l'utilisateur.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut sauvegarde automatique des données
    Ok Eric, merci de ta réponse.

    Autre petite question, étant donné que mes formulaires vont être en grande majorité constitués de checkbox et OptionButton avec injection simultanée des scores dans des classeurs, y-a t-il une procédure qui permet de sauvegarder les données dans les classeurs régulièrement (à chaque clic dans un checkbox par exemple) sans avoir à y retourner.
    Je pense à cela si la machine bogue... et au cas où il n'y aurait pas eu de sauvegardes régulières... toutes les données sont perdues

    Merci le fofo
    à +

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Je ne pige pas ta question.
    Quand tu valides, tu sauvegardes bien tes données, non ?
    Sinon, que veux-tu sauvegarder ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Bonsoir Eric,

    J'essaie de m'expliquer un peu mieux.
    Le Userform sera en plein écran pour les utilisateurs.
    Le but pour nous est de ne plus intervenir (ou très peu) sur le fichier excel pendant l'évaluation, sachant qu'elle peut durer jusqu'à une heure. Période pendant laquelle nous saisirons les résultats uniquement sur le formulaire.

    Et en une heure... il peut arriver des trucs zarbi comme une coupure de courant ou je ne sais quoi, et la perte des données, certes saisies dans le formulaire mais non enregistrées dans le fichier excel de façon permanente.
    D'où l'importance d'enregistrer le plus souvent possible les données injectées dans le fichier excel.

    Bon je débute, c'est peut-être la raison pour laquelle nous ne sommes pas sur la même longueur d'ondes, mais j'espère que tu saisis un peu mieux ma requête.

    A + et merci d'avance de nous faire avancer c'est vraiment sympa

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Mon post 7 allait dans le sens de ta demande d'aujourd'hui. Pour sauvegarder et formater les données saisies dans un Userform, je charge les caractéristiques du contrôle dans sa propriété Tag. Celles-ci sont stockées dans une table d'association comme dans le vidage d'écran ci-dessous :

    Pièce jointe 393999

    Au lancement du Userform, je charge la propriété tag avec les différentes caractéristiques souhaitées séparées par le caractère "-" pour pouvoir spliter la chaîne ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
                        TagControle = CelluleChamps.Offset(0, ColRepereColonne - ColChampsControles) & "-" _
                                    & CelluleChamps.Offset(0, ColFormat - ColChampsControles) & "-" _
                                    & CelluleChamps.Offset(0, ColPosition - ColChampsControles) & "-" _
                                    & CelluleChamps.Offset(0, ColObligatoire - ColChampsControles) & "-" _
                                    & CelluleChamps.Offset(0, ColValeur - ColChampsControles)
     
     
                        .Controls(CtrK - 1).Tag = TagControle
    A la validation, le code restitue la valeur des contrôles dans l'onglet résultat en splitant la propriété tag. La position du contrôle dans l'onglet correspond à la position 0 dans la matrice créée à partir du tag. Ce qui me permet de sauvegarder toutes les valeurs des contrôles, comme ci-dessous :

    Pièce jointe 394002


    Ce principe peut servir à sauvegarder les données dès qu'un événement intervient sur le userform. De la même manière, le userform pourrait reprendre la dernière situation saisie en cas de problème.

Discussions similaires

  1. Réponses: 18
    Dernier message: 08/06/2018, 14h38
  2. [XL-2010] Réalisation d'userform, sauvegarde et automatisation sous VBA
    Par Thomas.33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/01/2012, 19h37
  3. sauvegarde automatisée sous windows 2000 server
    Par k_slater dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 23/10/2006, 16h06
  4. Réponses: 1
    Dernier message: 06/01/2006, 21h03
  5. Une macro synthese en VBA sous excel!
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/12/2005, 20h37

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