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 :

Userform, Valeur des checkbox à l'initialisation et changement de ligne


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut Userform, Valeur des checkbox à l'initialisation et changement de ligne
    Bonjour,

    Grâce à la précieuse aide de plusieurs membres de ce forum je suis parvenu tant bien que mal à créer un formulaire (userform) avec un grand nombre de checkbox (quelques centaines).

    J'ai créer le formulaire dans tout son ensemble ainsi que le code derrière chaque checkbox avec la valeur que chacune d'entre elle dois renvoyer. Tout fonctionne parfaitement sauf un petit détail :

    Lorsque je reviens sur une ligne où j'ai déjà entrer plusieurs valeurs (séparées par des virgules) grâce au formulaire, certaines de ces valeurs sont supprimées. En générale toutes sauf la première.
    J'ai cru comprendre que c'est cette suppression involontaire qui cause mon principal problème : les checkbox dont les valeurs sont déjà inscrites dans la cellule sélectionnée n’apparaissent pas cochées quand on repasse dessus avec le formulaire.

    J'ai trois modes "d'entrées" sur une ligne :
    -En double cliquant directement sur la case (ce qui ouvre le formulaire et permet d'éditer la cellule sélectionnée).
    -En allant sur une ligne une fois le formulaire déjà ouvert, grâce à des boutons qui me permettent de remonter et descendre de ligne.

    J'ai bidouillé tant que j'ai pu mais je n'ai pas réussis à résoudre ce problème.
    C'est certainement pas très compliqué mais je n'arrive pas a reconnaitre le bout de code fautif...

    Pour vous donner une idée, voilà une version lite du code de mon fichier:

    Code en feuille 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 23 Then UserForm1.Show
    End Sub
    Code du haut du Userform1 et de deux checkbox:
    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
    Option Explicit
     
    Dim tabl() As String
    Dim ligne As Integer
     
     
     
     
     
    Private Sub CheckBox1_Change()
    Dim i As Integer
    Dim variable As String
     
     
    Range("X" & ligne).Clear
     
    If CheckBox1.Value = True Then
        tabl(1) = "2339, "
    Else
        tabl(1) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
     
     
     
     
    Private Sub CheckBox2_Change()
    Dim i As Integer
    Dim variable As String
     
    Range("X" & ligne).Clear
     
    If CheckBox2.Value = True Then
        tabl(2) = "2359, "
    Else
        tabl(2) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
    Code Passer à la ligne:
    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
     
     
    Private Sub passeralaligne_Click()
     
     
    ligne = ligne + 1
     
     
    ReDim tabl(1000) As String
     
     
     
    If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
        CheckBox1.Value = True
    Else
        CheckBox1.Value = False
    End If
     
    If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
        CheckBox2.Value = True
    Else
        CheckBox2.Value = False
    End If
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
    Code Remonter la ligne :
    Code d'Initialisation:
    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
    Private Sub UserForm_Initialize()
    Dim i As Integer
     
    ' Initialise le tableau et la première ligne
    ReDim tabl(1000) As String
    ligne = ActiveCell.Row
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
        CheckBox1.Value = True
    Else
        CheckBox1.Value = False
    End If
     
    If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
        CheckBox2.Value = True
    Else
        CheckBox2.Value = False
    End If
     
     
    End Sub

    Merci d'avance à tous pour votre aide !

    David.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut
    Bonjour,

    J'ai épurer un peu mon code en enlevant ce qui ne m'est à priori pas utile mais là encore je ne comprends pas le comportement du formulaire.

    Si je sélectionne des valeurs pour une cellule et que je passe à la suivante les valeurs y sont recopiés, en supprimant une valeur. Si je passe à la cellule suivante une valeur disparait encore et si je passe encore à la cellule suivante une valeur réapparait.

    Ici je me suis mis sur la ligne 9 et j'ai cliquer plusieurs fois sur mon bouton Remonter_ligne :



    Voilà l’ensemble de mon code (pour une meilleur lecture j'ai laisser 2 checkbox sur les 300)

    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
    Option Explicit
     
    Dim tabl() As String
    Dim ligne As Integer
     
     
    Private Sub CheckBox1_Change()
    Dim i As Integer
    Dim variable As String
     
     
    Range("X" & ligne).Clear
     
    If CheckBox1.Value = True Then
        tabl(1) = "2339, "
    Else
        tabl(1) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    End Sub
     
    Private Sub CheckBox2_Click()
    Dim i As Integer
    Dim variable As String
     
    Range("X" & ligne).Clear
     
    If CheckBox2.Value = True Then
        tabl(2) = "2359, "
    Else
        tabl(2) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
    End Sub
     
     
    Private Sub Image1_Click()
     
    End Sub
     
    Private Sub Label1_Click()
    Label1.Caption = ligne
     
    End Sub
     
    Private Sub Label2_Click()
     
    End Sub
     
    Private Sub Label3_Click()
     
    End Sub
     
    Private Sub Label4_Click()
     
    End Sub
     
    Private Sub MultiPage1_Change()
     
    End Sub
     
    Private Sub passeralaligne_Click()
    Dim i As Integer
     
     
    ' incrémente la ligne
    ligne = ligne + 1
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
        CheckBox1.Value = True
    Else
        CheckBox1.Value = False
    End If
     
    If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
        CheckBox2.Value = True
    Else
        CheckBox2.Value = False
    End If
     
     
    End Sub
     
    Private Sub remonterlaligne_Click()
    Dim i As Integer
     
    ' incrémente la ligne
    ligne = ligne - 1
     
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
        CheckBox1.Value = True
    Else
        CheckBox1.Value = False
    End If
     
    If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
        CheckBox2.Value = True
    Else
        CheckBox2.Value = False
    End If
     
    End Sub
     
    Private Sub ScrollBar1_Change()
     
    End Sub
     
    Private Sub sortie_Click()
     
    ' ferme le formulaire
    Unload UserForm1
     
    End Sub
     
     
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
    ReDim tabl(1000) As String
     
    ' Initialise le tableau et la première ligne
    ligne = ActiveCell.Row
     
    Label1.Caption = ligne
     
    Label3.Caption = Range("g" & ligne).Value
     
    Label4.Caption = Range("h" & ligne).Value
     
    Label5.Caption = Range("i" & ligne).Value
     
    UserForm1.Caption = Range("d" & ligne).Value & " - " & Range("x" & ligne).Value
     
    If Range("X" & ligne).Value Like "*" & "2339" & "*" Then
        CheckBox1.Value = True
    Else
        CheckBox1.Value = False
    End If
     
    If Range("X" & ligne).Value Like "*" & "2359" & "*" Then
        CheckBox2.Value = True
    Else
        CheckBox2.Value = False
    End If
     
     
    End Sub
    Quelqu'un aurait il une idée?

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous,

    A priori, le changement de ligne met à jour les CheckBox. C'est ce que vous souhaitez pour que l'affichage du Formulaire soit cohérent avec la ligne concernée.
    Le problème est que cela active les Subs des CheckBox, à vérifier en mode pas à pas.

    Si c'est le cas, une des solutions est de créer une variable inhibant l'accès aux procédures des CheckBox. Exemple :
    Code à mettre tout en haut :
    Dans les Sub sur les changements de ligne, mettre au début :
    et mettre à la fin :
    A mettre au début de chaque Sub CheckBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If EvitSub then Exit Sub
    Ce n'est peut-être pas la meilleure, à essayer.
    Cordialemnt

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 18
    Par défaut
    Ça marche !
    Le formulaire se comporte exactement comme je l'imaginais.

    Merci infiniment HopPopPop!

    Très bonne soirée à tous!

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

Discussions similaires

  1. Recupération des valeurs des checkbox
    Par goosweb dans le forum Général VBA
    Réponses: 1
    Dernier message: 10/07/2007, 20h40
  2. Réponses: 1
    Dernier message: 18/04/2007, 06h05
  3. [JSP] valeurs des checkbox
    Par lcoder dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 10/05/2006, 12h45
  4. [PHP-JS] Récupérer les valeurs des checkbox
    Par jamirokoi dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2006, 16h24
  5. recuperer les valeurs des checkbox selectionnés
    Par kagura dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/03/2006, 10h21

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