fanch55
XLDnaute Barbatruc
Bonjour à Tous,
J'en appelle à la sagacité et l'oeil neuf de nos intervenants pour analyser le code ci-joint qui me laisse perplexe ...
J'explique la problématique ( je tente d'aider un autre participant dans sa demande ) :
On charge une listbox à partir d'une variable Table(...,..) .
Cette listbox est une multiselect/multicolonnes .
La liste peut être longue, bien plus que la hauteur de la listbox.
Aussi l'idée est de ramener toutes les sélections en début de liste avant toute validation .
Dans le code, la listbox est donc chargée à partir de la variable Tbl .
A chaque sélection de ligne dans la listbox, donc dans l'événement Change ,
on reconstruit la variable Tbl en ramenant la ligne sélectionnée en haut de Table.
puis on recharge la listbox avec Tbl et on surligne ce qui a été sélectionné .
Problème:
tant que l'événement Change est en cours (semblerait-il) , la listbox n'est pas rafraîchie mais contient bien la bonne liste.
Énervant .... car si on la recharge par la suite (avec le bouton présent uniquement à cause de celà ), la listbox est correcte !!!
1 Userform avec une listbox , un boutton et son code :
1 Feuille avec un Shape pour lancer l'userform :
Le fichier en entier garanti sans malice .
Merci par avance à tous .
J'en appelle à la sagacité et l'oeil neuf de nos intervenants pour analyser le code ci-joint qui me laisse perplexe ...
J'explique la problématique ( je tente d'aider un autre participant dans sa demande ) :
On charge une listbox à partir d'une variable Table(...,..) .
Cette listbox est une multiselect/multicolonnes .
La liste peut être longue, bien plus que la hauteur de la listbox.
Aussi l'idée est de ramener toutes les sélections en début de liste avant toute validation .
Dans le code, la listbox est donc chargée à partir de la variable Tbl .
A chaque sélection de ligne dans la listbox, donc dans l'événement Change ,
on reconstruit la variable Tbl en ramenant la ligne sélectionnée en haut de Table.
puis on recharge la listbox avec Tbl et on surligne ce qui a été sélectionné .
Problème:
tant que l'événement Change est en cours (semblerait-il) , la listbox n'est pas rafraîchie mais contient bien la bonne liste.
Énervant .... car si on la recharge par la suite (avec le bouton présent uniquement à cause de celà ), la listbox est correcte !!!
1 Userform avec une listbox , un boutton et son code :
VB:
Dim Tbl()
Dim Sel
Private Sub UserForm_Activate()
Nrows = 30
With ListBox1
.ColumnCount = 2
.ColumnWidths = "40,60"
ReDim Tbl(1 To Nrows, 1 To .ColumnCount)
End With
For i = 1 To Nrows
Tbl(i, 1) = Format(Date + i - 1, "dddd")
Tbl(i, 2) = Date + i - 1
Next i
Charge_Listbox
End Sub
Sub Charge_Listbox()
With Me.ListBox1
.Clear
.List = Tbl
.Enabled = False
On Error Resume Next
For i = 1 To Sel
.Selected(i - 1) = True
Next i
.Enabled = True
End With
End Sub
Private Sub CommandButton1_Click()
Charge_Listbox
End Sub
Private Sub ListBox1_Change()
With ListBox1
If .Enabled Then
S = 0
For i = 1 To .ListCount
If .Selected(i - 1) Then
S = S + 1
For j = 1 To .ColumnCount
Tbl(S, j) = .List(i - 1, j - 1)
Next j
End If
Next i
Sel = S
For i = 1 To .ListCount
If Not .Selected(i - 1) Then
S = S + 1
For j = 1 To .ColumnCount
Tbl(S, j) = .List(i - 1, j - 1)
Next j
End If
Next i
Charge_Listbox
End If
End With
End Sub
Private Sub UserForm_Initialize()
On Error Resume Next
With ActiveSheet.Shapes(Application.Caller)
L = Application.Left + (Application.Width - Application.UsableWidth)
T = Application.Top + (Application.Height - Application.UsableHeight)
Me.Move .Left + L, .Top + .Height + T
End With
End Sub
1 Feuille avec un Shape pour lancer l'userform :
Le fichier en entier garanti sans malice .
Merci par avance à tous .