Résultat de 2 listbox dans une seule cellule
Bonjour à tous,
voilà je ne sais pas si ce que je veux faire est possible. En fait j'ai un userForm avec 2 listBox
ListBox1(un seul choix possible): Pomme, Banane, Fraise, Pèche
ListBox2 (plusieurs choix possible): si dans la listBox1, j'ai pomme alors on a: Verte, Rouge, Jaune, Marron
Banane: Verte, Jaune, petite, grande
Fraise: Rouge, Verte, Blanche...
En dessous j'ai une textbox qui affiche mes choix de la Listbox2.
Mais j'aimerai que ma textBox (affichage_categories) affiche les deux à la suite par exemple: POMME: Rouge, Marron.
Voila le code que j'ai:
Private Sub listbox2_Change()
If listbox2.ListIndex <> -1 Then
affichage_categories = ""
sep = ""
For i = 0 To listbox2.ListCount - 1
If listbox2.Selected(i) = True Then
affichage_categories = affichage_categories & sep & listbox2.List(i)
If sep = "" Then sep = ", "
End If
Next i
End If
End Sub
Voila si quelqu'un a une solution à me proposer
Merci d'avance à tous!
Bonjour,
Le titre de ton sujet ne correspond pas à tes explicaitons. d'un coté tu parles de mettre le résultat de deux listbox dans une cellule et de l'autre le résultat de deux listbox dans une textbox...
affichage_categories et sep correspondent à quoi ??
Place ton fichier en ligne sans données confidentielles ce sera plus facile de voir ce que tu veux faire
A te relire
Bonjour Dan,
Merci d'avoir pris le temps de regarder mon message.
Oui je suis désolée, je me suis pas bien exprimée dans mon titre, c'est parce que après ce qui est dans ma textbox est renvoyé dans une cellule de ma BD.
Je te joins mon fichier pour que tu comprennes mon problème.
Sur la page d'accueil, il y a un bouton "ajouter une entreprise", s'ouvre alors un USF et dans l'onglet "Qualifications"
J'ai une première ListBox (Pomme, poire, Banane, Orange)
Puis une deuxième à cote qui apparait en fonction de la première.
Le même schéma est répété en dessous
Ce que je n'arrive pas à faire, c'est mettre en forme mes différentes sélection dans ma textbox pour renvoyer après dans une cellule.
Par exemple il faudrait que j'ai:
Pomme: rouge, verte
Orange: espagnol, sanguine, grosse
(en allant à la ligne entre pomme et orange)
Je ne sais pas si ce que je demande est possible, mais en tout cas merci beaucoup de m'aider!
Re,
Si j'ai bien compris ta demande, essaie avec ce code à ajouter dans ton USF
Private Sub liste_qualif2_change()
'Dan
Dim i As Byte
For i = 0 To liste_qualif2.ListCount - 1
If liste_qualif2.Selected(i) = True Then
affichage_qualif = affichage_qualif & ", " & liste_qualif2.List(i): Exit Sub
End If
Next
End SubJuste une remarque, je vois que tu utilises des Row source. Mon conseil est d'éviter cela dans les codes car ils apportent souvent des soucis. Cela peut être modifié mais bon à toi de voir.
Si ok, lors de ta réponse, clique sur le V vert à coté du bouton EDITER pourr cloturer le fil
Crdlt
Bonjour Dan,
Merciiii beaucoup pour ton code, ça fonctionne vraiment bien,
Mais je voulais savoir si c'est possible aussi d'ajouter un deuxième fruit avec ses caractéristiques à côté.
j'aimerai pouvoir sélectionner plusieurs fruits (ici 2) mais que chaque fruit soit séparé par un "retour à la ligne" ou "Entrée" par exemple:
Pomme, Rouge, Verte
Banane, jaune <-------- Sélection dans ma 3ème et 4ème listbox
Je ne sais pas si tu comprends...
Pour les Row Source, je n'ai pas trouvé d'autre solution car le fichier que je t'ai envoyé ne comporte pas les véritables données, il y a en fait plus de 200 possibilités de choix (et chaque choix est assez technique), j'ai pensé que les Row Source étaient le moyen le plus simple.
Encore merci Dan pour ta réponse,
Re,
Modifie les codes en les remplaçant pour ceux ci-dessous :
Private Sub UserForm_Initialize()
secteur.RowSource = "code!secteur_act"
liste_qualif1.RowSource = "code!qualifications"
End SubPrivate Sub liste_qualif2_change() 'textbox2
'Dan
Dim i As Byte
For i = 0 To liste_qualif2.ListCount - 1
If liste_qualif2.Selected(i) = True Then
affichage_qualif = affichage_qualif & ", " & liste_qualif2.List(i): Exit Sub
End If
Next
liste_qualif12.RowSource = "code!qualifications"
End SubDans la modifi ci-dessous, je n'ai pas mis le début du code. Mets ces lignes juste avant le END SUB
Private Sub liste_qualif12_Change() 'textbox3
'.....
'.....
'.....
If liste_qualif12.ListIndex <> -1 Then
For i = 0 To liste_qualif12.ListCount - 1
If liste_qualif12.Selected(i) = True Then
affichage_qualif = affichage_qualif & ", " & vbLf & liste_qualif12.List(i)
End If
Next i
End If
End SubPrivate Sub liste_qualif22_change() 'textbox4
'Dan
Dim i As Byte
For i = 0 To liste_qualif22.ListCount - 1
If liste_qualif22.Selected(i) = True Then
affichage_qualif = affichage_qualif & ", " & liste_qualif22.List(i): Exit Sub
End If
Next
End SubPour les Rowsource on peut aussi adapter mais d'abord vois si cela fonctionne comme ceci
A te relire
J'ai essayé avec les codes, au niveau de la mise en forme c'est vraiment ça que je voulais.
Par contre le problème, c'est que quand je sélectionne les qualifications (rouge, verte...), je ne peux pas les désélectionner, et je ne peux pas en sélectionner plusieurs en allant du haut vers le bas.
Par exemple, si je prend Pomme, et si je sélectionne Verte et Jaune,
Je vais avoir: Pomme, Verte, Verte <---- et pas jaune
Je suis débutante en VBA, du coup je ne sais pas du tout comment régler ce problème
En tout cas merci beaucoup Dan de m'aider
je te joins de nouveau le fichier avec les codes ajoutés
Re
je ne peux pas les désélectionner
Comme ton code est réalisé, il te faut sélectionner un par un et il te faut passer en mode single dans la sélection
- Va dans ton projet VBA
- Affiche ton USF puis appuie sur F4 pour avoir la fenetre "propriétés"
- Sélectionne la textbox listqualif2
- dans la liste déroulante "multisélect" choisis l'option "0 ...single"
A te relire
Re,
SUPER ça fonctionne vraiment bien maintenant
Bon je sais que normalement il faut un sujet par post mais je me permets de te demander autre chose toujours dans mon même fichier (j'ai créé un post mais il n'a eu aucune réponse... peut être que c'est pas possible aussi ce que je demande)
Voila dans mon fichier, j'ai un autre UserForm mais de recherche cette fois, et je n'arrive pas à trouver un code pour filtrer par n° de SIRET (filtre de type contient)
J'ai ce type de code pour les autres recherches:
Private Sub recherche_nom_entreprise_change()
ActiveSheet.Range("A1:AI500").AutoFilter Field:=1, Criteria1:="*" & recherche_nom_entreprise.Value & "*"
End Sub
Encore Merci Dan pour tes réponses!
re,
et je n'arrive pas à trouver un code pour filtrer par n° de SIRET (filtre de type contient)
dans le fichier il n'y aucune donnée donc pas facile en lançant l'USF de savoir dans quelle rubrique va le SIRET
C'est quoi comme info et cette info est-elle dans l'USF ou pas ?
A te relire
Re,
Je te joins le fichier avec quelques données,
La recherche par Siret se fait dans le USF de recherche (page accueil, bouton rechercher, et c'est en haut 3ème case)
Je pense que le problème vient que le n°de Siret est sous forme numérique... Peut être que le filtre à utiliser n'est pas la même.
Merci beaucoup Dan de répondre à mes questions.
re
Je suis débutante en VBA, du coup je ne sais pas du tout comment régler ce problème
Là à voir les codes et le fichier constitué, j'ai peine à croire cela ou alors tu t'es fait aidée pour faire le fichier.
Pour la recherche sur Siret, je te propose une solution pour un autre moyen que le filtre automatique.
utilise ce code :
Private Sub recherche_siret_Change()
'Macro Dan
Dim i As Long
With Sheets("bd")
.Range("E1:E500").EntireRow.Hidden = False
If Me.recherche_siret.Value = "" Then .Range("E1:E500").AutoFilter Field:=5: Exit Sub
For i = .Range("E" & Rows.Count).End(xlUp).Row To 2 Step -1
If Range("E" & i).Find(Me.recherche_siret.Value, LookIn:=xlValues) Is Nothing Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End With
End SubAttention que je vois que toutes tes plages définies dans tes codes sont limitées à 500 lignes. A voir si c'est suffisant
Concernant ton fichier, tu peux aussi modifier le code ci-dessous dans l'USF Recherche, cela évitera d'utiliser le Rowsource
Private Sub UserForm_Initialize()
recherche_secteur.List() = Sheets("code").Range("secteur").Value
recherche_secteur.ListIndex = -1
With Sheets("bd")
If .AutoFilterMode Then
.ShowAllData
Else: .Range("A1").AutoFilter
End If
End With
End SubIl y avait encore d'autres choses que tu pourrais changer notamment dans la disposition des données en feuille code mais bon vois si la solution de tri correspond à tes attentes.
A te relire
Re Dan,
Oui je me suis faite un peu aidée quand même pour constituer mon fichier mais après tous mes codes sont pratiquement les mêmes...
Du coup, j'ai essayé le code que tu m'a envoyé pour le tri de n° de siret, je l'ai copier-coller intégralement mais il ne fonctionne pas, je sais pas si je devais faire des modifs dessus, ou s'il y a trop de ligne (environ 150) ou autre chose.
Par contre j'ai essayé les autres codes pour les "RowSource", je dois t'avouer que je ne sais pas vraiment ce que ça à changer mais pour moi tout fonctionne super bien
J'ai une dernière question, je ne veux pas que tu me donnes le code, mais j'aimerai savoir si c'est difficile, ou long, ou pas possible, de créer une macro qui imprime ma base de données sous la forme d'un annuaire avec une page par entreprise, en respectant une certaine mise en forme (pour le moment j'utilise le publipostage pour imprimer mais j'aimerai savoir si j'avais une autre possibilité... à mon niveau je dirai).
Je te remercie encore Dan pour l'ensemble de tes réponses qui m'ont beaucoup aidées.
re,
Du coup, j'ai essayé le code que tu m'a envoyé pour le tri de n° de siret, je l'ai copier-coller intégralement mais il ne fonctionne pas, je sais pas si je devais faire des modifs dessus, ou s'il y a trop de ligne (environ 150) ou autre chose
Avant de poster le code j'ai vérifié et cela fonctionne mais en prenant des chiffres consécutifs dans le champ (donc par exemple 789 ou 123).
Dis moi ce que tu fais que je puisse reproduire l'erreur ou ce qui ne fonctionne pas pour toi
A te relire
Re,
Je te joins de nouveau le fichier, j'ai ajouter beaucoup de n° de numéro de SIRET. En fait je ne sais pas comment t'expliquer le problème, c'est lorsque l'on tape plus de 2 chiffres que ça ne fonctionne pas et lorsque l'on en rajouter toute la liste réapparaît et après plus rien...
Bonne journée
Re,
Le fichier ne contient pas le code que je t'ai donné au sujet de la private sub initialize. J'ai aussi rajouté deux instructions dans le code Siret afin que l'écran de "clignote" pas
Vois le fichier joint et essaie
A te relire
Re,
Merci pour le code en effet maintenant l'écran ne clignote plus! Pour la recherche elle ne peux se faire que sur des séquences de 3 chiffres lorsque l'on en met plus ça ne fonctionne plus...
Oui en fait ce fichier n'est pas mon "vrai" fichier il s'agit d'une copie qui ne comporte que certains éléments. j'ai ajouté les codes à mon autre fichier
Encore merci pour ta réponse!
Re,
3 chiffres lorsque l'on en met plus ça ne fonctionne plus...
Quelques questions :
- Est-ce que tu utilises le point lorsque tu mets le chiffre dans la rubrique Siret ?
- dans ton fichier, tes chiffres sont formatés en euro, pourquoi ne pas les mettre au format nombre --> #.###0 ??
essaie aussi en mettant un * entre les chiffres lorsque tu veux combiner
A te relire
Re,
Dan a écrit :- Est-ce que tu utilises le point lorsque tu mets le chiffre dans la rubrique Siret ?
Nan, je ne mets pas de point, j'ai essayé avec et sans espace.
Dan a écrit :essaie aussi en mettant un * entre les chiffres lorsque tu veux combiner
Du coup, si je mets une * à la place de l'espace ça fonctionne bien, mais je ne trouve pas ça très intuitif pour les personnes qui vont utiliser cette BD.
En tout cas, je te remercie vraiment beaucoup Dan pour toutes ces réponses qui m'ont bien aidé
re
Du coup, si je mets une * à la place de l'espace ça fonctionne bien, mais je ne trouve pas ça très intuitif pour les personnes qui vont utiliser cette BD.
Le caractère * est pourtant bien connu de tous les programmes et des OS lorsque l'on ne trouve pas ce qui est recherché.
Raison pour laquelle je proposais cette solution qui fonctionnera aussi dans les autres rubriques.
Nan, je ne mets pas de point, j'ai essayé avec et sans espace.
Dans ce cas, la solution est de formater toutes cellules au format "nombre" sans cocher la case "utilisation séparateur milliers". Là plus de problème mais le chiffre ne comporte plus de points séparateur; ce qui est aussi moins lisible visuellement dans la base de données.
A te relire