XL 2016 remplacer ListBox par bouton d'option et case à cocher

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

halecs93

XLDnaute Impliqué
Bonjour,

Et tout d'abord merci tout particulièrement à jm27 et Youky pour l'aide apportée sur ce fichier.

Je souhaitais, comme sur l'illustration modifier deux choses pour faciliter, selon moi, la saisie.

1674460560239.png




Grand merci 🙂
 

Pièces jointes

Hello

je ne comprend pas du tout ton formulaire.. ca sent la récup pas adaptée.. le nom des controls ne correspond pas au control lui même
ex: le label Somme s'appelle "Code Postal"

les textbox et combobox s'appellent tous "textbox".. bon.. ca .. à la rigueur ok. c'est pour pouvoir boucler sur le nom .. même si un bouclage sur les types de controls aurait sans doute été mieux...
 
Hello

je ne comprend pas du tout ton formulaire.. ca sent la récup pas adaptée.. le nom des controls ne correspond pas au control lui même
ex: le label Somme s'appelle "Code Postal"

les textbox et combobox s'appellent tous "textbox".. bon.. ca .. à la rigueur ok. c'est pour pouvoir boucler sur le nom .. même si un bouclage sur les types de controls aurait sans doute été mieux...
En effet.... tentative d'adaptation. Je n'ai pas tout modifié encore dans les noms.
 
Dernière édition:
Hello @fanfan38

@halecs93
en PJ ton fichier avec les controls renommés sous la forme "Ctrl_NomColonneTable"

PS le titre de ton post n'est pas bon==> Remplacer un Combobox
En effet... je me trompe souvent dans la dénomination ListBox et ComboBox 🙁

Je me demandais si, lorsque la case est cochée pour la facture, un "X" pouvait apparaître en lieu et place de "VRAI" et "" pour "FAUX" ?

Merci beaucoup
 
Dernière édition:
en modifiant le code

VB:
Private Sub btnajouter_Click() ' Procédure permettant d'ajouter une nouvelle dépense
If Me.Ctrl_Date = "" Or Me.Ctrl_Fournisseur = "" Then Exit Sub

With Sheets("depenses").ListObjects("tabsource")
   
    .ListRows.Add
    LastLine = .ListRows.Count
    On Error Resume Next 'pour ignorer l'erreur sur la colonne "Mode_Paiement"
    For k = 1 To .ListColumns.Count
        'MsgBox .HeaderRowRange(k).Value
        If .HeaderRowRange(k).Value = "FACTURE" Then
            .ListColumns(k).DataBodyRange(LastLine) = IIf(Controls("Ctrl_" & .HeaderRowRange(k)), "X", "")
        Else
            .ListColumns(k).DataBodyRange(LastLine) = Controls("Ctrl_" & .HeaderRowRange(k))
        End If
    Next k
  
    .ListColumns("Mode_Paiement").DataBodyRange(LastLine) = IIf(Me.Ob_Mandat, "Mandat", "Régie")
End With
End Sub
 
en modifiant le code

VB:
Private Sub btnajouter_Click() ' Procédure permettant d'ajouter une nouvelle dépense
If Me.Ctrl_Date = "" Or Me.Ctrl_Fournisseur = "" Then Exit Sub

With Sheets("depenses").ListObjects("tabsource")
  
    .ListRows.Add
    LastLine = .ListRows.Count
    On Error Resume Next 'pour ignorer l'erreur sur la colonne "Mode_Paiement"
    For k = 1 To .ListColumns.Count
        'MsgBox .HeaderRowRange(k).Value
        If .HeaderRowRange(k).Value = "FACTURE" Then
            .ListColumns(k).DataBodyRange(LastLine) = IIf(Controls("Ctrl_" & .HeaderRowRange(k)), "X", "")
        Else
            .ListColumns(k).DataBodyRange(LastLine) = Controls("Ctrl_" & .HeaderRowRange(k))
        End If
    Next k
 
    .ListColumns("Mode_Paiement").DataBodyRange(LastLine) = IIf(Me.Ob_Mandat, "Mandat", "Régie")
End With
End Sub
Super merci.... cependant, je n'ai plus le format monétaire .... dans la colonne 'somme'.... Est-ce lié ?
 
Bonsoir
on pourrait aussi mettre ce genre de procédure !
VB:
Private Sub btnajouter_Click() ' Procédure permettant d'ajouter une nouvelle dépense
Dim LstRow As ListRow
If Me.Ctrl_Date = "" Or Me.Ctrl_Fournisseur = "" Then Exit Sub
With Range("tabsource").ListObject   
   Set LstRow = .ListRows.Add 'On crée une ligne que l'on récupére dans une variable
       With LstRow 'Avec cette Ligne
            .Range(1) = Me.Ctrl_Date 'On colle la valeur du Control dans la première cellule de cette Ligne
            .Range(2) = Me.Ctrl_Fournisseur 'Idem avec le deuxième
            .Range(3) = Me.Ctrl_Quoi 'etc
            .Range(4) = Me.Ctrl_Qui 'etc
            .Range(5) = Me.Ctrl_Compte
            .Range(6) = Me.Ctrl_Somme
            .Range(7) = IIf(Me.Ob_Mandat, "Mandat", "Régie")
            .Range(8) = Me.Ctrl_Facture
            .Range(9) = Me.Ctrl_N°_Mandat
            .Range(10) = Me.Ctrl_Observation
       End With
End With
End Sub
Bonne fin de Soirée.
Jean marie
 
Hello @ChTi160
effectivement, c'est aussi une bonne idée. par contre..si je ne dis pas de betise..
range(1) range(2)..... ca suppose que l'utilisateur ne s'amusera jamais à intervertir des colonnes... ??
ce que j'aime bien avec le Liscolumns("NomConne") c'est que justement.. on s'affranchit de la position de la colonne dans la table..
ok.. c'est sans doute pas souvent que les colonnes changent de place en cours de route..(encore que..) mais comme ca a été mon cas la première fois que j'ai utilisé des tables struct.. j'ai pris l'habitude dès le début..
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
738
Retour