Je voudrais bien copier tous les éléments sélectionner dans ma listeview (la ligne complète est sélectionnée à chaque fois) pour pouvoir les coller sur excel. Ma listview comporte 4 colonnes.
J'ai fait ceci:
Private Sub ListView1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles ListView1.KeyDown
If e.KeyCode = Keys.C Then
If e.Modifiers = Keys.Control Then
MsgBox(ListView1.SelectedItems.Count)
Clipboard.Clear()
Clipboard.SetText(ListView1.SelectedItems(0).Text)
End If
End If
End Sub
Mais forcément ça ne prend qu'un seul item. Je n'arrive pas à mettre tous les éléments dans le clipboard (je suppose qu'il faut faire une boucle). Peut être faut-il utiliser Clipboard.ContainsFileDropList. Je n'en sais trop rien
À première vue, et sans aucun test, ni trop de réflexion, tu aurais besoin de deux boucles imbriquées dans ce genre-là:
for each lvi as listviewitem in listview1.items
for each lvsi as listviewsubitem in lvi
etc.
next
next
Quant à savoir si tu peux mettre en même temps l'item et les subitems d'un seul tenant dans le presse-papiers, là je n'ai pas trop d'idées. Si tu as juste du texte, tu pourrais peut-être utiliser une List(of string). Mais, je serais très surpris que le presse-papiers accepte en même temps des données de type différent.
Merci
Il fallait en effet comme j'avais prévu au départ 2 boucles l'une dans l'autre.
Voici ce que j'ai fait (je crois qu'il y a moyen de faire mieux):
Clipboard.Clear()
Dim Copier(ListView1.SelectedItems.Count - 1, 3) As String
For I = 0 To ListView1.SelectedItems.Count - 1
Copier(I, 0) = ListView1.SelectedItems.Item(I).Text
Copier(I, 1) = ListView1.SelectedItems.Item(I).SubItems(1).Text
Copier(I, 2) = ListView1.SelectedItems.Item(I).SubItems(2).Text
Copier(I, 3) = ListView1.SelectedItems.Item(I).SubItems(3).Text
Next
Dim texte As String = ""
Dim textecomplet As String = ""
For I = 0 To ListView1.SelectedItems.Count - 1
texte = Copier(I, 0)
For J = 1 To 3
texte = texte & CChar(vbTab) & Copier(I, J)
Next
textecomplet = textecomplet & "" & texte & CChar(vbNewLine)
Next
Clipboard.SetText(textecomplet)
End If
Il faut en effet mettre une tabulation pour qu'excel détecte un changement de colonne et un retour à la ligne pour un changement de ligne. (Merci à Banana32)
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 10 juin 2013 à 17:39
Bonjour,
Il faut en effet mettre une tabulation pour qu'excel détecte un changement de colonne et un retour à la ligne pour un changement de ligne
L'utilisation du presse-papier est ici extrêmement malheureuse et peu "informatique" !
1) Tu as constitué et rempli un tableau dynamique (COPIER)
2) Une plage d'une feuille Excel peut être directement remplie à l'aide d'un tableau dynamique (mais là, ce sont des connaissances VBA/Excel qu'il te faut acquérir)
3) Excel supporte l'automation et peut donc être "piloté" depuis ton appli VB.Net (le moteur de recherche de ce forum de conduira à de nombreux exemples de ce qu'il convient de faire pour manipuler Excel depuis VB.Net)
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Merci Ucfoutu
Mon code n'est sans doute pas super mais je voulais simplement copier ce qu'il y avait dans la listview. Le codage est prévu pour être mis sur excel mais une fois mis dans le clipboard, je peux copier le contenu où je le souhaite (fichier texte, excel, word,...)
Il existe surement d'autres possibilités comme tu le souligne.
Mais ceci me suffit amplement.
Merci pour l'info. Je ne savais pas qu'il était ainsi possible de "piloté" excel. Je vais y regarder (pour d'autres application sans doute)