Copie donnée Listview sur feuille

Bonjour,

je bloque sur un code, je lance le "command bouton6" sur la page Historique commande,

je rempli l' userform avec nouvelle commande, dates, personne , j'enregistre le n° de commande

ensuite je rempli ma listview avec la combobox et je souhaite copier la liste entière de ma listview sur ma feuille historique commande

en fonction du numéro de commande attribué précédemment.

Merci

fichier joint oublié précédemment désolé.

Bonjour,

Essaye un truc du genre :

Sub ListView_vers_Feuille()
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant

    With UserForm1.ListView1
        lg = .ListItems.Count
        cl = .ColumnHeaders.Count
        ReDim T(1 To lg + 1, 1 To cl)
        For i = 1 To lg
            T(i, 1) = .ListItems(i).Text
            For j = 2 To cl
                T(i, j) = .ListItems(i).ListSubItems(j).Text
            Next j
        Next i
    End With

    Sheets("Feuil1").Range("A1").Resize(UBound(T, 1) + 1, UBound(T, 2) + 1) = T

End Sub

Pierre

j'ai une erreur à la ligne T(i, j) = .ListItems(i).ListSubItems(j).Text

il me dit "index out of bound erreur d'execution 35600"

bonjour Reglaet, Pierrepp56

ou as tu intégré le code de Pierre car il faut un appel pour le lancer

ala place de ceci

Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
End Sub

dit un peu plus ou tu l'as mis car ca peut être la cause du bug

Ah oui, une petite erreur d'indice (sur un code écrit trop vite). Corrigé ici (et cette fois ci testé "en vrai")

Sub ListView_vers_Feuille()
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant

    With UserForm1.ListView1
        lg = .ListItems.Count
        cl = .ColumnHeaders.Count
        ReDim T(1 To lg, 1 To cl + 1)
        For i = 1 To lg
            T(i, 1) = .ListItems(i).Text
            For j = 1 To cl - 1
                T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
            Next j
        Next i
    End With

    Sheets("Feuil2").Range("A1").Resize(UBound(T, 1), UBound(T, 2)) = T

End Sub

Bonjour,

tout d'abord merci à pierrep56 pour ce code qui fonctionne.

Par contre comment fait -on pour décaler l'enregistrement dans ma feuille car il m'enregistre en colonne 1,2 et 3 et ça ne correspond pas à mes colonnes?

Comment fait on pour rajouter dans ton code si j'ai d'autre colonne dans ma listview?

Pour ce qui est du code grisan29 je l'ai intégré dans le bouton valider de mon userform .

Merci à tous les deux.

Je remet le fichier avec la listview modifier avec les colonnes supplémentaires pour être plus clair dans mes explications.

dans la feuille Historique commande je voudrait décaler l'enregistrement de ma listview.

Merci

226infirmeriegestion.xlsm (936.46 Ko)

Ok, et bien en fait avec le code pré indiqué tes données sont dans le tableau "T" gardé en mémoire.

Il suffit donc de trouver la première ligne vide à remplir :

    Dim derlig As Long

    With Sheets("Historique Commande")
        derlig = .Cells(Rows.Count, 1).End(xlUp).Row 

et ensuite de copier physiquement les données du tableau dans la feuille, ligne par ligne en plaçant les info dans les bonnes colonnes, du genre :

Sub ListView_vers_Feuille()
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant

    With UserForm1.ListView1
        lg = .ListItems.Count
        cl = .ColumnHeaders.Count
        ReDim T(1 To lg, 1 To cl + 1)
        For i = 1 To lg
            T(i, 1) = .ListItems(i).Text
            For j = 1 To cl - 1
                T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
            Next j
        Next i
    End With

    Dim derlig As Long

    With Sheets("Historique Commande")
        derlig = .Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
        For i = 1 To lg ' boucle sur les lignes du tableau
        ' derlig + i => pour incrémenter au fur et à mesure les lignes de la feuille
            .Range("E" & derlig + i) = T(i, 1)  ' désignation
            .Range("C" & derlig + i) = T(i, 2)    ' conditionnement
            .Range("D" & derlig + i) = T(i, 3)    ' dosage
            .Range("E" & derlig + i) = T(i, 4)    ' fournisseur
            .Range("F" & derlig + i) = T(i, 5)    ' etc selon colonnes du listview ... 
            .Range("G" & derlig + i) = T(i, 6)  ' bonnes colonnes à vérifier ...
            .Range("F" & derlig + i) = T(i, 7)
            .Range("I" & derlig + i) = T(i, 8)
            .Range("H" & derlig + i) = T(i, 9)
        Next i
    End With
End Sub

merci pierrep56 pour ta précieuse et rapide aide ca me permet d'avancer dans mon projet de gestion de commande.

Ça fonctionne à merveille.

Rechercher des sujets similaires à "copie donnee listview feuille"