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
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.