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 :

Problèmes de checkbox à plusieurs destinées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut Problèmes de checkbox à plusieurs destinées
    bonjour à tous,

    voilà je dispose d'un userform dans lequel j'ai mis des checkbox ( 20 prècisement),
    ces checkbox doivent aller
    - d'une part dans un tableau où les cases cochées mettent l'intitulé de la case dans la cellule tout en passant une ligne à chaque saisie: cette partie est difficile à expliquer, mais elle est la plus simple je pense, même si il y a un problème que je n'arrive pas à identifier (ne passe pas à chaque fois la ligne ?!)

    - et d'autre part, les cases cochées doivent s'écrire dans une colonne, et à chaque nouvelle saisie, cela doit passer le nombre de 20 lignes à chaque fois , mais là aussi problème, il y a à chaque saisie un décalage qui s'accumule

    j'ai joint un extrait afin de mieux expliciter mes propos (car je pense que ça doit être dur à comprendre)

    voilà, si vous avez des idées, ça m'arrangerait car j'ai bientôt fini, et malheureusement je bute sur ça
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut GTbenj et le forum
    Avant de commencer, sur la feuille "Evaluation", cellule A3 tu remplaces ta formule par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(INDIRECT("start!K" & COLONNE()+19)="";"";INDIRECT("start!K" & COLONNE()+19))
    Et tu recopies A3 jusqu'à la cellule T3
    (C'est juste pour me donner un point d'ancrage sur le sujet)

    Violente critique : tu devrais faire attention aux noms que tu donnes : "Evaluation " est le moyen le plus sur de se trmper et que le code fonctionne mal (je n'emploie jamais le nom informatique). un espace est par logique invisible, par contre, excel le "voit". Donc ne jamais commencer ou finir un nom par un espace.
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut
    oui merci, ça évite de recopier mais comme c'était déjà fait, ce n'est pas cela qui me pose problème, c'est auniveau de la programmation des checkbox, je mets donc le code (déjà sur le fichier excel plus haut):

    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
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    Private Sub CommandButton14_Click()
     
     
            Dim DerL7 As Integer, DerL2 As Integer
     
        Dim CB58 As String
        Dim CB59 As String
        Dim CB60 As String
        Dim CB61 As String
        Dim CB62 As String
        Dim CB63 As String
        Dim CB64 As String
        Dim CB65 As String
        Dim CB66 As String
        Dim CB67 As String
        Dim CB68 As String
        Dim CB69 As String
        Dim CB70 As String
        Dim CB71 As String
        Dim CB72 As String
        Dim CB73 As String
        Dim CB74 As String
        Dim CB75 As String
        Dim CB76 As String
        Dim CB77 As String
     
        If CheckBox58.Value = False Then
            CB58 = ""
        Else
            CB58 = CheckBox58.Caption
        End If
     
        If CheckBox59.Value = False Then
            CB59 = ""
        Else
            CB59 = CheckBox59.Caption
        End If
     
        If CheckBox60.Value = False Then
            CB60 = ""
        Else
            CB60 = CheckBox60.Caption
        End If
     
        If CheckBox61.Value = False Then
            CB61 = ""
        Else
            CB61 = CheckBox61.Caption
        End If
     
        If CheckBox62.Value = False Then
            CB62 = ""
        Else
            CB62 = CheckBox62.Caption
        End If
            If CheckBox63.Value = False Then
            CB63 = ""
        Else
            CB63 = CheckBox63.Caption
        End If
     
        If CheckBox64.Value = False Then
            CB64 = ""
        Else
            CB64 = CheckBox64.Caption
        End If
     
        If CheckBox65.Value = False Then
            CB65 = ""
        Else
            CB65 = CheckBox65.Caption
        End If
     
        If CheckBox66.Value = False Then
            CB66 = ""
        Else
            CB66 = CheckBox66.Caption
        End If
     
        If CheckBox67.Value = False Then
            CB67 = ""
        Else
            CB67 = CheckBox67.Caption
        End If
            If CheckBox68.Value = False Then
            CB68 = ""
        Else
            CB68 = CheckBox68.Caption
        End If
     
        If CheckBox69.Value = False Then
            CB69 = ""
        Else
            CB69 = CheckBox69.Caption
        End If
     
        If CheckBox70.Value = False Then
            CB70 = ""
        Else
            CB70 = CheckBox70.Caption
        End If
     
        If CheckBox71.Value = False Then
            CB71 = ""
        Else
            CB71 = CheckBox71.Caption
        End If
     
        If CheckBox72.Value = False Then
            CB72 = ""
        Else
            CB72 = CheckBox72.Caption
        End If
            If CheckBox73.Value = False Then
            CB73 = ""
        Else
            CB73 = CheckBox73.Caption
        End If
     
        If CheckBox74.Value = False Then
            CB74 = ""
        Else
            CB74 = CheckBox74.Caption
        End If
     
        If CheckBox75.Value = False Then
            CB75 = ""
        Else
            CB75 = CheckBox75.Caption
        End If
     
        If CheckBox76.Value = False Then
            CB76 = ""
        Else
            CB76 = CheckBox76.Caption
        End If
     
        If CheckBox77.Value = False Then
            CB77 = ""
        Else
            CB77 = CheckBox77.Caption
        End If
     
        With Feuil7
            If .Range("F2") = "" Then
                DerL7 = 2
            Else
                DerL7 = Feuil7.Range("F65535").End(xlUp).Row + 20
            End If
     
            If CB58 <> "" Then
                .Range("F" & DerL7).Value = CB58
                DerL7 = DerL7 + 1
            End If
            If CB59 <> "" Then
                .Range("F" & DerL7).Value = CB59
                DerL7 = DerL7 + 1
            End If
            If CB60 <> "" Then
                .Range("F" & DerL7).Value = CB60
                DerL7 = DerL7 + 1
            End If
            If CB61 <> "" Then
                .Range("F" & DerL7).Value = CB61
                DerL7 = DerL7 + 1
            End If
            If CB62 <> "" Then
                .Range("F" & DerL7).Value = CB62
                DerL7 = DerL7 + 1
            End If
                  If CB63 <> "" Then
                .Range("F" & DerL7).Value = CB63
                DerL7 = DerL7 + 1
            End If
            If CB64 <> "" Then
                .Range("F" & DerL7).Value = CB64
                DerL7 = DerL7 + 1
            End If
            If CB65 <> "" Then
                .Range("F" & DerL7).Value = CB65
                DerL7 = DerL7 + 1
            End If
            If CB66 <> "" Then
                .Range("F" & DerL7).Value = CB66
                DerL7 = DerL7 + 1
            End If
            If CB67 <> "" Then
                .Range("F" & DerL7).Value = CB67
                DerL7 = DerL7 + 1
            End If
                  If CB68 <> "" Then
                .Range("F" & DerL7).Value = CB68
                DerL7 = DerL7 + 1
            End If
            If CB69 <> "" Then
                .Range("F" & DerL7).Value = CB69
                DerL7 = DerL7 + 1
            End If
            If CB70 <> "" Then
                .Range("F" & DerL7).Value = CB70
                DerL7 = DerL7 + 1
            End If
            If CB71 <> "" Then
                .Range("F" & DerL7).Value = CB71
                DerL7 = DerL7 + 1
            End If
            If CB72 <> "" Then
                .Range("F" & DerL7).Value = CB72
                DerL7 = DerL7 + 1
            End If
                  If CB73 <> "" Then
                .Range("F" & DerL7).Value = CB73
                DerL7 = DerL7 + 1
            End If
            If CB74 <> "" Then
                .Range("F" & DerL7).Value = CB74
                DerL7 = DerL7 + 1
            End If
            If CB75 <> "" Then
                .Range("F" & DerL7).Value = CB75
                DerL7 = DerL7 + 1
            End If
            If CB76 <> "" Then
                .Range("F" & DerL7).Value = CB76
                DerL7 = DerL7 + 1
            End If
            If CB77 <> "" Then
                .Range("F" & DerL7).Value = CB77
                DerL7 = DerL7 + 1
            End If
            End With
     
            With Feuil2
            If .Range("A4") = "" Then
                DerL2 = 4
            Else
                DerL2 = Feuil2.Range("A65535").End(xlUp).Row + 1
              End If
     
                .Range("A" & DerL2).Value = CB58
                .Range("B" & DerL2).Value = CB59
                .Range("C" & DerL2).Value = CB60
                .Range("D" & DerL2).Value = CB61
                .Range("E" & DerL2).Value = CB62
                .Range("F" & DerL2).Value = CB63
                .Range("G" & DerL2).Value = CB64
                .Range("H" & DerL2).Value = CB65
                .Range("I" & DerL2).Value = CB66
                .Range("J" & DerL2).Value = CB67
                .Range("K" & DerL2).Value = CB68
                .Range("L" & DerL2).Value = CB69
                .Range("M" & DerL2).Value = CB70
                .Range("N" & DerL2).Value = CB71
                .Range("O" & DerL2).Value = CB72
                .Range("P" & DerL2).Value = CB73
                .Range("Q" & DerL2).Value = CB74
                .Range("R" & DerL2).Value = CB75
                .Range("S" & DerL2).Value = CB76
                .Range("T" & DerL2).Value = CB77
     
            End With
     
    End Sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut GTbenj et le forum
    Comme tes macros sont trop longues, je préfère les mettre à ma sauce
    sur l'USF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
    Dim X As Integer
    With Sheets("Evaluation ")
        For X = 1 To 20
            If .Cells(3, X) = "" Then
                Me.Controls("CheckBox" & (57 + X)).Visible = False
            Else
                Me.Controls("CheckBox" & (57 + X)).Caption = .Cells(3, X)
            End If
        Next X
    End With
    End Sub
    Comme ton code, mais en plus court et avec masquage des checkbox inutiles

    Quand j'aide,je fais ce que je veux, Na!
    Même si tu ne l'utilises pas, regardes ce que je mets, ça peut te donner des idées.
    Je continue
    EDIT : j'ai un peu continué, je n'ai fait que la moitié :
    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
    Private Sub CommandButton14_Click()
    Dim Cel As Range
    Dim X As Integer
    'Dim TT
     
    With Sheets("bd")
        Set Cel = Range("F" & ((Int((.Range("F65536").End(xlUp).Row - 2) / 20) + _
                    IIf(.Range("F65536").End(xlUp).Row < 22, 0, 1)) * 20) + 1)
            'TT = Cel.Row
            For X = 1 To 20
            If Me.Controls("CheckBox" & (57 + X)) = True Then _
                Cel.Offset(X, 0) = Me.Controls("CheckBox" & (57 + X)).Caption
        Next X
    End With
    End Sub
    reste la page évaluation :faudrait se servir du calcul de la ligne de Cel qui nous donnes le nombre de fois qu'il y a eu saisie ajouter un nombre pour que la première saise tombe en ligne 3. Du style :
    ligne = ((cel.row-1) mod 20)+3
    à vérifier et faire une boucle sur feuille "evaluation ".cells(ligne,X)=...
    Je dois partir, à toi de jouer
    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Par défaut
    je ne vois pas ce que ça change, je suis un peu novice en programmation donc dsl, les formules assez longues ne me dérangent pas car je vois mieux ce que cela signifie pas à pas
    et pourquoi mettre le code dans sub userfom initialize ?

    j'aimerais un peu plus d'explication svp car je n'ai pas tout compris, mais ça pourrait m'interesser

    J'ai vu ton edit après, je regarde ça d'ici peu

    merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ce que cela change :

    -beaucoup moins de temps à passer pour taper le code et plus vous avez d'objet dans votre formulaire et plus c'est vrai, mais bien sûr vous avez le droit de préférer la méthode "longue".
    -la procédure Userform_Initialize() dit bien ce qu'elle veut dire :
    à chaque ouverture de votre Userform la valeur attribuée aux objets est réinitialisée automatiquement, qu'il s'agisse de ListBox, ComboBox et autres TextBox y compris ce que vous voulez afficher ou ne pas afficher temporairement en fonction de certaines conditions.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous
    je ne vois pas ce que ça change, je suis un peu novice en programmation donc dsl, les formules assez longues ne me dérangent pas car je vois mieux ce que cela signifie pas à pas
    Tu te rends compte que c'était pas la colonne F qu'il fallait remplir, mais la colonne G, par ce t'avais oublié une donnée . et je ne parles pas d'une centaine de contrôles....
    J'ai vu ton edit après, je regarde ça d'ici peu
    Et je viens de relire macro et Oups!!! j'ai fais des noeuds avec les boyaux de la tête....

    Le fichier contient les macro commentées. si besoin de précisions supplémentaires, les demander.

    J'aurais pu utiliser For X=0 to 19, ce qui aurait simplifié les calcul, mais je trouve plus simple de me dire que 20=20, plutot que dans ce cas, comme on part de 0, 19=20

    Comme j'ai fait une erreur, je l'ai corrigée, mais si au lieu d'utiliser Int(), j'avais utilisé Fix() je crois que j'aurais pu simplifier la détermination de Cel.
    Mais, j'ai oublié le ".", permettant de rattacher le préfixe sheets dans la formule Set Cel = .Range(...), ce qui m'a occasionné une perte intempestive de cheveux (Pourquoi ça marche pas à tous les coup ?)
    Ah oui, d'ailleurs, pour vérifier en pas-à-pas, je suis passé en Non-Modale pour l'USF.

    Enfin, maintenant ça a l'air de fonctionner, mais il faut le tester plus avant.
    A+

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

Discussions similaires

  1. [ASP3] Problème de checkbox
    Par beegees dans le forum ASP
    Réponses: 2
    Dernier message: 23/03/2006, 16h42
  2. [xsl] Probléme De checkbox
    Par dimkha dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/01/2006, 12h09
  3. [JTextArea] Problème ecriture sur plusieurs lignes
    Par Cyborg289 dans le forum Composants
    Réponses: 3
    Dernier message: 23/09/2005, 10h22
  4. Problème sur CHECKBOX
    Par dede92 dans le forum Windows
    Réponses: 6
    Dernier message: 22/02/2005, 10h48
  5. [CR8] Problème tableau sur plusieurs pages???
    Par christophe28 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/11/2004, 15h46

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