ListBox pas très docile
Bonjour le forum,
bonjour les cracks,
un nouveau problème, si pas un mystère pour moi, m'amène vous demander votre avis éclairé.
Dans le projet ci-joint pour un de nos hôtes, j'exécute (enfin, j'aimerais!
- d'abord, les pays différents en BDD, colonne A ;
- ensuite les banques différentes selon le choix du pays en BDD, colonne B ;
- et enfin, les codes BIC différents selon le choix de la banque du pays, toujours en BDD, colonne C.
Simple, me direz-vous, sauf que, après avoir obéi pour les pays, la ListBox ne veut plus remplir son office dès le deuxième tri alors même, que, manifestement, le tableau destiné à recevoir les données les reçoit bien, les MsgBox disséminés dans la procédure ci-dessous me les renseignant correctement.
Public Sub CalculTab(ByVal iFlag As Integer)
'
Dim tMulti
Dim tTab()
'
Application.EnableEvents = False
'
With Worksheets("BDD")
iRow = .Range("A" & Rows.Count).End(xlUp).Row
If iFlag = 1 Then
sFlag = "A"
iFlag1 = 1
Else
sFlag = IIf(iFlag = 2, "B", "C")
iFlag1 = IIf(iFlag = 2, 2, 3)
End If
tMulti = .Range("A2:" & sFlag & iRow)
End With
'
iUB = 1
ReDim Preserve tTab(iUB)
iFlag2 = 0
'
For x = 2 To iRow - 1
iOK = 1
Select Case iFlag
Case 2
iOK = IIf(tMulti(x, 1) = Cells([AAA1], 1), 1, 0)
Case 3
iOK = IIf(tMulti(x, 1) = Cells([AAA1], 1) And tMulti(x, 2) = Cells([AAA1], 2), 1, 0)
End Select
If iOK = 1 Then
iTemp = 0
For y = 0 To UBound(tTab) - 1
If Trim(tMulti(x, iFlag1)) = tTab(y) Then
iTemp = 1
Exit For
End If
Next
If iTemp = 0 Then
If iFlag2 = 1 Then
iUB = iUB + 1
ReDim Preserve tTab(iUB)
End If
iFlag2 = 1
tTab(iUB - 1) = Trim(tMulti(x, iFlag1))
MsgBox tTab(iUB - 1)
End If
End If
Next
'
Me.lstMulti.Clear
Me.lstMulti.List = tTab
Me.lstMulti.Height = iUB * 16
Me.lstMulti.Visible = True
'
Application.EnableEvents = True
'
End Sub
Si vous connaissez le truc que je ne connais pas sur les ListBox ou si vous décelez mon erreur, je vous serais très reconnaissant de partager vos lumières!
A+
Bonsoir,
Je ne comprends pas ce que tu fais, et dès lors je ne vois pas où est le problème ! Et il est tard pour se concentrer !
Pas compris ce que tu mets dans ta Listbox : tu as l'air de dire que tu mets à la suite pays, banques et BIC ! Ça me paraît curieux.
Et pourquoi des tris, ta base est triée non ? Sinon on la trie sur place.
Je crois avoir compris que tu affiche la liste des pays : ça, ça se lance de l'extérieur de la LBox. Un filtrage avancé des pays me semble une des méthodes les plus rapide...
Ensuite tu cliques dans la LBox. Cela implique que tu aies un indicateur qui te permet de savoir sur quoi tu cliques : Pays, Banques ou autres, à tout moment. Tu cliques un pays : ta base étant triée, tu peux facilement cibler la plage banques du pays, et pareil en faire un filtrage avancé qui te fournit la liste à substituer.
Même chose pour la 3e phase.
D'où j'ai du mal à percer comment tu procèdes et ça me paraît compliqué.
Cordialement.
Bonjour le forum,
Bonjour MFerrand,
merci d'avoir déjà jeté un oeil!
Au-delà de l'apparente complexité (pur exercice pour moi! J'avoue ne pas avoir cherché d'autres voies!) du code, le problème est l'affichage des 2e et 3e tris (banques, BIC) dans la LBox.
En chipotant, j'ai trouvé ceci:
- après le 2e tri, ListBox vide donc, je passe en mode création, je change la BackColor de la LBox, je repasse sur la feuille Base... les données sont là, permettant le clic...
- 3e tri, même chose!
J'ai évidemment essayé cette ânerie dans le code, directement! Marche pas!
Bref! Beau blocage!
Merci à vous qui vous penchez sur cette petite énigme!
A+
Salut !
Là j'ai pas le temps de voir... J'avais essayé de rejeter un oeil au réveil
Laisse tomber les accessoires (colorations, etc.), tu auras le temps de décorer ensuite, pour te concentrer sur le fil directeur des enchainements, où je ne vois pas sur quoi tu butes... Et je comprends pas pourquoi tu insistes sur la notion de tris, alors qu'un tri sur les 3 colonnes de la base doit être fait au départ et il n'y a plus à y revenir, tes listes seront nécessairement ordonnées sans autre tri !
Cordialement.
Bonjour MFerrand,
notre hôte utilisera les résultats de ces LBox sur d'autres feuilles que BDD! Ne me demande pas à quoi ça sert, je n'en sais rien!
Donc, un clic dans Base (nom donné par moi, par hasard!) déclenchera la macro qui affichera ses résultats (Pays, Banque, Bic) sur ABC de la ligne sélectionnée (d'où coloration de la ligne).
Alors, oui, BDD est triée mais tu remarqueras que certaines banques sont reprises plusieurs fois par pays car ayant plusieurs codes BIC.
Ma macro trie donc le bon grain de l'ivraie en ne reprenant ces banques qu'une seule fois, but de la manoeuvre!
Le problème, encore une fois, n'est pas le code en lui-même (Omnibus viis Romam pervenitur) mais le non-affichage des résultats des 2e et 3e tris dans la LBox... en tout cas, sur mon ordi.
Bonne journée!
Bonjour, bonsoir,
j'ai trouvé!
A force de retourner le problème dans tous les sens, j'ai pointé le problème sur 'EnableEvents'.
J'ai dû le placer en 'False' dans ListBox_MouseDown, exécuter les opérations sur les données en ListBox_MouseUp avant de le remettre sur 'True' après le calcul et le chargement des données suivantes.
Private Sub lstMulti_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'
Application.EnableEvents = False
'
End Sub
Private Sub lstMulti_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'
'Opérations sur les données de la ListBox
'
Call Calcul(iFlag)
'
End Sub
Public Sub Calcul(ByVal iFlag As Integer)
'
'Nouveau calcul et chargement des nouvelles données dans la ListBox.
'
Application.EnableEvents = True
'
End Sub
Ouf! On peut avancer!
Merci à ceux qui ont fait chauffer les neurones!
A+