Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 utiliser 2 listbox avec une même source dans un userfom

cgpa

XLDnaute Occasionnel
Bonjour le forum,

J'ai créé un petit fichier de ventes pour mon école et encore merci à ceux qui m'ont aidé. Il fonctionne à merveille (but = publipostage pour étiquettes à coller sur emballage de sandwiches selon les ventes et clients).

L'usage me demande de modifier le userform2 selon le choix de crudités des clients. Avec ou sans crudités est facile et je savais sélectionner les crudités à supprimer. Mais certains me disent "sans crudités mais avec..." et cela complique tout. J'ai donc revu mon formulaire. Et là, ça coince pour une erreur de programmation.
J'ai un souci dans mon userform2 qui doit être facilement identifié pour qui sait rédiger un code (je balbutie toujours et j'apprends de façon empirique): j'ai dupliqué la listbox 3 (sélection de crudités) pour avoir deux listbox dans le même userform (listbox 3 et listbox 8). Chaque listbox a la même plage source (choix de crudités) mais doit renvoyer le résultat de la sélection mutliple de chaque litsbox dans une colonne respective pour chacune ("avec crudités" mais sans le choix sélectionné, ou "sans crudité" mais avec l'ajout du choix sélectionné). Mais lorsque j'active le formulaire, le choix effectué dans la listbox 8 se place au bon endroit (colonne K), par contre le problème se trouve dans le choix du listbox3 qui est renvoyé à la fois sur la colonne J (correct) et sur la colonne K (incorrect). Pourquoi ce choix est-il renvoyé sur 2 colonnes? Je pense que le problème se trouve avec la ligne Dim valeur As String que j'utilise mal dans le cas de deux listbox.
L'idéal aurait été de mettre des conditions (du style si "sans crudités" activé alors sélection possible dans listbox8, et si "avec crudité" est activé, alors choix possible dans listbox3), mais comme je ne suis pas très doué en lignes de codes, je vais au plus simple et ai décidé de dupliquer les listbox.
Quelqu'un peut-il corriger mon code, que je comprenne où est mon erreur? Merci beaucoup. Voici en pj mon fichier allégé de toute donnée personnelle (pour respecter le RGPD) et ci dessous le code. Merci!

With Me.ListBox3
Dim valeur As String

For i = 0 To ListBox3.ListCount - 1
If .Selected(i) = True Then
valeur = valeur & .List(i) & " "
End If
Next i
Cells(ligne, 10).Value = valeur 'affiche en colonne 10 = colonne J la sélection multiple de la listbox3

End With


'et pour le choix multiple de la ListBox8 (merci Rossoneri83): (listbox8 = la sélection des "sans_mais_avec"

With Me.ListBox8
'Dim valeur As String ' si ne dé-selectionne pas ici, le userform ne fonctionne pas

For i = 0 To ListBox8.ListCount - 1
If .Selected(i) = True Then
valeur = valeur & .List(i) & " "
End If
Next i
Cells(ligne, 11).Value = valeur 'affiche en colonne 11 = colonne K la sélection multiple de la listbox8

End With
 

Pièces jointes

  • Vente sandwiches allégé.xlsm
    458.3 KB · Affichages: 12

ChTi160

XLDnaute Barbatruc
Bonsoir cgpa
pas sur d'avoir compris ! Lol
mais ne serait ce pas le fait que la variable Valeur ne soit pas vidée entre les deux Boucles ?
VB:
With Me.ListBox3
Dim valeur As String
For i = 0 To ListBox3.ListCount - 1
If .Selected(i) = True Then
valeur = valeur & .List(i) & " "
End If
Next i
Cells(ligne, 10).Value = valeur 'affiche en colonne 10 = colonne J la sélection multiple de la listbox3
End With
'Ici
 Valeur=""
'et pour le choix multiple de la ListBox8 (merci Rossoneri83): (listbox8 = la sélection des "sans_mais_avec"
With Me.ListBox8
'Dim valeur As String ' si ne dé-selectionne pas ici, le userform ne fonctionne pas
For i = 0 To ListBox8.ListCount - 1
If .Selected(i) = True Then
valeur = valeur & .List(i) & " "
End If
Next i
Cells(ligne, 11).Value = valeur 'affiche en colonne 11 = colonne K la sélection multiple de la listbox8
End With
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
peux tu dire ce qui ne fonctionne pas ?
Cela ne devrait pas poser d'incompatibilté Mais le code ne fonctionne pas. Savez-vous comment utiliser deux listbox dans un userform
VB:
End With
'Ici
 Valeur="" '<----------------------------On vide la variable "Valeur"
'et pour le choix multiple de la ListBox8 (merci Rossoneri83): (listbox8 = la sélection des "sans_mais_avec"
With Me.ListBox8
moi j'ai utilisé ton fichier je n'ai pas eu de problème .
il n'y a pas d'incompatibilité a utiliser deux ListBox ou plus dans un même Userform
Tu peux aussi utiliser deux variables 1 pour chaque Boucle Valeur_1 et Valeur_2
jean marie
 
Dernière édition:

cgpa

XLDnaute Occasionnel
Merci Jean-Marie!!! Je n'avais pas lu la partie pour vider le code valeur. En ajoutant ce morceau de code, cela fonctionne!!! J'ai passé un temps de dingue depuis cet après-midi à chercher sur énormément de pages. Et en quelques mots vous avez la solution. Respect, et remerciements.
 

cgpa

XLDnaute Occasionnel
Encore merci. Ma finalité est un publipostage dans word. Afin d'alléger la présentation dans word (je ne désire que soit le texte de la listbox 3, soit celui de la listbox 8), il faudrait que je mette une condition pour que la sélection des listobx 3 et 8 aie un texte précis avant la sélection faite dans la listbox. J'ai adapté le code avec ce texte. Malheureusement, si je ne sélectionne rien en listbox 3 ou 8, mon adaptation renvoie quand même le texte que j'ai mis dans le code sur la feuille. Y a-t-il une possibilité de lui dire que si je ne sélectionne rien dans la listbox 3, le texte encodé dans le code de la listbox 3 ne doit pas apparaitre dans la colonne 10=J? Idem avec la listbox 8?
 

Pièces jointes

  • Vente sandwiches allégé.xlsm
    461.5 KB · Affichages: 8

cgpa

XLDnaute Occasionnel
Re
Pas compris mais Si la boucle sur la listbox3 ne ramène rien , il n'y aura rien en colonne 10
Jean marie
bonjour Jean-Marie,
Je conçois que ma demande aurait pu être plus claire. J'ai simplifié le fichier.
Est-il possible de dire en vba que la listbox 3 ne peut être activée que si seulement l'un des deux derniers choix de la listebox5 est d'abord activé? J'ai essayé avec la fonction lock, mais cela ne va pas. Avez-vous une idée?
 

Pièces jointes

  • Vente sandwiches allégé.xlsm
    370.3 KB · Affichages: 17

ChTi160

XLDnaute Barbatruc
Bonjour cgpa
Bonjour le Fil ,le Forum
ce que j'ai mis :
On affiche la ListBox3 si et seulement si sélection d'un des deux derniers Item de la Listbox 5
VB:
Private Sub ListBox5_Click()
With Me
    .ListBox3.Visible = Not .ListBox5.ListIndex < 2
End With
End Sub
j'ai aussi ajouter dans le
Private Sub UserForm_Initialize()
' On masque la ListBox3
VB:
Me.ListBox3.Visible = False

jean marie
 
Dernière édition:

cgpa

XLDnaute Occasionnel
Merci beaucoup Jean-Marie, cela fonctionne parfaitement! D'expérience il arrive que le client change d'avis en dernière seconde pendant la commande (les élèves sont parfois incertains). Avec votre code (qui correspond à ma demande), si j'ai d'abord cliqué sur l'un des deux derniers items de la listbox 5, je peux effectuer une sélection dans la listbox 3 (possible dans ce cas). Mais si le client change d'avis et que je reviens sur le premier choix de la listbox 5 par exemple, la listbox 3 s'efface (ce qui est normal). Mais lors de l'envoi vers la feuille, elle garde la sélection préalablement faite dans la listbox 3. Y a-t-il moyen d'éviter cela, ou faut-il obligatoirement désélectionner la sélection de la listbox3?
 

ChTi160

XLDnaute Barbatruc
Re
ce qui semble répondre a ta demande
VB:
Private Sub ListBox5_Click()
With Me
    With .ListBox3
         .Visible = Not Me.ListBox5.ListIndex < 2
        For i = 0 To .ListCount - 1
             .Selected(i) = False 'on désélectionne la liste
        Next
    End With
End With
End Sub
jean marie
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…