Clipboard: listview vers excel [Résolu]

edwinzap - 8 juin 2013 à 21:00 - Dernière réponse :  edwinzap
- 10 juin 2013 à 18:18
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Utilisateur anonyme - 8 juin 2013 à 21:24
3
Merci
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 Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
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)
Commenter la réponse de edwinzap
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 10 juin 2013 à 17:39
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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)
Commenter la réponse de edwinzap

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.