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

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

  • TEST COMPTA_Cp4 v3.xlsm
    28.2 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
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...
 

halecs93

XLDnaute Impliqué
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:

halecs93

XLDnaute Impliqué
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:

vgendron

XLDnaute Barbatruc
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
 

halecs93

XLDnaute Impliqué
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é ?
 

ChTi160

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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..
 

Discussions similaires

Réponses
5
Affichages
579

Statistiques des forums

Discussions
312 756
Messages
2 091 756
Membres
105 062
dernier inscrit
Ret78