Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Effacement dans 1 ListBox

5 réponses
Avatar
Pascal
Bonjour , ai un soucis avec le code suivant, il est censé geré l'effacement
d'une liste ( ce qu'il fait très bien) le problème vient de manière
alétaoire une fois tous X click
le problème qui survient est : plustôt que de passer à l'index suivant il
saute 2 index
Ai essayé de réduire ce code à 2 lignes pour tester
IndexPrécédent= lstTest.listindex
listTest1.removeitem (lstTest.ListIndex)
lstTest.listIndex = Indexprécédent
et bien le problème est le même!!!!!!!!!!
VB6 à un bug connu concernant les listes?
Merci de votre aide
Pascal


A tout hasard voici mon code:
===========================================
Private Sub cmEffacer_Click()
Dim indexPrécédent As Integer
Dim Ecart As Integer

With Me.LstTest

'si la liste est vide il n'y a rien à effacer...
If .ListCount = 0 Then
GoTo suivant
Else
'la liste contient au moins 1 élement
'enlève l'élement selectionné
indexPrécédent = .ListIndex
Ecart = (.ListCount - 1) - indexPrécédent
.RemoveItem (.ListIndex)


'repositionnement de l'index
'la liste est-elle vide après effacement de l'item?
If .ListCount = 0 Then
'envoie un message
lblTitre.Caption = Msg(3)
GoTo suivant
Else
' si on est sur le dernier item de la liste
If .ListCount = 1 Then
.ListIndex = 0
Else
'sinon on se repositionne sur l'ancien index
'si on n'est pas au dernier
If Ecart = 0 Then
.ListIndex = indexPrécédent - 1
Else
.ListIndex = indexPrécédent
End If 'Ecart
End If 'listcount =1
End If 'listcount = 0
End If

End With
suivant:
'affiche le nombre d'item
lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
End Sub

5 réponses

Avatar
X
Bonjour,

Tiens, ça, ça devrait marcher:

Sub Command1_Click() ' suppression index
Dim ou As Integer
On Error Resume Next
ou = List1.ListIndex
List1.RemoveItem ou
List1.Refresh
List1.ListIndex = ou ' index nouveau = ancien
End Sub


--
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Pascal" a écrit dans le message de news:

Bonjour , ai un soucis avec le code suivant, il est censé geré
l'effacement
d'une liste ( ce qu'il fait très bien) le problème vient de manière
alétaoire une fois tous X click
le problème qui survient est : plustôt que de passer à l'index suivant il
saute 2 index
Ai essayé de réduire ce code à 2 lignes pour tester
IndexPrécédent= lstTest.listindex
listTest1.removeitem (lstTest.ListIndex)
lstTest.listIndex = Indexprécédent
et bien le problème est le même!!!!!!!!!!
VB6 à un bug connu concernant les listes?
Merci de votre aide
Pascal


A tout hasard voici mon code:
========================================== > Private Sub cmEffacer_Click()
Dim indexPrécédent As Integer
Dim Ecart As Integer

With Me.LstTest

'si la liste est vide il n'y a rien à effacer...
If .ListCount = 0 Then
GoTo suivant
Else
'la liste contient au moins 1 élement
'enlève l'élement selectionné
indexPrécédent = .ListIndex
Ecart = (.ListCount - 1) - indexPrécédent
.RemoveItem (.ListIndex)


'repositionnement de l'index
'la liste est-elle vide après effacement de l'item?
If .ListCount = 0 Then
'envoie un message
lblTitre.Caption = Msg(3)
GoTo suivant
Else
' si on est sur le dernier item de la liste
If .ListCount = 1 Then
.ListIndex = 0
Else
'sinon on se repositionne sur l'ancien index
'si on n'est pas au dernier
If Ecart = 0 Then
.ListIndex = indexPrécédent - 1
Else
.ListIndex = indexPrécédent
End If 'Ecart
End If 'listcount =1
End If 'listcount = 0
End If

End With
suivant:
'affiche le nombre d'item
lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
End Sub



Avatar
Hello,
Dans ta procedure d'effacement, tu utilise l'objet "listTest1" pour la
suppression alors que tu utilises l'objet "lstTest" pour récupérer l'indice.
Lorsque tu supprime le dernier élément de la liste, il y a une erreur
(dernier indice = 4, si tu le supprimes, alors le dernier indice est 3).

Ne serait-il pas plus "logique" qu'en cas de suppression, d'oter tout
simplement la sélection ?
De plus, si aucun élément n'est sélectionné et si ta procédure est exécuté..
ca va planter.

A ta place, je ferait simple.. Enfin si ca convient au mode de
fonctionnement de ton "cahier des charges".
If (lstTest.ListIndex >= 0) Then
lstTest.RemoveItem (lstTest.ListIndex)
End If

"Pascal" a écrit dans le message de
news:
Bonjour , ai un soucis avec le code suivant, il est censé geré


l'effacement
d'une liste ( ce qu'il fait très bien) le problème vient de manière
alétaoire une fois tous X click
le problème qui survient est : plustôt que de passer à l'index suivant il
saute 2 index
Ai essayé de réduire ce code à 2 lignes pour tester
IndexPrécédent= lstTest.listindex
listTest1.removeitem (lstTest.ListIndex)
lstTest.listIndex = Indexprécédent
et bien le problème est le même!!!!!!!!!!
VB6 à un bug connu concernant les listes?
Merci de votre aide
Pascal


A tout hasard voici mon code:
========================================== > Private Sub cmEffacer_Click()
Dim indexPrécédent As Integer
Dim Ecart As Integer

With Me.LstTest

'si la liste est vide il n'y a rien à effacer...
If .ListCount = 0 Then
GoTo suivant
Else
'la liste contient au moins 1 élement
'enlève l'élement selectionné
indexPrécédent = .ListIndex
Ecart = (.ListCount - 1) - indexPrécédent
.RemoveItem (.ListIndex)


'repositionnement de l'index
'la liste est-elle vide après effacement de l'item?
If .ListCount = 0 Then
'envoie un message
lblTitre.Caption = Msg(3)
GoTo suivant
Else
' si on est sur le dernier item de la liste
If .ListCount = 1 Then
.ListIndex = 0
Else
'sinon on se repositionne sur l'ancien index
'si on n'est pas au dernier
If Ecart = 0 Then
.ListIndex = indexPrécédent - 1
Else
.ListIndex = indexPrécédent
End If 'Ecart
End If 'listcount =1
End If 'listcount = 0
End If

End With
suivant:
'affiche le nombre d'item
lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
End Sub



Avatar
Pascal
hello Thierry,
merci pour ta réponse
mais dans mon code je n'utilise pas l'objet list1???
sauf dans ceci ou j'expliquai que j'avais essayé de réduire et ou j'ai fait
une erreur de retranscription
le code réel est plus loin
> Ai essayé de réduire ce code à 2 lignes pour tester
> IndexPrécédent= lstTest.listindex
> listTest1.removeitem (lstTest.ListIndex) ' IL FAUT LIRE BIEN SUR lstTest


au lieu de listTest1
> lstTest.listIndex = Indexprécédent


======= > De plus, si aucun élément n'est sélectionné et si ta procédure est
exécuté..
ca va planter


euh non pas du tout! soit la liste est vide et rien n'est exécuté, soit elle
contient au minimum 1 élément et l'index est d'office postionné sur le
premier! au remplissage de la liste

Mon code fonctionne très bien (pas sorcier comme code non plus) mais
survient quand on l'utilise à répétition toutes les 4 à 5 secondes et toutes
les X fois (alétoire)

je cherche, je cherche
merci
Pascal



a écrit dans le message de
news:
Hello,
Dans ta procedure d'effacement, tu utilise l'objet "listTest1" pour la
suppression alors que tu utilises l'objet "lstTest" pour récupérer


l'indice.
Lorsque tu supprime le dernier élément de la liste, il y a une erreur
(dernier indice = 4, si tu le supprimes, alors le dernier indice est 3).

Ne serait-il pas plus "logique" qu'en cas de suppression, d'oter tout
simplement la sélection ?
De plus, si aucun élément n'est sélectionné et si ta procédure est


exécuté..
ca va planter.

A ta place, je ferait simple.. Enfin si ca convient au mode de
fonctionnement de ton "cahier des charges".
If (lstTest.ListIndex >= 0) Then
lstTest.RemoveItem (lstTest.ListIndex)
End If

"Pascal" a écrit dans le message de
news:
> Bonjour , ai un soucis avec le code suivant, il est censé geré
l'effacement
> d'une liste ( ce qu'il fait très bien) le problème vient de manière
> alétaoire une fois tous X click
> le problème qui survient est : plustôt que de passer à l'index suivant


il
> saute 2 index
> Ai essayé de réduire ce code à 2 lignes pour tester
> IndexPrécédent= lstTest.listindex
> listTest1.removeitem (lstTest.ListIndex)
> lstTest.listIndex = Indexprécédent
> et bien le problème est le même!!!!!!!!!!
> VB6 à un bug connu concernant les listes?
> Merci de votre aide
> Pascal
>
>
> A tout hasard voici mon code:
> ========================================== > > Private Sub cmEffacer_Click()
> Dim indexPrécédent As Integer
> Dim Ecart As Integer
>
> With Me.LstTest
>
> 'si la liste est vide il n'y a rien à effacer...
> If .ListCount = 0 Then
> GoTo suivant
> Else
> 'la liste contient au moins 1 élement
> 'enlève l'élement selectionné
> indexPrécédent = .ListIndex
> Ecart = (.ListCount - 1) - indexPrécédent
> .RemoveItem (.ListIndex)
>
>
> 'repositionnement de l'index
> 'la liste est-elle vide après effacement de l'item?
> If .ListCount = 0 Then
> 'envoie un message
> lblTitre.Caption = Msg(3)
> GoTo suivant
> Else
> ' si on est sur le dernier item de la liste
> If .ListCount = 1 Then
> .ListIndex = 0
> Else
> 'sinon on se repositionne sur l'ancien index
> 'si on n'est pas au dernier
> If Ecart = 0 Then
> .ListIndex = indexPrécédent - 1
> Else
> .ListIndex = indexPrécédent
> End If 'Ecart
> End If 'listcount =1
> End If 'listcount = 0
> End If
>
> End With
> suivant:
> 'affiche le nombre d'item
> lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
> End Sub
>




Avatar
Pascal
Bonsoir x,
merci pour ta réponse
mais j'ai toujours le même problème
bizarre cette affaire là
Pascal

"X" a écrit dans le message de
news:
Bonjour,

Tiens, ça, ça devrait marcher:

Sub Command1_Click() ' suppression index
Dim ou As Integer
On Error Resume Next
ou = List1.ListIndex
List1.RemoveItem ou
List1.Refresh
List1.ListIndex = ou ' index nouveau = ancien
End Sub


--
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"Pascal" a écrit dans le message de news:

> Bonjour , ai un soucis avec le code suivant, il est censé geré
> l'effacement
> d'une liste ( ce qu'il fait très bien) le problème vient de manière
> alétaoire une fois tous X click
> le problème qui survient est : plustôt que de passer à l'index suivant


il
> saute 2 index
> Ai essayé de réduire ce code à 2 lignes pour tester
> IndexPrécédent= lstTest.listindex
> listTest1.removeitem (lstTest.ListIndex)
> lstTest.listIndex = Indexprécédent
> et bien le problème est le même!!!!!!!!!!
> VB6 à un bug connu concernant les listes?
> Merci de votre aide
> Pascal
>
>
> A tout hasard voici mon code:
> ========================================== > > Private Sub cmEffacer_Click()
> Dim indexPrécédent As Integer
> Dim Ecart As Integer
>
> With Me.LstTest
>
> 'si la liste est vide il n'y a rien à effacer...
> If .ListCount = 0 Then
> GoTo suivant
> Else
> 'la liste contient au moins 1 élement
> 'enlève l'élement selectionné
> indexPrécédent = .ListIndex
> Ecart = (.ListCount - 1) - indexPrécédent
> .RemoveItem (.ListIndex)
>
>
> 'repositionnement de l'index
> 'la liste est-elle vide après effacement de l'item?
> If .ListCount = 0 Then
> 'envoie un message
> lblTitre.Caption = Msg(3)
> GoTo suivant
> Else
> ' si on est sur le dernier item de la liste
> If .ListCount = 1 Then
> .ListIndex = 0
> Else
> 'sinon on se repositionne sur l'ancien index
> 'si on n'est pas au dernier
> If Ecart = 0 Then
> .ListIndex = indexPrécédent - 1
> Else
> .ListIndex = indexPrécédent
> End If 'Ecart
> End If 'listcount =1
> End If 'listcount = 0
> End If
>
> End With
> suivant:
> 'affiche le nombre d'item
> lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
> End Sub
>




Avatar
Pascal
Bonsoir à vous,
voilà ai trouvé le problème vient d'un paramètre d'un timer (erreur de
programmation)
milles excuses mais merci pour votre dévouement
Pascal

"Pascal" a écrit dans le message de
news:
hello Thierry,
merci pour ta réponse
mais dans mon code je n'utilise pas l'objet list1???
sauf dans ceci ou j'expliquai que j'avais essayé de réduire et ou j'ai


fait
une erreur de retranscription
le code réel est plus loin
> > Ai essayé de réduire ce code à 2 lignes pour tester
> > IndexPrécédent= lstTest.listindex
> > listTest1.removeitem (lstTest.ListIndex) ' IL FAUT LIRE BIEN SUR


lstTest
au lieu de listTest1
> > lstTest.listIndex = Indexprécédent
======= > > De plus, si aucun élément n'est sélectionné et si ta procédure est
exécuté..
> ca va planter
euh non pas du tout! soit la liste est vide et rien n'est exécuté, soit


elle
contient au minimum 1 élément et l'index est d'office postionné sur le
premier! au remplissage de la liste

Mon code fonctionne très bien (pas sorcier comme code non plus) mais
survient quand on l'utilise à répétition toutes les 4 à 5 secondes et


toutes
les X fois (alétoire)

je cherche, je cherche
merci
Pascal



a écrit dans le message de
news:
> Hello,
> Dans ta procedure d'effacement, tu utilise l'objet "listTest1" pour la
> suppression alors que tu utilises l'objet "lstTest" pour récupérer
l'indice.
> Lorsque tu supprime le dernier élément de la liste, il y a une erreur
> (dernier indice = 4, si tu le supprimes, alors le dernier indice est 3).
>
> Ne serait-il pas plus "logique" qu'en cas de suppression, d'oter tout
> simplement la sélection ?
> De plus, si aucun élément n'est sélectionné et si ta procédure est
exécuté..
> ca va planter.
>
> A ta place, je ferait simple.. Enfin si ca convient au mode de
> fonctionnement de ton "cahier des charges".
> If (lstTest.ListIndex >= 0) Then
> lstTest.RemoveItem (lstTest.ListIndex)
> End If
>
> "Pascal" a écrit dans le message de
> news:
> > Bonjour , ai un soucis avec le code suivant, il est censé geré
> l'effacement
> > d'une liste ( ce qu'il fait très bien) le problème vient de manière
> > alétaoire une fois tous X click
> > le problème qui survient est : plustôt que de passer à l'index suivant
il
> > saute 2 index
> > Ai essayé de réduire ce code à 2 lignes pour tester
> > IndexPrécédent= lstTest.listindex
> > listTest1.removeitem (lstTest.ListIndex)
> > lstTest.listIndex = Indexprécédent
> > et bien le problème est le même!!!!!!!!!!
> > VB6 à un bug connu concernant les listes?
> > Merci de votre aide
> > Pascal
> >
> >
> > A tout hasard voici mon code:
> > ========================================== > > > Private Sub cmEffacer_Click()
> > Dim indexPrécédent As Integer
> > Dim Ecart As Integer
> >
> > With Me.LstTest
> >
> > 'si la liste est vide il n'y a rien à effacer...
> > If .ListCount = 0 Then
> > GoTo suivant
> > Else
> > 'la liste contient au moins 1 élement
> > 'enlève l'élement selectionné
> > indexPrécédent = .ListIndex
> > Ecart = (.ListCount - 1) - indexPrécédent
> > .RemoveItem (.ListIndex)
> >
> >
> > 'repositionnement de l'index
> > 'la liste est-elle vide après effacement de l'item?
> > If .ListCount = 0 Then
> > 'envoie un message
> > lblTitre.Caption = Msg(3)
> > GoTo suivant
> > Else
> > ' si on est sur le dernier item de la liste
> > If .ListCount = 1 Then
> > .ListIndex = 0
> > Else
> > 'sinon on se repositionne sur l'ancien index
> > 'si on n'est pas au dernier
> > If Ecart = 0 Then
> > .ListIndex = indexPrécédent - 1
> > Else
> > .ListIndex = indexPrécédent
> > End If 'Ecart
> > End If 'listcount =1
> > End If 'listcount = 0
> > End If
> >
> > End With
> > suivant:
> > 'affiche le nombre d'item
> > lblNbrTest.Caption = Me.LstTest.ListCount & " Titres"
> > End Sub
> >
>
>