J'ai dans mon appli une listbox et je souhaiterais que l'utilisateur
puisse trier son contenu si nécessaire à l'aide d'un checkbox.
Le problème c'est la propriété "sorted" de la listbox qui est en lecture
seule donc j'avais pensé me servir de deux listbox qui auraient en
permanence un contenu identique, puis de les rendre visible ou non
suivant la position du checkbox.
Est-ce une bonne solution ?
Admettons que oui ;-) maintenant, j'aimerais bien réussir à synchroniser
des deux listes. C'est à dire que l'item sélectionné soit le même en
permanence des deux côtés pour pouvoir faire des modifications (addItem,
removeItem) d'un seul coup.
Donc voici ce que j'ai fait :
Placez tout d'abord deux listbox sur une feuille.
Option Explicit
Private Sub Form_Load()
List1.AddItem "France"
List1.AddItem "Belgique"
List1.AddItem "Luxembourg"
List1.AddItem "Suède"
List1.AddItem "Paxs Bas"
List2.AddItem "France"
List2.AddItem "Belgique"
List2.AddItem "Luxembourg"
List2.AddItem "Suède"
List2.AddItem "Paxs Bas"
End Sub
Private Sub List1_Click()
Dim i As Integer
For i = 0 To List2.ListCount - 1
List2.ListIndex = i
If List1.Text = List2.Text Then
Exit Sub
End If
Next i
End Sub
Ca fonctionne mais si je rajoute le bout de code (symétrique si l'on
peut dire) dans la seconde listbox, ça cafouille :
Private Sub List2_Click()
Dim j As Integer
For j = 0 To List1.ListCount - 1
List1.ListIndex = i
If List2.Text = List1.Text Then
Exit Sub
End If
Next j
End Sub
Si on reste sur le principe de la liste à enregistrer n°3 = doublon en vrac: '------------------------ Dim fid As Integer fid = FreeFile Open path For Output As #fid For z = 0 To releve.ListCount - 1 Print #fid, releve.list(z) Next z Close fid '------------------------ Ça sert à quoi ça ?.?? releve.ListIndex = z
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle cadence CPU ???
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:
le_troll wrote: > Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple : Les enregistrements sont donc dans une listbox. Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour que le tout s'enregistre dans un fichier texte avec le code suivant dans la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1 releve.ListIndex = z Print #fid, releve.Text Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a t-il pas moyen d'arriver à quelque chose de performant avec les API que je connais encore mal ? Merci
-- Franck
Bonjour,
Si on reste sur le principe de la liste à enregistrer n°3 = doublon en
vrac:
'------------------------
Dim fid As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1
Print #fid, releve.list(z)
Next z
Close fid
'------------------------
Ça sert à quoi ça ?.??
releve.ListIndex = z
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle
cadence CPU ???
--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
"F. David" <franck.dh@alussinan.org> a écrit dans le message de
news:eZ7kMXMlEHA.3104@TK2MSFTNGP14.phx.gbl...
le_troll wrote:
> Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple :
Les enregistrements sont donc dans une listbox.
Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour
que le tout s'enregistre dans un fichier texte avec le code suivant dans
la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1
releve.ListIndex = z
Print #fid, releve.Text
Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a
t-il pas moyen d'arriver à quelque chose de performant avec les API que
je connais encore mal ? Merci
Si on reste sur le principe de la liste à enregistrer n°3 = doublon en vrac: '------------------------ Dim fid As Integer fid = FreeFile Open path For Output As #fid For z = 0 To releve.ListCount - 1 Print #fid, releve.list(z) Next z Close fid '------------------------ Ça sert à quoi ça ?.?? releve.ListIndex = z
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle cadence CPU ???
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:
le_troll wrote: > Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple : Les enregistrements sont donc dans une listbox. Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour que le tout s'enregistre dans un fichier texte avec le code suivant dans la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1 releve.ListIndex = z Print #fid, releve.Text Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a t-il pas moyen d'arriver à quelque chose de performant avec les API que je connais encore mal ? Merci
-- Franck
le_troll
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait gérer parallèlement le fichier en même temps que les listes, mais dans ce cas, il faut que tu utilises comme base les éléments en vrac et un fichier binaire, et que tu formates en mettant préalablement à la création, dans un variable de taille fixe (dim variable as string * 16), comme ça, en binaire, tu pointeras directement sur l'élément à modifier (car ton système n'est que de la modif, remplacer l'un par l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit list_vrac.list(listIndex) dans fichier à cet endroit... Ok ??? ---------------
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for.... if x = y then goto label next label:
Ben non, il faut faire (il y a une instruction): Exit for
soit:
for.... if x = y then exit for next
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:
le_troll wrote: > Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple : Les enregistrements sont donc dans une listbox. Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour que le tout s'enregistre dans un fichier texte avec le code suivant dans la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1 releve.ListIndex = z Print #fid, releve.Text Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a t-il pas moyen d'arriver à quelque chose de performant avec les API que je connais encore mal ? Merci
-- Franck
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait gérer
parallèlement le fichier en même temps que les listes, mais dans ce cas, il
faut que tu utilises comme base les éléments en vrac et un fichier binaire,
et que tu formates en mettant préalablement à la création, dans un variable
de taille fixe (dim variable as string * 16), comme ça, en binaire, tu
pointeras directement sur l'élément à modifier (car ton système n'est que de
la modif, remplacer l'un par l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié
Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit
list_vrac.list(listIndex) dans fichier à cet endroit...
Ok ???
---------------
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for....
if x = y then goto label
next
label:
Ben non, il faut faire (il y a une instruction):
Exit for
soit:
for....
if x = y then exit for
next
--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
"F. David" <franck.dh@alussinan.org> a écrit dans le message de
news:eZ7kMXMlEHA.3104@TK2MSFTNGP14.phx.gbl...
le_troll wrote:
> Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple :
Les enregistrements sont donc dans une listbox.
Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour
que le tout s'enregistre dans un fichier texte avec le code suivant dans
la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1
releve.ListIndex = z
Print #fid, releve.Text
Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a
t-il pas moyen d'arriver à quelque chose de performant avec les API que
je connais encore mal ? Merci
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait gérer parallèlement le fichier en même temps que les listes, mais dans ce cas, il faut que tu utilises comme base les éléments en vrac et un fichier binaire, et que tu formates en mettant préalablement à la création, dans un variable de taille fixe (dim variable as string * 16), comme ça, en binaire, tu pointeras directement sur l'élément à modifier (car ton système n'est que de la modif, remplacer l'un par l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit list_vrac.list(listIndex) dans fichier à cet endroit... Ok ??? ---------------
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for.... if x = y then goto label next label:
Ben non, il faut faire (il y a une instruction): Exit for
soit:
for.... if x = y then exit for next
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:
le_troll wrote: > Salut, si je peux t'aider :o) ...
Bon ben je peux peut-être continuer ici. Voila le problème est simple : Les enregistrements sont donc dans une listbox. Je viens de faire un test sur 1350 lignes et il me faut 11 secondes pour que le tout s'enregistre dans un fichier texte avec le code suivant dans la procédure d'enregistrement.
La variable path est le chemin d'accès au fichier
Dim fid, z As Integer
fid = FreeFile
Open path For Output As #fid
For z = 0 To releve.ListCount - 1 releve.ListIndex = z Print #fid, releve.Text Next z
Close #fid
Y a t-il moyen d'améliorer cette procédure dans ce bout de code ou n'y a t-il pas moyen d'arriver à quelque chose de performant avec les API que je connais encore mal ? Merci
-- Franck
F. David
le_troll wrote:
Ça sert à quoi ça ?.?? releve.ListIndex = z
Euh ... oui effectivement, ça sert à faire défiler la sélection donc ça ne sert à rien :-) Ca va beaucoup mieux en l'enlevant ;-) Ca se sauvegarde en un clin d'oeil Ouf !! Merci
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle cadence CPU ???
Je suis obligé de répondre ? ;-)
-- Franck
le_troll wrote:
Ça sert à quoi ça ?.??
releve.ListIndex = z
Euh ... oui effectivement, ça sert à faire défiler la sélection donc ça
ne sert à rien :-) Ca va beaucoup mieux en l'enlevant ;-)
Ca se sauvegarde en un clin d'oeil Ouf !!
Merci
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle
cadence CPU ???
Euh ... oui effectivement, ça sert à faire défiler la sélection donc ça ne sert à rien :-) Ca va beaucoup mieux en l'enlevant ;-) Ca se sauvegarde en un clin d'oeil Ouf !! Merci
T'es à combien de secondes en faisant ça, et avec quelle Ram et quelle cadence CPU ???
Je suis obligé de répondre ? ;-)
-- Franck
F. David
le_troll wrote:
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait gérer parallèlement le fichier en même temps que les listes, mais dans ce cas, il faut que tu utilises comme base les éléments en vrac et un fichier binaire, et que tu formates en mettant préalablement à la création, dans un variable de taille fixe (dim variable as string * 16), comme ça, en binaire, tu pointeras directement sur l'élément à modifier (car ton système n'est que de la modif, remplacer l'un par l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit list_vrac.list(listIndex) dans fichier à cet endroit... Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de secondes là ;-) Mais 11s pour 1350 lignes, ça faisait quand même un peu long ! Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for.... if x = y then goto label next label:
Ben non, il faut faire (il y a une instruction): Exit for
Exact. Merci, c'est bien ce qui me semblait ;-)
-- Franck
le_troll wrote:
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait
gérer parallèlement le fichier en même temps que les listes, mais
dans ce cas, il faut que tu utilises comme base les éléments en vrac
et un fichier binaire, et que tu formates en mettant préalablement à
la création, dans un variable de taille fixe (dim variable as string
* 16), comme ça, en binaire, tu pointeras directement sur l'élément à
modifier (car ton système n'est que de la modif, remplacer l'un par
l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié
Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit
list_vrac.list(listIndex) dans fichier à cet endroit...
Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de
secondes là ;-)
Mais 11s pour 1350 lignes, ça faisait quand même un peu long !
Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for....
if x = y then goto label
next
label:
Ben non, il faut faire (il y a une instruction):
Exit for
Au fait, j'y pense, il y a une solution plus rapide:
A la base tu charges des datas de je ne sais où, ben il faudrait gérer parallèlement le fichier en même temps que les listes, mais dans ce cas, il faut que tu utilises comme base les éléments en vrac et un fichier binaire, et que tu formates en mettant préalablement à la création, dans un variable de taille fixe (dim variable as string * 16), comme ça, en binaire, tu pointeras directement sur l'élément à modifier (car ton système n'est que de la modif, remplacer l'un par l'autre), alors après par exemple:
List_en_vrac, l'élément 17 (listIndex) est modifié Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit list_vrac.list(listIndex) dans fichier à cet endroit... Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de secondes là ;-) Mais 11s pour 1350 lignes, ça faisait quand même un peu long ! Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
J'ai oublié hier, j'ai vu un truc, tu avais fait:
for.... if x = y then goto label next label:
Ben non, il faut faire (il y a une instruction): Exit for
Exact. Merci, c'est bien ce qui me semblait ;-)
-- Franck
le_troll
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau ta question, car là elle commence à baisser sérieusement :o)
Sinon, tu vas je présume sauvegarder tes données saisies ensuite, alors le binaire sera le bon mode d'accès, car il permet de pointer pile et de modifier...
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:%
le_troll wrote: > Au fait, j'y pense, il y a une solution plus rapide: > > A la base tu charges des datas de je ne sais où, ben il faudrait > gérer parallèlement le fichier en même temps que les listes, mais > dans ce cas, il faut que tu utilises comme base les éléments en vrac > et un fichier binaire, et que tu formates en mettant préalablement à > la création, dans un variable de taille fixe (dim variable as string > * 16), comme ça, en binaire, tu pointeras directement sur l'élément à > modifier (car ton système n'est que de la modif, remplacer l'un par > l'autre), alors après par exemple: > > List_en_vrac, l'élément 17 (listIndex) est modifié > Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit > list_vrac.list(listIndex) dans fichier à cet endroit... > Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de secondes là ;-) Mais 11s pour 1350 lignes, ça faisait quand même un peu long ! Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
> J'ai oublié hier, j'ai vu un truc, tu avais fait: > > for.... > if x = y then goto label > next > label: > > Ben non, il faut faire (il y a une instruction): > Exit for
Exact. Merci, c'est bien ce qui me semblait ;-)
-- Franck
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau ta
question, car là elle commence à baisser sérieusement :o)
Sinon, tu vas je présume sauvegarder tes données saisies ensuite, alors le
binaire sera le bon mode d'accès, car il permet de pointer pile et de
modifier...
--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
"F. David" <franck.dh@alussinan.org> a écrit dans le message de
news:%23B1A6fNlEHA.896@TK2MSFTNGP12.phx.gbl...
le_troll wrote:
> Au fait, j'y pense, il y a une solution plus rapide:
>
> A la base tu charges des datas de je ne sais où, ben il faudrait
> gérer parallèlement le fichier en même temps que les listes, mais
> dans ce cas, il faut que tu utilises comme base les éléments en vrac
> et un fichier binaire, et que tu formates en mettant préalablement à
> la création, dans un variable de taille fixe (dim variable as string
> * 16), comme ça, en binaire, tu pointeras directement sur l'élément à
> modifier (car ton système n'est que de la modif, remplacer l'un par
> l'autre), alors après par exemple:
>
> List_en_vrac, l'élément 17 (listIndex) est modifié
> Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit
> list_vrac.list(listIndex) dans fichier à cet endroit...
> Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de
secondes là ;-)
Mais 11s pour 1350 lignes, ça faisait quand même un peu long !
Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
> J'ai oublié hier, j'ai vu un truc, tu avais fait:
>
> for....
> if x = y then goto label
> next
> label:
>
> Ben non, il faut faire (il y a une instruction):
> Exit for
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau ta question, car là elle commence à baisser sérieusement :o)
Sinon, tu vas je présume sauvegarder tes données saisies ensuite, alors le binaire sera le bon mode d'accès, car il permet de pointer pile et de modifier...
-- Merci, @+, bye, Joe troll75 AROBASE iFrance POINT com ------------------------------------------ Le_Troll, éleveur de Trolls depuis César, qui disait: Avec une hache, celui qui tient le manche a toujours raison !
"F. David" a écrit dans le message de news:%
le_troll wrote: > Au fait, j'y pense, il y a une solution plus rapide: > > A la base tu charges des datas de je ne sais où, ben il faudrait > gérer parallèlement le fichier en même temps que les listes, mais > dans ce cas, il faut que tu utilises comme base les éléments en vrac > et un fichier binaire, et que tu formates en mettant préalablement à > la création, dans un variable de taille fixe (dim variable as string > * 16), comme ça, en binaire, tu pointeras directement sur l'élément à > modifier (car ton système n'est que de la modif, remplacer l'un par > l'autre), alors après par exemple: > > List_en_vrac, l'élément 17 (listIndex) est modifié > Tu fais pointeur_fichier = ((longueur * 16) + 1) = écrit > list_vrac.list(listIndex) dans fichier à cet endroit... > Ok ???
ok je prends note mais maintenant c'est bon, je ne suis pas à 1/10 de secondes là ;-) Mais 11s pour 1350 lignes, ça faisait quand même un peu long ! Maintenant, c'est moins d'une seconde donc plutôt satisfaisant.
> J'ai oublié hier, j'ai vu un truc, tu avais fait: > > for.... > if x = y then goto label > next > label: > > Ben non, il faut faire (il y a une instruction): > Exit for
Exact. Merci, c'est bien ce qui me semblait ;-)
-- Franck
F. David
le_troll wrote:
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau ta question, car là elle commence à baisser sérieusement :o)
Ah bon, chez moi, il est bien haut ;-) ok pas de problème.
Sinon, tu vas je présume sauvegarder tes données saisies ensuite, alors le binaire sera le bon mode d'accès, car il permet de pointer pile et de modifier...
Pour pointer pile, j'utilise la classe CFile qui est très pratique je trouve. C'est un des intervenants de ce ng qui l'a mise au point mais je ne sais plus qui. Tu dois connaître, je suppose.
-- Franck
le_troll wrote:
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau
ta question, car là elle commence à baisser sérieusement :o)
Ah bon, chez moi, il est bien haut ;-) ok pas de problème.
Sinon, tu vas je présume sauvegarder tes données saisies ensuite,
alors le binaire sera le bon mode d'accès, car il permet de pointer
pile et de modifier...
Pour pointer pile, j'utilise la classe CFile qui est très pratique je
trouve. C'est un des intervenants de ce ng qui l'a mise au point mais je
ne sais plus qui. Tu dois connaître, je suppose.
OK, si tu reposes d'autres questions, veux-tu bien formuler à nouveau ta question, car là elle commence à baisser sérieusement :o)
Ah bon, chez moi, il est bien haut ;-) ok pas de problème.
Sinon, tu vas je présume sauvegarder tes données saisies ensuite, alors le binaire sera le bon mode d'accès, car il permet de pointer pile et de modifier...
Pour pointer pile, j'utilise la classe CFile qui est très pratique je trouve. C'est un des intervenants de ce ng qui l'a mise au point mais je ne sais plus qui. Tu dois connaître, je suppose.