Bonjour,

Dans "mon" programme vba de commande de produits, dés lors que le nom du client est saisi, c'est qu'il y a manifestement des produits à commander.

Les produits sont à sélectionner dans une "listbox multiselect" installée sur un userform.

Une fois les produits sélectionnés, je "valide" cette sélection et je déclenche, un "inputbox" pour collecter les quantités de chacun des produits. Quand tout est complété, je passe au client suivant.

Mais, si aucun produit n'est sélectionné dans la listbox, je passe directement au client suivant. Pour moi, ceci n'est pas acceptable et je souhaiterais "obliger" à la sélection d'au moins un produit. J'ai donc écrit le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Private Sub cmdValider_Click()
Dim Quantite As Variant
Dim Client As String
Dim LastLig As Long, Lig As Long
Dim LastCol As Integer, Col As Integer
Dim Produit As String
Dim Compteur As Single
Dim ComValable As String
Sheets("Commande").Select
        Client = Label2.Caption
        Produit = ListBox1.List(Compteur)
            If ListBox1.Selected(Compteur) = False Then
                MsgBox "Vous devez d'abord sélectionner les produits dans la colonne de gauche", vbCritical + vbOKOnly, " Produit non sélectionné"
                Exit Sub
                Call cmdValider_Click
            End If
        For Compteur = 0 To (ListBox1.ListCount - 1)
            If ListBox1.Selected(Compteur) = True Then
                    With Sheets("Commande")
                        LastCol = .Cells(3, .Columns.Count).End(xlToLeft).Column
                        Set c = .Range(.Cells(3, 3), .Cells(3, LastCol)).Find(Client, lookat:=xlWhole)
                            If Not c Is Nothing Then
                                Col = c.Column                                      'La Colonne
                                Set c = Nothing
                                LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
                                Set r = .Range("A4:A" & LastLig).Find(Produit, lookat:=xlWhole)
                                    If Not r Is Nothing Then
                                        Lig = r.Row                                     'La Ligne
                                        Set r = Nothing
                                        Quantite = InputBox("Combien de " & UCase(Produit) & Chr(10) & " commandée par " & Client, "Indication des quantités", Quantité)
                                            If Quantite = "" Then
                                                MsgBox "Vous devez indiquer une quantité", vbCritical + vbOKOnly, "Quantité non idiquée"
                                                Quantite = InputBox("Combien de " & UCase(Produit) & Chr(10) & " commandée par " & Client, "Indication des quantités", Quantité)
                                            End If
                                        .Cells(Lig, Col).Value = Quantite
                                    End If
                            End If
                    End With
            End If
        Next Compteur
    autreclient = MsgBox("Autre inscription ou modification de client ?", vbQuestion + vbYesNoCancel + vbDefaultButton1, "Inscription d'un autre client")
        If autreclient = vbYes Then
            For Compteur = 0 To (ListBox1.ListCount - 1)
            ListBox1.Selected(Compteur) = False
            Next Compteur
            cmdValider.Visible = False
            Label2.Visible = False
            Label2.Caption = ""
            Label3.Visible = False
            Action = MsgBox("Selon le cas, (re)cliquez sur 'nouveau client' ou sur 'modification client'", vbOKOnly, "Poursuite des commandes")
        ElseIf autreclient = vbNo Or vbCancel Then
            MsgBox "Vous allez pouvoir consulter le bon de commande." & Chr(10) & Chr(10) & "Regardez-le attentivement puis cliquez sur la petite croix rouge en haut à droite et, enfin, sur l'écran suivant, répondez à la question posée.", vbOKOnly, "Vérification des commandes Première étape"
            Application.ScreenUpdating = False
            Unload Me
            Unload UserFormEC
            Worksheets("Commande").PrintPreview
            Application.ScreenUpdating = True
            UserForm1.Show
            Exit Sub
        End If
Si la procédure réagit bien dans un premier temps (message d'obligation et réappel de la procédure), j'ai ensuite des erreurs sur la prise en compte des produits. Exemple : je suis obligé de commander au moins sur le premier item de la listbox; pour le client suivant, je tombe indéfiniment sur la même obligation. Bref : c'est le bazard !

Pourriez-vous m'aider sur ce point : comment obliger à cliquer sur un item de ma listbox ?

Je vous en remercie par avance.
Cordialement,
Maurice