Microsoft 365 Item dans USERFORM

eric72

XLDnaute Accro
Bonjour à tous,
J'ai crée un Userform avec une listbox pour afficher mes devis, mais seul la date s'affiche dans la listbox et je ne comprends pas ou est l'erreur.
Cela concerne l'onglet "Prestations".
Y a t il mon sauveur parmi vous?
Merci pour votre aide
Eric
 

Pièces jointes

  • test.xlsm
    603.5 KB · Affichages: 34
C

Compte Supprimé 979

Guest
Bonjour Eric72

Le problème est juste là, puisque la propriété n'est pas définie dans le code ;)
2021-03-29_12h33_04.png
 

patricktoulon

XLDnaute Barbatruc
Bonjour
il faudrait déjà mettre ta listbox a 7 colonnes pour que ça marche ;)

de plus
ceci génère une erreur si txtQte est vide
Me.LstItem.List(NbItem, 6) = Me.TxtPrixVenteUnitaire * Me.TxtQte 'On charge le prix vente total dans la liste
perso je met TxtQte à 1 en dur tu le change si besoins comme ça pas de soucis

de plus
tu n'a pas prévu de changer d'avis et donc pouvoir supprimer une ligne dans la listbox

de plus
tu n'a pas prévu d'arranger le coloumnwidths de la listbox
une listbox de 3 kilomètre de large pour au final 6 donnée

de plus
si tu oubli de choisir le nom ça envoie quand même dans la liste box

bon tout ca vu ca donne ceci
 

Pièces jointes

  • test.xlsm
    570.5 KB · Affichages: 10
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ah autant pour moi c'est les sources
reprendre mon exemple et
VB:
' Ajout des lignes au devis
Private Sub BtnAjouter_Click()
LstItem.ColumnWidths = "50;80;70;100;50;40;40"
If CbNomClient.Value = "" Then MsgBox "choisissez un client": Exit Sub
    'Déclaration des variables
    Dim NbControles As Integer
    Dim NbItem As Integer

    'Affectation des variables
    NbControles = 6
    Me.LstItem.AddItem TxtDate: TxtDate = ""       'Date du devis
    NbItem = Me.LstItem.ListCount - 1   'on compte le nombre d'items dans la liste
    ' On charge les items dans la liste
    Me.LstItem.List(NbItem, 1) = Me.LblNumDevis: LblNumDevis = ""               'On charge le numéro dans la liste
    Me.LstItem.List(NbItem, 2) = Me.CbNomClient: CbNomClient = ""           'On charge le nom dans la liste
    Me.LstItem.List(NbItem, 3) = Me.CbDesignation: CbDesignation = ""          'On charge la désignation dans la liste
    Me.LstItem.List(NbItem, 4) = Me.TxtQte: TxtQte = ""        'On charge la quantité dans la liste
    Me.LstItem.List(NbItem, 5) = Me.TxtPrixVenteUnitaire: TxtPrixVenteUnitaire = ""               'On charge le prix vente unitaire dans la liste
    Me.LstItem.List(NbItem, 6) = Val(Me.TxtPrixVenteUnitaire) * Val(Me.TxtQte)    'On charge le prix vente total dans la liste

End Sub
Private Sub CommandButton1_Click()
If LstItem.ListIndex > -1 Then With LstItem: .RemoveItem .ListIndex: End With
End Sub

cela dit si devis avec plusieurs lignes peut etre garder le nom client plutot que de le re choisir
ça implique un effacement post production de la liste
on dénote déjà là ergonomique ment parlant une coquille conceptuelle
 

patricktoulon

XLDnaute Barbatruc
re
on peut même corrigé les oublis en une seule fois en bloquant l' ajout de ligne si tout n'est pas rempli tout simplement
Code:
' Ajout des lignes au devis
Private Sub BtnAjouter_Click()
    Dim critere As Boolean
    critere = CbNomClient <> "" And CbDesignation <> "" And TxtPrixVenteUnitaire <> "" And TxtDate <> ""
    If Not critere Then MsgBox "toute les donnée ne sont pas dument remplies": Exit Sub
    LstItem.ColumnWidths = "50;80;70;100;50;40;40"
    If CbNomClient.Value = "" Then MsgBox "choisissez un client": Exit Sub
    'Déclaration des variables
    Dim NbControles As Integer
    Dim NbItem As Integer

    'Affectation des variables
    NbControles = 6
    Me.LstItem.AddItem TxtDate:    'Date du devis
    NbItem = Me.LstItem.ListCount - 1   'on compte le nombre d'items dans la liste
    ' On charge les items dans la liste
    Me.LstItem.List(NbItem, 1) = Me.LblNumDevis:    'On charge le numéro dans la liste
    Me.LstItem.List(NbItem, 2) = Me.CbNomClient:    'On charge le nom dans la liste
    Me.LstItem.List(NbItem, 3) = Me.CbDesignation:    'On charge la désignation dans la liste
    Me.LstItem.List(NbItem, 4) = Me.TxtQte:    'On charge la quantité dans la liste
    Me.LstItem.List(NbItem, 5) = Me.TxtPrixVenteUnitaire:    'On charge le prix vente unitaire dans la liste
    Me.LstItem.List(NbItem, 6) = Val(Me.TxtPrixVenteUnitaire) * Val(Me.TxtQte)    'On charge le prix vente total dans la liste

    'TxtDate = ""
    CbDesignation = ""
    'CbNomClient = ""
    'LblNumDevis = ""
    TxtQte = ""
    TxtPrixVenteUnitaire = ""
End Sub


Private Sub CommandButton1_Click()
    If LstItem.ListIndex > -1 Then With LstItem: .RemoveItem .ListIndex: End With
End Sub

Private Sub CbDesignation_Change()
'permet de faire la recherche verticale pour avoir le prix de vente unitaire de la désignation
    If CbDesignation <> "" Then Me.TxtPrixVenteUnitaire = Application.WorksheetFunction.VLookup(Me.CbDesignation, Feuil2.Range("a:j"), 10)
End Sub


' Ouverture du formulaire avec date du jour et numéro de devis automatique
Private Sub UserForm_Initialize()
    Me.TxtDate = Date
    Me.LblNumDevis = Feuil8.Range("n2")
End Sub
 

Statistiques des forums

Discussions
312 206
Messages
2 086 221
Membres
103 158
dernier inscrit
laufin