je cherche désespérément une solution pour n'afficher que la dernière ligne de mon tableau dans ma ListBox.
Celle-ci se trouve dans 1 UserForm avec TextBox et Combobox.
Ces derniers contrôles reprennent les éléments de la ListBox afin de pouvoir la modifier.
Ce formulaire permet justement aux utilisateurs après vérification de leur dernière saisie de la modifier si erreur. Je reprends donc la dernière ligne remplie du tableau vu que les saisies s'incrémentent à la fin.
Voilà je vous explique exactement car vous l'aurez compris, je ne veux pas que les personnes modifient une autre ligne !
Ci-dessous le code ; l'avant dernière ligne (que j'ai passé en texte) me permet de trier en ordre inverse donc avec la dernière ligne tout en haut et en réduisant significativement la hauteur de la ListBox, j'arrive à n'afficher que ça mais c'est pas pour autant très sécurisé ... un petit malin, arrivera toujours à descendre quand-même !
Accessoirement, j'aimerais également que cette ligne soit de suite sélectionnée à l'Initialize du UF pour pas à avoir à cliquer dessus pour afficher les champs dans les TB et CB mais si pas possible je mettrai 1 label au-dessus pour l'indiquer, donc c'est pas trop grave.
Petite précision, je fais cela en bénévolat pour une association histoire de leur faciliter le travail donc si vous m'aider vous faites également votre BA et c'est toujours bon à prendre les points de Karma
Un rand grand merci par avance !
VB:
Private Sub UserForm_Initialize()
Sheets("Indemnités_km").Activate
With ListBox1
.List = Range("A4:J" & Range("A303").Row).Value
.ColumnCount = 6
End With
ListBox1.ColumnWidths = "70;250;250;110;50;50"
Dim i As Integer
For i = ListBox1.ListCount - 1 To 0 Step -1
If ListBox1.List(i) = "" Then ListBox1.RemoveItem (i)
Next i
'ListBox1.TopIndex = ListBox1.ListCount - 2
End Sub
oui bonne remarque ! En fait c'est un oubli. Je n'ai pas modifié cette partie car au départ mes colonnes avec formules étaient dispersées partout dans le tableau et j'avais donc la totalité des colonnes.
Mais ça s'est vite avéré compliqué d'adapter à chaque fois le code donc j'ai déplacé mes colonnes avec formules et réadapté plusieurs codes. Celui-ci a été oublié
Voilà tu sais tout
Par contre j'ai dit une bêtise plus haut l'ordre de l'affichage n'est pas modifié avec l'avant dernière ligne de code. En fait je n'ai aucune différence
Bon je ne prends donc que les 6 premières colonnes de la feuille source :
VB:
Private Sub UserForm_Initialize()
Dim c As Range
Set c = Sheets("Indemnités_km").Range("A4:F303").Find("*", , xlValues, , , xlPrevious)
With ListBox1
.ColumnCount = 6
.ColumnWidths = "70;250;250;110;50;50"
If c Is Nothing Then Exit Sub
.List = c.EntireRow.Resize(, 6).Value
.Selected(0) = True
End With
End Sub
Comme demandé une seule ligne est affichée dans la ListBox.
pardon j'ai fait un peu vite ...
Maintenant c'est l'index qui ne va plus
Je retrouve dans le TB et CB que les valeurs de la 1ère ligne
Une idée de comment modifier SVP ? Je vais essayer en modifiant l'évènement... voire ajouter dans l'initialize du UF. Mais j'en doute car même en cliquant sur la ligne ça ne s'actualise pas
Mais au cas où je ne trouve pas ...
Voici le code :
VB:
Private Sub ListBox1_Click()
For X = 1 To 5
Me.Controls("TextBox" & X).Value = Cells(Me.ListBox1.ListIndex + 4, X)
Next X
End Sub
pardon j'ai fait un peu vite ...
Maintenant c'est l'index qui ne va plus
Je retrouve dans le TB et CB que les valeurs de la 1ère ligne
Une idée de comment modifier SVP ? Je vais essayer en modifiant l'évènement... voire ajouter dans l'initialize du UF. Mais j'en doute car même en cliquant sur la ligne ça ne s'actualise pas
Mais au cas où je ne trouve pas ...
Voici le code :
VB:
Private Sub ListBox1_Click()
For X = 1 To 5
Me.Controls("TextBox" & X).Value = Cells(Me.ListBox1.ListIndex + 4, X)
Next X
End Sub
Non j'ai essayé et c'est bien ce que je pensais ça ne fonctionne plus ...
Egalement en passant Selected(0) = False et sélection de la ligne.
Problème lié à l'index ?