Transférer tout un ListBox dans une seule cellule

Bonjour à toutes et à tous,

je me casse les dents depuis plusieurs jours sur quelque chose qui parait évident : transférer toutes les lignes d'un ListBox dans une seule cellule.

Ceci fonctionne, mais ne me copie qu'une seule ligne :

Private Sub CmdENREGISTRER_Click()

Dim I As Long

For I = 0 To Me.ListBox1.ListCount - 1

Sheets("BASE").Range("A2").Value = Me.ListBox1.List(I)

Next I

End Sub

J'ai essayé avec fmMultiSelectMulti, ou fmMultiSelectExtended, mais c'est toujours le même résultat.

J'ai aussi essayé avec :

With ListBox1

Sheets("BASE").Range("A2").Value = .List

End With

Et toutes sortes de combinaisons, mais rien n'y fait.

Merci d'avance à celui ou celle qui pourra m'apporter la solution.

Cordialement

Pedro89

Bonjour

Un essai à tester. Te convient-il ?

Bye !

48classeur1-v1.xlsm (25.93 Ko)

Bonjour,

merci pour cette proposition, mais transposé dans mon projet ça ne marche pas parce que je pars d'une ListBox dans un UserForm (j'ai omis de le signaler) qui comprend plusieurs lignes que je souhaiterais retrouver à l'identique dans la cellule (càd superposées).

Pouvez-vous m'aider?

bonsoir,

essai :

   Dim st As String
   Dim i As Integer

   For i = 0 To ListBox1.ListCount
     st = st & Me.ListBox1.List(I) & vbLf
   Next
Sheets("BASE").Range("A2").Value .Value = st 

Bonsoir,

Tu as le problème sous le nez !

Sheets("BASE").Range("A2").Value = Me.ListBox1.List(I)

Si tu remplace chaque Item affecté par le suivant, en fin de boucle tu n'auras que le dernier !

Cordialement.

Bonsoir MFerrand,

Je suis désolé, mais je ne comprends pas. Je pensais que la variable "I" permettait au contraire de sélectionner toutes les lignes et non pas l'une après l'autre. Alors comment faire une sélection globale de toutes lignes ? puisque là est le problème.

J'ai essayé beaucoup de choses ces derniers jours, sans résultat

Cordialement

Tu n'as rien à sélectionner, une boucle te permet de les appeler l'une après l'autre, mais il les mettre à la suite en les séparant par un saut de lignes... (cela t'a été dit plus haut...)

Mieux utilise une variable :

For i = 0 To ListBox1.ListCount - 1
    liste = liste & Chr(10) & ListBox1.List(i)
Next i
liste = Replace(liste, Chr(10), "", 1, 1) 'pour enlever le premier saut de ligne
cellule = liste
cellule.WrapText = True

Cordialement.

Bonsoir à tous,

Un essai sans boucle pour mettre la liste dans la cellule C2 de Feuil1:

   Sheets("Feuil1").Range("C2") = Join(Application.Transpose(ListBox1.List), vbLf)
   Sheets("Feuil1").Range("C2").WrapText = True

Bonjour à tous,

Réponse à MFerrand,

je ne sais pas comment utiliser le code que vous avez envoyé, càd où mettre l'adresse de la cellule de destination Sheets("BASE").Range("A2"). Je suppose que "liste" et "cellule" sont des variables à annoncer (je suis débutant )

Merci pour votre aide

pedro89


Réponse à MaPoire,

merci pour votre proposition, mais je ne pars pas d'un tableau ,mais d'une ListBox dans un UserForm.

Cordialement

pedro89

Bonjour à tous

Une autre proposition, inspirée des autres réponses :

Bye !

39classeur1-v2.xlsm (28.02 Ko)

Bonjour pedro89,

pedro89 a écrit :

(...) merci pour votre proposition, mais je ne pars pas d'un tableau ,mais d'une ListBox dans un UserForm.

Où voyez vous un tableau dans le code du bouton "Valider" de UserForm1 ?!??!!?

Le code n'utilise que la ListBox1 via sa liste: ListBox1.List.

nota : si vous appelez tableau les cellules de A2 à A15, c'est juste pour remplir la ListBox de quelques éléments (puisque aucun fichier n'a été fourni par vous!)

Bonjour à tous

On a en effet du mal à comprendre pedro.

Peut-être veut-il transférer une liste de ListBox d'UserForm dans une liste déroulante de cellule.

Si c'est ça, voici un essai à tester.

Bye !

20classeur1-v3.xlsm (29.93 Ko)

Bonjour à tous, gmb

gmb a écrit :

Bonjour à tous

On a en effet du mal à comprendre pedro.

Peut-être veut-il transférer une liste de ListBox d'UserForm dans une liste déroulante de cellule.

Si c'est ça, voici un essai à tester.

Bye !

Dans ce cas, on peut aussi utiliser:

Private Sub CommandButton2_Click()
    With Range("C2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Join(Application.Transpose(ListBox1.List), ",")
    End With
End Sub

@MaPoire

C'est encore mieux. Merci : tu m'as appris quelque chose.

Bye !

Bonjour,

Le bout de code que j'ai improvisé en réponse ne faisait que reprendre la procédure que tu citais dans ton premier post, cellule désignait la cellule dans laquelle tu affectais ta liste... Je te la reprends en entier et plus finie :

Private Sub CmdENREGISTRER_Click()
    Dim i%, liste
    For i = 0 To ListBox1.ListCount - 1
        liste = liste & Chr(10) & ListBox1.List(i)
    Next i
    liste = Replace(liste, Chr(10), "", 1, 1)
    With Sheets("BASE").Range("A2")
        .Value = liste
        .WrapText = True
    End With
End Sub

Ce que tu vas également retrouver dans la réponse de gmb.

Quant à l'intéressante suggestion de MaPoire, elle ne t'affecte ton tableau (car tu as bien un tableau : c'est ListBox1.List !) elle le transforme en chaîne en séparant chaque élément par un saut de ligne et affecte cette chaîne...

Cordialement et bonne journée à tous.

Bonsoir gmb,

Merci pour votre proposition.

Votre code fonctionne bien dans votre exemple, mais chez-moi il demande de déclarer les variables et retourne une erreur 13 "incompatibilté de type", quelque soit le type de variable que j'utilise.

Par ailleurs, la méthode Array("A", "B", ...) me semble difficile à mettre en oeuvre car la ListBox est remplie à partir d'un choix (AdItem) sur pas moins de 392 propositions listées dans un Userform multipage.

Cordialement

pedro89

Bonsoir gmb

votre classeur1 v2.xlsm fonctionne bien, mais quand j'essaie de l'appliquer à mon classeur il me sort une erreur 13, incompatibilité de type.

Par ailleurs le mode Array("A", "B", ...) est difficilement applicable dans mon cas : la ListBox est constituée d'un recueil de données triées à partir de près de 400 items à pointer sur un UserForm multipage. Ces données sont rassemblées là pour être ensuite imprimées dans une liste sur un autre UserForm (mais je dois en garder une trace dans la base).

Cordialement

pedro89


A MFerrand,

Merci, mais Dim i%, liste me donne l'erreur : déclaration existante dans la portée en cours.

pedro89

Bonsoir MFerrand,

Désolé, je n'avais pas vu qu'il y avait déjà une déclaration de variable "i" plus haut.

Mais ça MARCHE Mille merci !

Y a-t-il une possibilité de remettre le dentifrice dans le tube ? c'est à dire à partir des lignes d'une ListBox que j'avais remplie en cochant des cases dans l'UserForm de recocher ces cases ultérieurement, de la manière dont on réalimente des TexBox ou des ComboBox à partir des cellules d'un tableau (For i = 0 to...) ?

Merci encore

pedro89

Rechercher des sujets similaires à "transferer tout listbox seule"