On est obligé de passer par ce procédé ?
L'idéal serait l'indexation se fasse de façon automatisée lors qu'on ajoute un élément.
Oui on n'a pas le choix. Dans une base de données, c'est la ref article ou ligne dans votre cas qui sert pour repérer la ligne à utiliser
Cela se fera automatiquement en cas d'ajout.
Par rapport à votre dernier fichier posté, faites ces modifications :
1. Feuille BD
- Allez en G1 et ajoutez un titre (genre Ref ou autre)
- en G2, mettez cette formule --> =ligne()-1 (cela va remplir automatiquement la colonne pour chaque ligne du tableau)
2. USF - Code initialize : remplacez le code par celui ci-dessous
Private Sub UserForm_Initialize()
Dim i As Integer
Set f = Sheets("bd")
' Créer les headers dans une listbox header depuis Sheets("BD") ligne 2 :
Call CreateListBoxHeader(Me.ListBox_body, Me.ListBox_header, Array(f.Cells(1, "A"), f.Cells(1, "B"), f.Cells(1, "C"), f.Cells(1, "D"), f.Cells(1, "E"), f.Cells(1, "F")))
Call trier
With Me.ListBox_body
.ColumnCount = 6
.List = f.ListObjects(1).DataBodyRange.Value
End With
End Sub
3. USF - Code Private Sub Listbox_body_Click(), remplacez le code par celui-ci
Private Sub Listbox_body_Click()
Dim i As Byte, k As Integer
Me.LRow = vbNullString
On Error Resume Next
For i = 1 To 7
Me.Controls("Textbox" & i + 1) = ListBox_body.List(ListBox_body.ListIndex, i - 1)
Next i
With Me
.CheckBox1 = False
.CheckBox2 = False
With .ListBox_body
For k = 0 To .ListCount - 1
If .Selected(k) Then
Me.LRow = .List(k, 6)
End If
Next k
End With
End With
End Sub
4. USF - code Private Sub BUpdate_Click(), supprimez cette ligne
'LRow = ListBox_body.ListIndex + 1
NB : au dessus des codes Dim ligne recherchee et Dim SéparationDébut As String, Dim séparationfin ne servent plus.
Il y a aussi quelques variables non déclarées avec le mot Séparation.
Si vous voulez remettre de l'ordre, désactivez les trois puis mettez en première ligne --> Option Explicit
Cette instruction vous montrera ce qu'il manque à l'exécution des codes
Dites moi