Numéroter un listbox
Résolu
Saddoud_walid
Messages postés
43
Statut
Membre
-
Saddoud_walid Messages postés 43 Statut Membre -
Saddoud_walid Messages postés 43 Statut Membre -
Bonjour,
J’ai un petit problème avec mon programme et je cherche de l’aide….
J’ai une listbox avec 6 colonnes et j’aime que la première colonne indique le numéro de la ligne du listbox après le filtrage
Et si c’est possible trier d’une manière décroissante la colonne 2
Merci d’avance pour votre aide
mon code:
J’ai un petit problème avec mon programme et je cherche de l’aide….
J’ai une listbox avec 6 colonnes et j’aime que la première colonne indique le numéro de la ligne du listbox après le filtrage
Et si c’est possible trier d’une manière décroissante la colonne 2
Merci d’avance pour votre aide
mon code:
Private Sub TextBox5_Change()
Set f = ActiveSheet
Me.ListBox1.Clear
With ListBox1
.ColumnCount = 6
.ColumnWidths = "50;100;100;100;100;100"
.RowSource = ""
End With
Set plage = f.[b1].CurrentRegion
Set plage = ActiveSheet.Range("a4:a3000")
Set c = plage.Find(Me.TextBox5, , , xlPart)
If Not c Is Nothing Then
i = 0
premier = c.Address
Do
Me.ListBox1.AddItem
Me.ListBox1.List(i, 0) = c.Offset(0, 1)
Me.ListBox1.List(i, 1) = c.Offset(0, 2)
Me.ListBox1.List(i, 2) = c.Offset(0, 3)
Me.ListBox1.List(i, 3) = c.Offset(0, 4)
Me.ListBox1.List(i, 4) = c.Offset(0, 5)
Me.ListBox1.List(i, 4) = c.Offset(0, 6)
i = i + 1
Set c = plage.FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End Sub
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Numéroter un listbox
- Numéroter page word - Guide
- Comment numéroter les pages sur powerpoint - Guide
- Faut il numéroter le sommaire - Guide
- Numéroter des fichiers automatiquement - Guide
- Comment ne pas numéroter les annexes sur word ✓ - Forum Word
4 réponses
Est-ce que ceci convient :
Private Sub TextBox5_Change()
[e2] = TextBox5.Value
On Error GoTo errormessage:
Dim F As Worksheet
Dim TV As Variant
Dim I As Integer
Dim J As Integer
Dim V(0 To 5) As Variant
Set F = ActiveSheet
Me.ListBox1.Clear
With Me.ListBox1
.ColumnCount = 6
.ColumnWidths = "50;100;100;100;100;100"
.RowSource = ""
End With
TV = F.Range("A3").CurrentRegion 'cela correspond à la plage A2:F28
I = 0
For J = 3 To UBound(TV, 1)
If TV(J, 1) = Me.TextBox5.Value Then
Me.ListBox1.AddItem
Me.ListBox1.List(I, 0) = J + 1 'numéro de ligne
Me.ListBox1.List(I, 1) = TV(J, 2) '=> colonne B
Me.ListBox1.List(I, 2) = TV(J, 3) '=> colonne C
Me.ListBox1.List(I, 3) = TV(J, 4) '=> colonne D
Me.ListBox1.List(I, 4) = TV(J, 5) '=> colonne E
Me.ListBox1.List(I, 5) = TV(J, 6) '=> colonne F
I = I + 1
End If
Next J
'tri décroissant par rapport à la colonne 2 de la ListBox1 (la note)
With Me.ListBox1
For I = 0 To .ListCount - 1
For J = 0 To .ListCount - 1
If CDbl(.Column(1, I)) > CDbl(.Column(1, J)) And I <> J Then
V(0) = .List(I, 0): .Column(0, I) = .Column(0, J): .Column(0, J) = V(0)
V(1) = .Column(1, I): .Column(1, I) = .Column(1, J): .Column(1, J) = V(1)
V(2) = .Column(2, I): .Column(2, I) = .Column(2, J): .Column(2, J) = V(2)
V(3) = .Column(3, I): .Column(3, I) = .Column(3, J): .Column(3, J) = V(3)
V(4) = .Column(4, I): .Column(4, I) = .Column(4, J): .Column(4, J) = V(4)
V(5) = .Column(5, I): .Column(5, I) = .Column(5, J): .Column(5, J) = V(5)
End If
Next J
Next I
End With
errormessage:
If Err.Number = 9 Then
MsgBox "PAS D'ELEVES DANS CETTE CATEGORIE" & vbCrLf & "vérifier votre travail"
End If
End Sub
Re,
Est-ce ce code correspond à vos attentes :
Est-ce ce code correspond à vos attentes :
Private Sub TextBox5_Change()
[e2] = TextBox5.Value
On Error GoTo errormessage:
Dim F As Worksheet
Dim TV As Variant
Dim I As Integer
Dim J As Integer
Dim V(0 To 5) As Variant
Set F = ActiveSheet
Me.ListBox1.Clear
With Me.ListBox1
.ColumnCount = 6
.ColumnWidths = "50;100;100;100;100;100"
.RowSource = ""
End With
TV = F.Range("A3").CurrentRegion 'cela correspond à la plage A2:F28
I = 0
For J = 3 To UBound(TV, 1)
If TV(J, 1) = Me.TextBox5.Value Then
Me.ListBox1.AddItem
Me.ListBox1.List(I, 1) = TV(J, 2) '=> colonne B
Me.ListBox1.List(I, 2) = TV(J, 3) '=> colonne C
Me.ListBox1.List(I, 3) = TV(J, 4) '=> colonne D
Me.ListBox1.List(I, 4) = TV(J, 5) '=> colonne E
Me.ListBox1.List(I, 5) = TV(J, 6) '=> colonne F
I = I + 1
End If
Next J
'tri décroissant par rapport à la colonne 2 de la ListBox1 (la note)
With Me.ListBox1
For I = 0 To .ListCount - 1
For J = 0 To .ListCount - 1
If CDbl(.Column(1, I)) > CDbl(.Column(1, J)) And I <> J Then
V(1) = .Column(1, I): .Column(1, I) = .Column(1, J): .Column(1, J) = V(1)
V(2) = .Column(2, I): .Column(2, I) = .Column(2, J): .Column(2, J) = V(2)
V(3) = .Column(3, I): .Column(3, I) = .Column(3, J): .Column(3, J) = V(3)
V(4) = .Column(4, I): .Column(4, I) = .Column(4, J): .Column(4, J) = V(4)
V(5) = .Column(5, I): .Column(5, I) = .Column(5, J): .Column(5, J) = V(5)
End If
Next J
Next I
For I = 0 To .ListCount - 1
.Column(0, I) = I + 1
Next I
End With
errormessage:
If Err.Number = 9 Then
MsgBox "PAS D'ELEVES DANS CETTE CATEGORIE" & vbCrLf & "vérifier votre travail"
End If
End Sub
Bonjour Saddoud_Walid, bonjour le forum
Je n'ai pas compris où commençait la plage des valeurs ?À adapter... J'ai utilisé une variable tableau à la place de la méthode Find, ça devrait être aussi rapide. Pour le tri décroissant j'ai converti les données en entier avec CInt. Il faudra, là aussi, peut-être adapter..
Essaie comme ça :
Je n'ai pas compris où commençait la plage des valeurs ?À adapter... J'ai utilisé une variable tableau à la place de la méthode Find, ça devrait être aussi rapide. Pour le tri décroissant j'ai converti les données en entier avec CInt. Il faudra, là aussi, peut-être adapter..
Essaie comme ça :
Private Sub TextBox5_Change()
Dim F As Worksheet
Dim TV As Variant
Dim I As Integer
Dim J As Integer
Dim V(0 To 5) As Variant
Set F = ActiveSheet
Me.ListBox1.Clear
With Me.ListBox1
.ColumnCount = 6
.ColumnWidths = "50;100;100;100;100;100"
.RowSource = ""
End With
TV = F.Range("B1").CurrentRegion 'a adapter à ton cas
I = 0
For J = 4 To UBound(TV, 1)
If InStr(1, CStr(TV(J, 1)), Me.TextBox5.Value, vbTextCompare) <> 0 Then
Me.ListBox1.AddItem
Me.ListBox1.List(I, 0) = J 'numéro de ligne
Me.ListBox1.List(I, 1) = TV(J, 2) '=> colonne B
Me.ListBox1.List(I, 2) = TV(J, 3) '=> colonne C
Me.ListBox1.List(I, 3) = TV(J, 4) '=> colonne D
Me.ListBox1.List(I, 4) = TV(J, 5) '=> colonne E
Me.ListBox1.List(I, 5) = TV(J, 6) '=> colonne F
I = I + 1
End If
Next J
'tri décroissant par rapport à la colonne 2 de la ListBox1 (=> colonne B du tableau)
With Me.ListBox1
For I = 0 To .ListCount - 1
For J = 0 To .ListCount - 1
If CInt(.Column(1, I)) > CInt(.Column(1, J)) And I <> J Then
V(0) = .List(I, 0): .Column(0, I) = .Column(0, J): .Column(0, J) = V(0)
V(1) = .Column(1, I): .Column(1, I) = .Column(1, J): .Column(1, J) = V(1)
V(2) = .Column(2, I): .Column(2, I) = .Column(2, J): .Column(2, J) = V(2)
V(3) = .Column(3, I): .Column(3, I) = .Column(3, J): .Column(3, J) = V(3)
V(4) = .Column(4, I): .Column(4, I) = .Column(4, J): .Column(4, J) = V(4)
V(5) = .Column(5, I): .Column(5, I) = .Column(5, J): .Column(5, J) = V(5)
End If
Next J
Next I
End With
End Sub
le problème du premier colonne et toujours la même .... donc j'ai pensé que si je ne fait pas la numérotation dans la listbox mais quand je récupère les valeurs pour l'impression
je m'explique .... quand je récupère les linges de la listbox dans ma feuille (10 linges par exemple) j'aime avoir dans la cellule A9 la valeur 1 ; A10 la valeur 2; A11 la valeur 3 etc ......
voila mon code pour imprimer :
Private Sub CommandButton1_Click()
Worksheets("1").Visible = True
Worksheets("1").Select
Dim Cpt As Byte
For Cpt = 1 To 1
With ActiveWorkbook.ActiveSheet
.Copy After:=Worksheets(Worksheets.Count)
End With
Next Cpt
On Error GoTo errormessage1:
ActiveSheet.Name = "b"
errormessage1:
If Err.Number = 1004 Then
MsgBox "suprimer a" & vbCrLf & "vérifier votre travail"
End If
With ListBox1
If .ListCount - 1 >= 2 Then
Rows("10:" & 9 + .ListCount - 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
For x = 0 To TextBox1.Value - 1
For y = 0 To 5
If y > 1 Then
ActiveSheet.Range("a9").Offset(x, y) = .List(x, y)
Else
ActiveSheet.Range("a9").Offset(x, y) = .List(x, y)
End If
Next y, x
[c6] = TextBox5
Sheets("b").PrintOut
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Sheets("b").Delete
Application.DisplayAlerts = True
End With
Worksheets("1").Visible = False
Unload UserForm2
End Sub
merci beaucoup pour votre aide
Rows("9:9").Copy
Range("A9").PasteSpecial xlPasteFormats
Range("A9") = 1
Range("A9:A" & Range("A" & Rows.Count).End(xlUp).Row).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Trend:=False
merci encore pour votre soutien