Concatener tous les items d'un listbox dans une cellule

Bonjour, le titre me semble assez explicite.

Voici un bout de code que j'ai essayé mais sans succès:

Private Sub ListBox_Click()

    Dim i As Integer, s As String

    With Me.ListBox
        For i = 0 To .ListCount - 1
            s = s & .ListIndex = i & "char(10)"
        Next
    End With

    s = Left(s, Len(s) - 2)
    Range("I5").Formula = "=" &  s

End Sub

A+

Bonjour,

Et

[I5] = S

?

Salut JoyeuxNoel, merci de ta réponse rapide j'aurais du expliquer d'ou venait le probleme je suis c**

Désolé.

s = s & .ListIndex = i & "char(10)"

Sur cette ligne, s = FAUX pourtant la boucle s'éxecute bien autant de fois que j'ai d'items je n'arrive pas à comprendre je pense que la fonctione .ListIndex n'est pas bien utilisé mais je ne trouve pas d'équivalence ou de correction

Je ne suis vraiment pas spécialiste de tout ceci.

Mais comme tu mets S= et ensuite tu remets un =, du coup il doit chercher si l'égalité s & .ListIndex = i & "char(10)" est vraie ou fausse.

Pas dit que ça vienne d'une mauvaise utilisation de .listindex, bien que ce ne soit pas exclu.

Désolé de ne pouvoir te proposer que des pistes de réflexion (peut-être stupides qui plus est) et non une réponse.

Tkt pas merci d'essayer !

Ca fait 2 mois que j'ai pas coder je me sent nul je fais pleins d'erreurs bêtes c'est fastidieux je vais finir par trouver j'espère... ! xD

J'ai trouvé. J'y suis presque, mais ma cellule affiche #NOM?

Pourtant si je vais dans la cellule A5 et juste je valide avec entrer sans rien changer c'est bon

Private Sub ListBox1_Click()
    Dim i As Integer, s As String
    s = "="
    With Me.ListBox1
        For i = 0 To .ListCount - 1
            s = s & """" & .List(i) & """& car(10) &"
        Next
    End With
    s = Left(s, Len(s) - 11)
    Range("A5").Formula = s
End Sub

Bonjour !

J'ai trouvé. J'y suis presque, mais ma cellule affiche #NOM?

C'est par ce que tu as inscris ton résultat dans la propriété .formula et non .value, alors que ce n'est pas une formule.

Range("A5").Formula = s 'Supprimer .Formula ou le remplacer par .Value

Salut, merci de ta réponse mais le résultat reste inchangé.

Tout porte à croire que mon "s" est bien une formule non ? Voici sa valeur sur un exemple bidon:

Dans la cellule:

="je"& car(10) &"suis"& car(10) &"une"& car(10) &"patate"

Dans le code:

s = "="je"& car(10) &"suis"& car(10) &"une"& car(10) &"patate""

A priori pas de problèmes de guillemets

14classeur2.xlsm (13.99 Ko)

Bonjour à tous,

Désolé de m'incruster mais il reste encore des erreurs dans votre code. Ca serait pas plus simple avec un bouton ? De plus, je ne comprend pas l'intérêt de la formule avec le CAR(10) ou le bouclage sur l'ensemble des items lors d'un clic alors qu'on en fait rien derrière ? Quel est l'objectif final ?

Private Sub CommandButton1_Click()
Dim i%, s$
With Me.ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) Then s = s & .List(i) & Chr(10)
    Next
End With
Range("A5") = Left(s, Len(s) - 1)
End Sub

Private Sub UserForm_Initialize()
Me.ListBox1.AddItem "VRAI"
Me.ListBox1.AddItem "FAUX"
End Sub

Cdlt,

16classeur1.xlsm (14.42 Ko)

Edit : Pedro22, même remarque désolé. Je ne comprend pas non plus comme je ne comprend pas la finalité .. Je pense que la méthode n'est pas adaptée.

Ok, je n'avais pas du tout vu le problème comme ça...

Il manque des caractères d'échappement pour chaque guillemets. Si ce que je raconte est obscure, je pense que le plus simple est d'activer l'enregistreur de macro, de coller ceci : ="je"& car(10) &"suis"& car(10) &"une"& car(10) &"patate" dans une cellule et d'aller voir ensuite ce qu'à écrit VBA.

La question que je me pose, c'est pourquoi s'emmerder à garder une formule au final, alors que tu peux directement inscrire son résultat dans la cellule par le biais de VBA ? Du style :

s = "je" & chr(10) & "suis" & chr(10) & "une" & chr(10) & "patate"

La question que je me pose, c'est pourquoi s'emmerder à garder une formule au final, alors que tu peux directement inscrire son résultat dans la cellule par le biais de VBA ? Du style :

Parce que j'ai besoin d'avoir le résultats dans une cellule Excel pour ensuite le mettre dans un mail etc. C'est pas pour être utilisé dans VBA par la suite.

J'essaye l'enregistreur de macro je te dit dans 5min ce que ca fais

Bonjour,

Si vous souhaitez faire de la mise en page de valeur sous outlook via VBA alors autant partir sur du HTMLBody et introduire des <br> entre chaque valeur de votre chaîne de caractère. Mais ce n'est que mon avis.

Cdlt,

Salut Ergotamine, mon programme qui exporte mes cellules dans mon mail fonctionne parfaitement je ne me sent pas trop d'y toucher,

Tout ce que je souhaite c'est obtenir ces cellules sous forme de "Liste" de mots de haut en bas, Liste qui contient TOUT les items d'une listebox

Voici ce que me donne l'enregistreur de macro:

    ActiveCell.FormulaR1C1 = "=""je""& CHAR(10) &""suis""& CHAR(10) &""une""& CHAR(10) &""patate"""

Voila ou j'en suis si cela permet de mieux visualiser le problème:

image

La je suis obligé de manuellement rentrer dans ma cellule valider avec entrée pour obtenir ma liste. Evidemment si je ne le fais pas, dans mon mail j'aurais #NOM?

Parce que j'ai besoin d'avoir le résultats dans une cellule Excel pour ensuite le mettre dans un mail etc. C'est pas pour être utilisé dans VBA par la suite.

J'ai l'impression de ne pas bien me faire comprendre... Ma proposition te permet ensuite d'inscrire ce résultat dans une cellule. C'est comme si tu avais tapé directement ton texte dans la cellule, au lieu d'y laisser une formule qui aboutie à ton texte.

Pour la partie mail et html, je passe mon tour car je n'y connais rien, et Ergotamine m'a l'air nettement plus qualifié dans le domaine !

Edit : Tu constateras que les guillemets sont doublés, car certains sont destinés à être présents dans la formule obtenue, tandis que d'autres servent juste à délimiter le texte dans VBA qui composera ta formule Excel. En clair, les 1ers ne doivent pas être interprétés, il s'agit d'un caractère comme un autre, pas les seconds.

ActiveCell.FormulaR1C1 = "=""je""& CHAR(10) &""suis""& CHAR(10) &""une""& CHAR(10) &""patate"""

Bonjour,

Avez-vous regarder le code que j'ai posté ?

Suite à votre dernier besoin :

Private Sub ListBox1_Click()
Dim i%, s$
With Me.ListBox1
    For i = 0 To .ListCount - 1
        s = s & """" & .List(i) & """" & "&CHAR(10)&"
    Next
End With
Range("A5").Formula = "=" & Left(s, Len(s) - 1)
End Sub

Private Sub UserForm_Initialize()
Me.ListBox1.AddItem "je"
Me.ListBox1.AddItem "suis"
Me.ListBox1.AddItem "une"
Me.ListBox1.AddItem "patate"
End Sub

Cdlt

edit : VBA s'écrit en anglais, les formules doivent être en anglais, d'où le #NOM. CAR est français, CAR anglais. Sinon il faudrait utiliser Formula.Local.

@Pedro22 : Oula non, j'ai passé 4h hier pour créer un pauvre tableau en HTML à partir d'un array, c'est très instructif ... mais très laborieux

Ergotamine je suis désolé je n'avais pas vu le tout premier message ! !! OUPS

Je regarde cela.

Pedro22 j'ai essayé d'appliquer ta proposition voici le résultats, d'ou l'idée que j'avais d'utiliser une formule. Je dois passer à coté de quelque chose.

image

Pedro22 j'ai essayé d'appliquer ta proposition voici le résultats, d'ou l'idée que j'avais d'utiliser une formule. Je dois passer à coté de quelque chose.

Je pense aussi, peux-tu poster le code que tu as testé pour aboutir à ce résultat ?

@Pedro22 : Oula non, j'ai passé 4h hier pour créer un pauvre tableau en HTML à partir d'un array, c'est très instructif ... mais très laborieux

Il n'y a pas des formules pour mâcher ce travail dans le pack de fonction du site ? Du genre celle-ci.

Rechercher des sujets similaires à "concatener tous items listbox"