Programme VBA - Userform CheckBox

Bonjour à tous,

Tout d'abord je tiens à remercier ceux qui vont m'aidez !

Je souhaiterais obtenir de l'aide concernant la mise en place d'un projet de VBA sur un inventaire de produit chimique. En effet, je souhaite remplir les produits chimiques dans un fichier excel et dans une colonne je souhaiterais y remplir les différents pictogramme. J'ai donc créer un Userform avec les différent pictogramme et les checkbox à coter pour pouvoir sélectionner celui qu'on veut. par la suite je voudrais y insérer dans la cellule sélectionné les pictogramme sélectionner sur la checkbox cependant quand il y a plusieurs valeurs de sélectionnées je n'y arrive pas. Pouvez vous m'aidez sur ce point ? Et deuxièmement, je souhaiterais également que quand je clique double clique sur la cellule, cela m'ouvre la userform.

Vous pouvez voir ce que j'ai déjà fait dans la colonne Pictogramme CLP 1 j'ai mit un bouton pour activer l'userform

Merci !

Bonjour,

Pour le double-clic, il convient d'insérer un événement (Worksheet_BeforeDoubleClick) dans la feuille concernée.

Pour cela, clic droit sur l'onglet de cette feuille (ici Feuil1), Visualiser le code.

Dans la fenêtre VBE copier/coller ce code.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 26 Then 'si double clic colonne Z
        UserForm1.Show
    End If
End Sub

Pour les checkbox, on va faire simple, redondant et donc pas très "pro". (code à compléter)

Private Sub CommandButton1_Click()
Dim R As Range, cpt As Integer
    Set R = ActiveCell
    If CheckBox1 Then
        R.Offset(cpt).Value = "SGH01"
        cpt = cpt + 1
    End If
    If CheckBox2 Then
        R.Offset(cpt).Value = "SGH02"
        cpt = cpt + 1
    End If
    If CheckBox3 Then
        R.Offset(cpt).Value = "SGH03"
        cpt = cpt + 1
    End If
    If CheckBox4 Then
        R.Offset(cpt).Value = "SGH04"
        cpt = cpt + 1
    End If
    If CheckBox5 Then
        R.Offset(cpt).Value = "SGH05"
        cpt = cpt + 1
    End If
    If CheckBox6 Then
        R.Offset(cpt).Value = "SGH06"
        cpt = cpt + 1
    End If
    If CheckBox7 Then
        R.Offset(cpt).Value = "SGH07"
        cpt = cpt + 1
    End If
'ETC ETC ETC ............
    UserForm1.Hide
End Sub

Merci c'est vraiment super ce que vous m'avez donner ! Il y aurait-il pas une méthode permettant d'insérer les valeur SGJ01 ... dans les colonne de droite (CLP1, CLP 2, ...) plutôt ?

Et deuxième question est-il possible de réinitialiser la Userform a chaque utilisation (enlever les check à chaque fois qu'on clique dessus )?

Encore merci pour le travail que vous avez fait c'est vraiment très gentil 😊

Bonjour toutes et tous

coucou Pijaku et merci ^^

@TomR35

une idée comme une autre pourquoi pas mettre dans l'usf1 directement un multipage, il restera plus qu'à paramétrer le code + les images des pictos et les labels etc.

en vidéo (celui-ci ne fonctionne que pour le CPL 1 car non paramétrer pour les autres pour l'instant)

Note : après, le fait de double cliquez sur une colonne affiche l'userform sur la bonne page du multipage , je pense que cela est faisable,

crdlt,

André

En fait , je souhaiterais n’avoir qu’une interface de commande pour choisir qu’une fois l’ensemble des pictogrammes. Une fois avoir choisit l’ensemble, l’idéal serait que l’ensemble des choix soit vu donc les mettre dans les 5 colonnes. Ce serait plus simple pour utiliser le fichier par la suite surtout qu’il n’est pas forcément destiné à mon utilisation personnel

Salut tout le monde,

Voici ma proposition :

1- Modifier les noms des checkbox pour que leurs "indices" correspondent bien aux numéros de SGH,

2- le code de la feuille :

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'Vérifie que la cellule double-cliquée (Target) est bien en colonne Z
    If Target.Column = 26 Then
        'vérifie que la ligne de la cellule cliquée n'est pas inférieure à 7
        If Target.Row > 6 Then
            'Vérifie que la cellule immédiatement au dessus est bien remplie
            If Target.Offset(-1, 0).Value <> vbNullString Then
                'Ouvre l'userform
                UserForm1.Show
            End If
        End If
    End If
End Sub

3- le code de l'UserForm :

Option Explicit

Private Counter As Integer
Private Const MAXCHOIX As Integer = 5
Private RangeDepart As Range
Private InhibeEvent As Boolean

Private Sub UserForm_Activate()
    Set RangeDepart = ActiveCell
    Counter = 0
    InhibeEvent = False
End Sub
Private Sub CheckBox1_Click()
    If Not InhibeEvent Then Action CheckBox1
End Sub
Private Sub CheckBox2_Click()
    If Not InhibeEvent Then Action CheckBox2
End Sub
Private Sub CheckBox3_Click()
    If Not InhibeEvent Then Action CheckBox3
End Sub
Private Sub CheckBox4_Click()
    If Not InhibeEvent Then Action CheckBox4
End Sub
Private Sub CheckBox5_Click()
    If Not InhibeEvent Then Action CheckBox5
End Sub
Private Sub CheckBox6_Click()
    If Not InhibeEvent Then Action CheckBox6
End Sub
Private Sub CheckBox7_Click()
    If Not InhibeEvent Then Action CheckBox7
End Sub
Private Sub CheckBox8_Click()
    If Not InhibeEvent Then Action CheckBox8
End Sub
Private Sub CheckBox9_Click()
    If Not InhibeEvent Then Action CheckBox9
End Sub
Private Sub CommandButton1_Click()
Dim cpt As Integer
    If CheckBox1.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH01"
        C = C + 1
    End If
    If CheckBox2.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH02"
        C = C + 1
    End If
    If CheckBox3.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH03"
        C = C + 1
    End If
    If CheckBox4.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH04"
        C = C + 1
    End If
    If CheckBox5.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH05"
        C = C + 1
    End If
    If CheckBox6.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH06"
        C = C + 1
    End If
    If CheckBox7.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH07"
        C = C + 1
    End If
    If CheckBox8.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH08"
        C = C + 1
    End If
    If CheckBox9.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH09"
        C = C + 1
    End If
    Unload UserForm1
End Sub

Private Sub Action(C As MSForms.CheckBox)
    If C.Value = True Then
        Counter = Counter + 1
    Else
        Counter = Counter - 1
    End If
    If Counter > MAXCHOIX Then
        MsgBox "Nombre de choix maximum atteind." & vbCrLf & "Veuillez en décocher un pour changer de choix"
        InhibeEvent = True
        C.Value = False
        InhibeEvent = False
        Counter = Counter - 1
    End If
End Sub

Le fichier exemple :

Encore une fois merci beaucoup pour ce que vous avez fait mais j’aurais une dernière question comment puis-je faire si je souhaite que tout soit dans la même ligne mais qui il y est un retour à ligne à chaque fois que je rentre une valeur ?

dans la même ligne mais qui il y est un retour à ligne à chaque fois que je rentre une valeur ?
Dans la même ligne, c'est fait.
Je ne comprends donc pas.

Dans la même cellule, avec un retour à la ligne ok...
Exprimez vous mieux car on ne va pas refaire le même travail 8 fois...

Oui c’est tout à fait ça. Je suis vraiment désolé de mettre mal exprimé

Remplacer :

Private Sub CommandButton1_Click()
Dim cpt As Integer
    If CheckBox1.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH01"
        C = C + 1
    End If
    If CheckBox2.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH02"
        C = C + 1
    End If
    If CheckBox3.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH03"
        C = C + 1
    End If
    If CheckBox4.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH04"
        C = C + 1
    End If
    If CheckBox5.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH05"
        C = C + 1
    End If
    If CheckBox6.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH06"
        C = C + 1
    End If
    If CheckBox7.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH07"
        C = C + 1
    End If
    If CheckBox8.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH08"
        C = C + 1
    End If
    If CheckBox9.Value = True Then
        RangeDepart.Offset(0, C).Value = "SGH09"
        C = C + 1
    End If
    Unload UserForm1
End Sub

Par :

Private Sub CommandButton1_Click()
    If CheckBox1.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH01"
    End If
    If CheckBox2.Value = True Then
        RangeDepart.Value =  RangeDepart.Value & vbCrLf & "SGH02"
    End If
    If CheckBox3.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf &  "SGH03"
    End If
    If CheckBox4.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH04"
    End If
    If CheckBox5.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH05"
    End If
    If CheckBox6.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH06"
    End If
    If CheckBox7.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH07"
    End If
    If CheckBox8.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH08"
    End If
    If CheckBox9.Value = True Then
        RangeDepart.Value = RangeDepart.Value & vbCrLf & "SGH09"
    End If
    RangeDepart.Value = Right(RangeDepart.Value, Len(RangeDepart.Value) - 1) '- 1 ou - 2 je n'ai pas testé...
    Unload UserForm1
End Sub
Rechercher des sujets similaires à "programme vba userform checkbox"