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 Sub

Juste 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 Sub
Private 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 Sub

Dans 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 Sub
Private 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 Sub

Pour 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 Merci beaucoup Dan!

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 Sub

Attention 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 Sub

Il 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 et encore merci!

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

Rechercher des sujets similaires à "resultat listbox seule"