utilisez le bouton editer!!
bonjour a tous
la version que je t'ai donné fait le tout en une seul boucle "do loop"
et utilise le "find" et find next" beaucoup plus rapide qu'une boucle for next surtout si tu a 1000 lignes ou plus
maintenant si tu veut avoir la 1 ere colonne vide de ta listbox (je n'en vois pas l'interet )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
sub truc_machin()
ListBox1.Clear 'on vide la liste au cas ou elle a été rempli anterieurement
'on prend en compte la colonne A juste qu'a la derniere ligne utilisée
With Worksheets("Transit_RdV_RIF").Range("a1:a" & Sheets("Transit_RdV_RIF").Range("a65530").End(xlUp).Row)
'la variable c devient la premiere cellule qui est vide en colonne a
Set c = .Find("", LookIn:=xlValues)
' si il y a une occurence
If Not c Is Nothing Then
'la variable firstadress devient l'adresse de l'ocurence
firstAddress = c.Address
'on commence une boucle do
Do
' avec la listbox 1
With Me.ListBox1
.ColumnCount = 5 'on i met 5 colonnes
'on ajoute un item
.AddItem
'la variable i prend la valeur de l'index de l'item-1
i = .ListCount - 1
' maintenant on inscrit les valeur des cellules
'la colonne 0 ligne du nouveau item =la cellule 1 colonne a droite de la colonne A de la ligne de lacellule trouvée
.List(i, 0) = c
'la colonne 1 ligne du nouveau item =la cellule 2 colonne a droite de la colonne A de la ligne de lacellule trouvée
.List(i, 1) = c.Offset(0, 1)
'la colonne 2 ligne du nouveau item =la cellule 3 colonne a droite de la colonne A de la ligne de lacellule trouvée
.List(i, 2) = c.Offset(0, 2)
'la listbox ne sera pas multi select (on ne peut qu'en selectionner qu'un
.List(i, 2) = c.Offset(0, 3)
'ainsi on se retrouve en colonne 1 la valeur vide trouvée en colonne a de ton sheets et ainsi de suite
.MultiSelect = fmMultiSelectSingle
'on applique les largeurs au colonnes de la listbox
.ColumnWidths = "80;100;100;20"
End With
' on cherche l'ocurence suivante
Set c = .FindNext(c)
' on continu tant que que c n'est pa rien et que la nouvelle adresse de cellule ne corespond pas a la precedente
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With |
maintenant moi a ta place d'une colonne vide dans ma listbox j'y mettrais le numéro de ligne et je mettrais le width de la première colonne a 0(invisible)
ainsi en cliquant sur ta listbox par la suite tu a la donnée et la ligne ou elle se trouve ça évite en cas de traitement sur le sheets de devoir réutiliser le find ou find next pour retrouver la ligne
a méditer
au plaisir
sinon en reprenant le code de qwazerty tu y met dans la colonne 0 comme te l'a suggéré bill et moi meme le numero de ligne
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Dim c As Range
Dim j As Integer
With ListBox1
.ColumnCount = 4
.ColumnWidths = "5;100;100;50"
.MultiSelect = fmMultiSelectSingle
End With
For Each c In Transit_RdV_RIF.Range("A2", Transit_RdV_RIF.Cells(Rows.Count, "B").End(xlUp).Offset(0, -1))
If IsEmpty(c) Then
ListBox1.AddItem c.row' dans la premiere colonne on y trouvera le numero de lignetu peut la masquer ta colonne
For j = 1 To 3
ListBox1.List(ListBox1.ListCount - 1, j) = c.Offset(0, j)
Next j
End If
Next c |
au plaisir