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 .