XL 2016 Concaténer différentes checkboxs dans une cellule

syrus

XLDnaute Nouveau
Bonjour
Voila j'ai un petit problème sur mon useform (pourtant trivial mais la je bloque )
D'habitude avec quelque exemple je trouve mon bonheur... mais la visiblement non

Donc J'ai un usefrom avec plusieurs un groupe checkboxs qui correspondent aux outils qui sont utilisés pour l’intervention
et j essaie tant bien que mal de faire que les checkboxs cochées s'affichent dans une des cellules de mon résultat de fin.
En gros il y a 12 checkboxs, et je voudrais que si par exemple la checkbox 1 ,5 ,7,8 sont cochées le résultat de la cellule soit "outil1, outil5, outil7, outils8" le tous séparé par un ", "
J'ai tenté un ça comme code qui marche bien pour une autre de mes checkbox mais la ça ne marche pas

VB:
     If CBN1.Value = True Then
        Worksheets("Visu fiche").Range("E8") = "outil1 "
    End If
 
    If CBN2.Value = True Then
        Worksheets("Visu fiche").Range("E8") = Worksheets("Visu fiche").Range("E8") & "outil2 "
    End If

    If CBN3.Value = True Then
        Worksheets("Visu fiche").Range("E8") = Worksheets("Visu fiche").Range("E8") & "outil3 "
    End If
 etc

Pouvez vous m'aider à comprendre mon erreur pour résoudre mon problème
Merci
Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Syrus, bonjour le forum,

Ton code fonctionne chez moi toutefois je te propose cette autre approche :

VB:
Private Sub CommandButton1_Click()
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim L As String 'déclare la variable L (Liste)

For Each CTRL In Me.Controls 'boucle sur tous les contrôlec CTRL de l'UserForm en cours
    If TypeOf CTRL Is MSForms.CheckBox Then 'condition : si le contrôle est une ChekBox
        'si le contrôle est coché, définit la liste L
        If CTRL.Value = True Then L = IIf(L = "", "outil" & Mid(CTRL.Name, 4), L & ", " & "outil" & Mid(CTRL.Name, 4))
    End If 'fin de la condition
Next CTRL 'prochain contrôle de la boucle
Worksheets("Visu fiche").Range("E8") = L 'renvoie la liste L dans la celluel E8 de l'onglet "Visu fiche"
End Sub
 

syrus

XLDnaute Nouveau
Bonjour et merci Robert

Ah étrange chez moi ça marche pas les checkboxs sont sélectionnées mais rien ne se met dans la cellule, mais bon voyons le coté positive mon code de base n'est pas si mauvais

Si non j'ai testé ton code mais pareil rien ne se passe, après je ne l'est peut être pas bien réadapté à mon code
notamment cette partie que j'ai du mal à interpréter ( peut être un maque de caféine pour être totalement réveillé ^^)
"outil" & Mid(CTRL.Name, 4),
le "Name" correspondant au nom de mes checkboxs ? et le "outil" c'est bien la valeur que je set dans la cellule ?

ps : autres points que j'ai oublié de cité dans mon usefrom j'ai d'autre checkbox qui elle fonctionnes bien le groupe de12 doit fonctionné indépendamment des autres (je dit ca car je viens de faire la conneries d'un truc qui affectaient toutes les checkboxs

en tout cas merci du temps accordé à ma demande
Cordialement
 

Valtrase

XLDnaute Occasionnel
Salut le fil
Avec ton code tu rajoutes mais tu n'enlève pas. Testes ce code en le mettant dans toutes les méthodes Click
Code:
Private Sub CBN1_Click()
    Worksheet("Visu Fiche").Range("E8").Value = _
                        IIf(CBN1.Value = True, "Outil 1; ", "") & _
                        IIf(CBN2.Value = True, "Outil 2; ", "") & _
                        IIf(CBN3.Value = True, "Outil 3;", "")

End Sub
Je viens de voir le message de Robert, il est évident que passé un certain nombre de contrôles il vaut mieux passer par une boucle.
 
Dernière édition:

Valtrase

XLDnaute Occasionnel
Dans ton cas tu doit adapter un peu.
Pour la petite question Mid("Ceci est un texte", 6,[Length]) te renvoie la partie du texte commençant à la sixième position, et si la longueur n'est pas définie alors le texte est renvoyé jusqu'à la fin
IL FAUT UTILISER ET ABUSER DE LA TOUCHE F1
Dans ton cas il faut adapter comme ceci, pour plus de souplesse utilise la proprièté .Tag de tes CheckBox pour mettre la valeur qui doit s'afficher dans ta cellule.

Code:
Private Sub CBN1_Click()
FillRangeTool
End Sub

Private Sub CBN2_Click()
FillRangeTool
End Sub

Private Sub CBN3_Click()
FillRangeTool
End Sub

Sub FillRangeTool()
    Dim Ctrl   As Control                                  'déclare la variable CTRL (ConTRôLe)
    Dim L      As String                                   'déclare la variable L (Liste)

    For Each Ctrl In Me.Controls                           'boucle sur tous les contrôlec CTRL de l'UserForm en cours
        If TypeOf Ctrl Is MSForms.CheckBox Then            'condition : si le contrôle est une ChekBox
'si le contrôle est coché, définit la liste L
            If Ctrl.Value = True Then L = IIf(L = "", Ctrl.Tag, L & "; " & Ctrl.Tag)
        End If                                             'fin de la condition
    Next Ctrl                                              'prochain contrôle de la boucle
   Worksheets("Visu fiche").Range("E8") = L 'renvoie la liste L dans la celluel E8 de l'onglet "Visu fiche"
   
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Si non j'ai testé ton code mais pareil rien ne se passe, après je ne l'ai peut être pas bien réadapté à mon code
notamment cette partie que j'ai du mal à interpréter ( peut être un maque de caféine pour être totalement réveillé ^^)
"outil" & Mid(CTRL.Name, 4),

Si la Checkbox s'appelle CBN2, Mid(CTRL.Name, 4) va renvoyer le texte a partir de la 4ème lettre jusqu'à la fin de ce nom. Soit : 2.
Ce qui donne "Outil2" pour le CBN2, Outil12 pour le CBN12, etc.

En pièce jointe un exemple que tu aurais dû toi, nous proposer !...
 

Pièces jointes

  • Syrus_ED_v01.xlsm
    21.5 KB · Affichages: 13

syrus

XLDnaute Nouveau
Bonjour
Désolé du temps de réponse, j'ai était pas mal accaparé hier
Merci Valtrace en me basant sur ta solution avec les tag ça fonction très bien
Mes différents "outils" apparaissent bien dans la cellules cible:)
Je n'est plus qu'a rendre mon code "propre" et régler les derniers problèmes (-Ajout d'un choix supplémentaire si il n'existe pas dans une listeo_O & - et rendre une textBox saisissable si et seulement si elle est vide )

Un grand merci a vous deux pour l'aide apporter sur le sujet
 

Valtrase

XLDnaute Occasionnel
Salut le fil
Syrus, pour ton TexBox si tu rentre les données manuellement tu peux agir sur la Méthode Exit
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.Enabled = (TextBox1 = "")
End Sub
Concernant ta liste utilises un ComboBox et joue sur la propriété RowSource ou List pour ajouter des données.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo