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 :

CheckBox et valeurs T/F définies


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 CheckBox et valeurs T/F définies
    Bonsoir,

    Je cherche depuis quelque temps à créer un formulaire (usrfrm) avec un grand nombre de checkbox (une bonne centaine).

    Chaque checkbox est sensée, quand elle est cochée, renvoyer une valeur qui lui est spécifique dans une cellule excel (colonne X, ligne 2 jusqu'à 1000) qui comprendras au final la totalité des valeurs de l’ensemble des checkbox (séparées les une des autres par des virgules).

    Or avec le code que j'ai bidouillé je n'obtient pas l'effet voulu:
    Lorsque je dé-sélectionne une checkbox, l'enssemble des valeurs contenues dans la cellule cible (X2) disparaissent alors que seulement la valeur spécifique à cette checkbox devrais être effacée.

    J'ai donc essayer de contourner le problème en utilisant des variables mais sans grand succès...

    Voici mon code, pour 2 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
     
     
    Private Sub CheckBox1_Click()
     
     
    If CheckBox1.Value = True Then
    Dim Variable_1D As String
    Variable_1D = Range("X2")
    Range("X2").Value = Variable_1D & "2339, "
     
    End If
     
    If CheckBox1.Value = False Then
    Range("X2").Value = Variable_1D
     
    End If
     
    Dim Variable_1F
    Variable_1F = Range("X2")
     
    Msg = Variable_1F
     
    End Sub
     
     
    Private Sub CheckBox2_Click()
     
     
    If CheckBox2.Value = True Then
    Range("X2").Value = Variable_1F & "2340, "
     
    End If
     
    If CheckBox2.Value = False Then
    Range("X2").Value = Variable_1F
     
    End If
     
    Dim Variable_2F
    Variable_2F = Range("X2")
     
    End Sub
    Mes connaissances en VB étant comme vous pouvez le voir très limitées, voire quasi inexistantes, toute aide me serait grandement utile.

    Merci par avance : ).

    .

  2. #2
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour pyronb69,

    Tes problèmes : il te faut une variable globale (ici un tableau, tabl()) et non une locale + gérer le coché mais aussi le décoché.

    Essaies :


    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
    ' déclaration des "globales"
    Option Explicit
     
    Dim tabl(1000) As String
     
    Private Sub CheckBox1_Change()
    Dim i As Integer
    Dim variable As String
     
    Range("X2").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("X2").Value = variable
     
    End Sub
     
    Private Sub CheckBox2_Change()
    Dim i As Integer
    Dim variable As String
     
    Range("X2").Clear
     
    If CheckBox2.Value = True Then
        tabl(2) = "2340, "
    Else
        tabl(2) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X2").Value = variable
    End Sub
    Bertrand

  3. #3
    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
    Ahhhhhhhhhhhhhhhhhhh merci beaucoup Bertrand, ça marche !

    Serait-il possible d'étendre le code à toutes les cellules de la colonne x? (enfin de X2 à x1000), de façon à ce que le contenu de chacune de ces cellules soit indépendant mais relié au même code?

    Pour l'instant j'ai ça dans le code de la feuille où tout ça se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address <> "$X$2" Then Exit Sub
    UserForm1.Show
    End Sub
    J'imagine qu'il faudrais modifier un chouya le code des checkbox aussi, si quelqu'un pouvais m'aider je vous serais réellement reconnaissant : )

    Merci pour la réponse rapide en tout cas !

  4. #4
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour,

    Oui cela parait possible ... A chaque appel de la userform, il faut lui affecter un numéro et le traduire en ligne.

    Je regarde ça ce soir car je n'ai pas d'ordinateur sous la main ( juste l'iphone)

    Bertrand

  5. #5
    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
    Génial! Merci beaucoup Bertrand !

    Ton aide m'est réellement inestimable : )

  6. #6
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonsoir,

    Je te propose de rajouter 2 boutons à ton formulaire, un pour sortir et un pour passer à la ligne.

    Le code total à essayer :

    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
    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
     
    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) = "2340, "
    Else
        tabl(2) = ""
    End If
     
    For i = 1 To 1000
        variable = variable & tabl(i)
    Next
     
    Range("X" & ligne).Value = variable
    End Sub
     
     
     
    Private Sub passeralaligne_Click()
     
    ' incrémente la ligne
    ligne = ligne + 1
     
    ' vide le tableau
    ReDim tabl(1000) As String
     
    ' vide l'ensemble des CheckBox
    Dim nouveau As Control
    For Each nouveau In Controls
       Select Case TypeName(nouveau)
       Case "CheckBox":
          nouveau.Value = False
       End Select
    Next
     
    End Sub
     
    Private Sub sortie_Click()
     
    ' ferme le formulaire
    Unload UserForm1
     
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
     
    ' Initialise le tableau et la première ligne
    ReDim tabl(1000) As String
    ligne = 2
     
    ' vide la colonne X
    For i = ligne To Range("X65536").End(xlUp).Row
        Range("x" & i).Clear
    Next
     
    End Sub

    En détail :

    1. je déclare une deuxième variable globale pour gérer la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
     
    Dim tabl() As String
    Dim ligne As Integer
    2. j’intègre la ligne dans la saisie de chacun de mes résultats "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
    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
     
    End Sub
    3. je crée mon bouton pour passer à la ligne (ligne = ligne +1 ), je vide ma liste tabl et j'initialise mes 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
    Private Sub passeralaligne_Click()
     
    ' incrémente la ligne
    ligne = ligne + 1
     
    ' vide le tableau
    ReDim tabl(1000) As String
     
    ' vide l'ensemble des CheckBox
    Dim nouveau As Control
    For Each nouveau In Controls
       Select Case TypeName(nouveau)
       Case "CheckBox":
          nouveau.Value = False
       End Select
    Next
     
    End Sub
    4. je prévois mon bouton de sortie - pour sortir de ma saisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub sortie_Click()
     
    ' ferme le formulaire
    Unload UserForm1
     
    End Sub
    5. J'initialise mon formulaire à l'ouverture, je vide ma colonne X (on peut faire différemment si tu souhaites saisir en plusieurs fois et revenir là où tu t'es arrêté la fois d'avant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
    Dim i As Integer
     
    ' Initialise le tableau et la première ligne
    ReDim tabl(1000) As String
    ligne = 2
     
    ' vide la colonne X
    For i = ligne To Range("X65536").End(xlUp).Row
        Range("x" & i).Clear
    Next
     
    End Sub
    J'espère que cela te plaira.

    Bertrand

Discussions similaires

  1. Cocher une checkbox si valeur = 1
    Par baggie dans le forum Langage
    Réponses: 9
    Dernier message: 29/05/2008, 14h30
  2. Réponses: 30
    Dernier message: 02/03/2008, 12h53
  3. Réponses: 5
    Dernier message: 11/02/2008, 09h07
  4. Checkbox generique valeur
    Par Marsiou dans le forum Windows Forms
    Réponses: 8
    Dernier message: 20/11/2007, 20h24
  5. checkbox sans valeur
    Par Mat_DZ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2006, 15h02

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