Clipboard: listview vers excel [Résolu]

Signaler
-
 edwinzap -
Bonjour

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

Merci d'avance.

4 réponses


Bonjour,

À 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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
226
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)