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

cgpa

XLDnaute Occasionnel
Re
tu avais résolu ton problème avec le Colonnes 10 et 11
jean marie
Non, j'y ai pourtant passé la soirée en recherches. C'est compliqué quand on n'a pas eu de cours de programmation. C'est pour cela que j'ai simplifié en utilisant une seule fois la listbox3 (celle des sélections de crudités) et en ajoutant plus de solutions dans la listbox 5. C'est aussi plus facile à l'usage d'encodage et surtout pour la présentation des étiquettes de publipostage (je n'ai pas de texte inutile qui apparait). Avec votre dernière solution, c'est top. Il me reste à expliquer au collègue l'usage de power query pour le tri avant fusion vers word, car malgré le convertisseur de date, cela plante encore de façon épisodique vers word (format anglais - français).
 

ChTi160

XLDnaute Barbatruc
Re
je pensais d'après ce que j'avais compris avoir répondu a la demande
Coller les données dans deux Colonnes différentes sans que les données de la Colonne 10 ne se retrouvent dans la Colonne 11 !
ce n'était donc pas ce qu'il fallait comprendre Lol
jean marie
 

cgpa

XLDnaute Occasionnel
Re
je pensais d'après ce que j'avais compris avoir répondu a la demande
Coller les données dans deux Colonnes différentes sans que les données de la Colonne 10 ne se retrouvent dans la Colonne 11 !
ce n'était donc pas ce qu'il fallait comprendre Lol
jean marie
Si, vous aviez tout à fait bien compris, et les deux listbox renvoient bien dans les bonnes colonnes. Et s'il n'y a pas de sélection effectuée, cela ne renvoie rien. C'est correct. Mais l'astuce était que pour plus de facilité au publipostage, j'avais ajouté un morceau de texe entre guillemets avec le renvoi de la valeur directement dans le code vba. Pour l'une, le texte était "avec mais sans " + la valeur de la sélection de la listbox 3, dans l'autre le texte était "sans mais avec " + la sélection de la listbox 8. Et avec ces morceaux de texte que j'avais ajoutés dans le vba, même s'il n'y avait pas de sélection dans l'une des listbox, ce texte apparaissait (normal). Je voulais donc chercher à conditionner le renvoi: le texte apparait s'il y a une sélection dans la listbox, sinon pas.
Mais finalement, comme expliqué tout à l'heure, j'ai allégé le formulaire en supprimant une des deux listbox (qui avaient de toutes façons la même plage source) et en ajoutant le texte que j'avais mis dans le code vba dans deux choix supplémentaires pour la listbox 5 ("avec crduités mais san.." et "sans crudités mais avec..". C'est aussi plus facile pour l'encodage et pour le publipostage dans word, c'est plus lisible. Et avec votre code pour masquer la listbox 3 si 2 items ne sont pas activés dans la listbox 5, c'est parfait. Un tout grand merci pour votre aide: nous allons pouvoir continuer à améliorer notre fichier de travail qui est plus étoffé que celui allégé. Merci!
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 678
dernier inscrit
arno12345678