XL 2016 Ajout auto de checkbox dans formulaire après événement Combobox_Change

MyloX

XLDnaute Nouveau
Bonjour à tous,


Je me permet de solliciter votre aide pour la réalisation d'un Userform dynamique.

L'idée de générale de ce que j'aimerais faire, c'est :
  1. On sélectionne les informations du produit ;
  2. On choisit le secteur de formation sur lequel on veut travailler dans la ComboBox 4 ;
  3. On recherche la ComboBox4.Value dans la colonne B de l'onglet Feuil2 ;
  4. Si la cellule en colonne B (=cells(i,2)) a la même valeur comprise en ComboBox4, alors on ajoute une CheckBox avec comme intitulé Cells(i,1).Value dans la frame "Formations associées" ;
  5. Si la CheckBox créée est cochée, ça renvoie "X" à l'intersection entre la ligne du produit sélectionné et la formation du secteur correspondant à l'intitulé de la CheckBox.
Je vous laisse un exemple en pièce jointe.
J'espère avoir été assez clair et dans le cas contraire, n'hésitez pas à me le faire savoir.

Merci pour votre aide.


Cordialement,
MyloX
 

Pièces jointes

  • essai usf .xlsm
    25.4 KB · Affichages: 26
Solution
Bonjour à tous,
Grillé sur le poteau .... ;)
Les données de l'onglet PROD ont été converties en table structurée de nom Prod.
Comme l'USF reprend pour la plupart de ses comboboxs les champs de la table,
une autre voie serait de lancer l'Usf directement sur une des lignes de celle-ci .
à suivre ...

fanch55

XLDnaute Barbatruc
Dans la sub d'enregistrement :
commenter le code encadré
VB:
Private Sub Cmd_Enregistrer_Click()
Application.ScreenUpdating = False

    With [Prod].ListObject
        .Range.AutoFilter Field:=.ListColumns("famille produit").Index, Criteria1:=ComboBox1
        .Range.AutoFilter Field:=.ListColumns("code article").Index, Criteria1:=ComboBox2
        .Range.AutoFilter Field:=.ListColumns("designation").Index, Criteria1:=ComboBox3
    End With

'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'|   [Prod[[Form 1]:[Form 3]]].SpecialCells(xlCellTypeVisible) = ""  |
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
  
    For I = 0 To Me.Lbx_Form.ListCount - 1
        [Prod].ListObject.ListColumns(Lbx_Form.List(I)).DataBodyRange.SpecialCells(xlCellTypeVisible) = _
            IIf(Me.Lbx_Form.Selected(I), "X", vbNullString)
    Next I
    [Prod[ADT]].SpecialCells(xlCellTypeVisible) = IIf(CheckBox1, "X", vbNullString)

    [Prod].ListObject.Range.AutoFilter
    [Prod].ListObject.Range.AutoFilter

Application.ScreenUpdating = True
End Sub
 

MyloX

XLDnaute Nouveau
Dans la sub d'enregistrement :
commenter le code encadré
VB:
Private Sub Cmd_Enregistrer_Click()
Application.ScreenUpdating = False

    With [Prod].ListObject
        .Range.AutoFilter Field:=.ListColumns("famille produit").Index, Criteria1:=ComboBox1
        .Range.AutoFilter Field:=.ListColumns("code article").Index, Criteria1:=ComboBox2
        .Range.AutoFilter Field:=.ListColumns("designation").Index, Criteria1:=ComboBox3
    End With

'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'|   [Prod[[Form 1]:[Form 3]]].SpecialCells(xlCellTypeVisible) = ""  |
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
 
    For I = 0 To Me.Lbx_Form.ListCount - 1
        [Prod].ListObject.ListColumns(Lbx_Form.List(I)).DataBodyRange.SpecialCells(xlCellTypeVisible) = _
            IIf(Me.Lbx_Form.Selected(I), "X", vbNullString)
    Next I
    [Prod[ADT]].SpecialCells(xlCellTypeVisible) = IIf(CheckBox1, "X", vbNullString)

    [Prod].ListObject.Range.AutoFilter
    [Prod].ListObject.Range.AutoFilter

Application.ScreenUpdating = True
End Sub

Super merci beaucoup @fanch55 ! C'est parfait.
 

Discussions similaires