Si ListView2.ListItems().SubItems(1) = zero

Résolu
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 1 mars 2010 à 17:35
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 - 2 mars 2010 à 17:58
Bonjour à tous,


Pourriez-vous m?aider pour ce petit problème.

J'ai une listview2 avec dans :

ListView2.ListItems().Add() des références
ListView2.ListItems().SubItems(1) des chiffres.

Comment faire pour que si ListView2.ListItems().SubItems(1) = 0(zero le chiffre) effacer la ligne complète ?


Merci d'avance.

22 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 23:05
trop,k c'est trop ...
regarde ce que tu as écrit (ainsi que ce que j'ai mis en regard, en commentaires) :

For r = ListView1.ListItems.Count - 1 To 0 Step -1
i = 0 ' <<<<<==== a quoi diable sert cette variable i ? Tu ne l'utilises d'ailleurs pas !
If ListView1.ListItems(r).SubItems(1) <> "0" Then '<<<=== à quoi diable sert cette condition, puisque tu n'en fais rien ?

Else

While Not (ListView1.ListItems(r).SubItems(1) <> "0")


ListView1.ListItems.Remove (r) ' <<<=== ah ? et tu le supprimes combien de fois, cet index r ? autant de fois que de subitems ?

i = i + 1 '<<<<===  voir plus ghaut ! à quoi diable sert ce compteur avec i ?

Wend

End If
Next


Tu voudras bien s'il te plait comprendre qu'il ne s'agit pas d'animosité de ma part, mais tout simplement de la prise de conscience de ce que ce que tu attends est le code tout fait, sans même le comprendre (exactement comme tu n'analyses déjà pas la portée de ce que tu écris toi-même).
Si je faisais ce que tu attends, je te rendrais le pire des services et tu n'avancerais ensuite que de cette manière : en demandant, en copiant, en collant ... (ce n'est là ni mon but ni ma tasse de thé).
Désolé
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 18:15
Nonjour,
lorsque tu frappes dans ton code :
listview2.listitems.
apparaît une petite fenêtre de propositions, parmi lesquelles la méthode Remove !
si tu frappes alors Remove ===>>
listview2.listitems.remove suivi d'un espace, apparaît alors une seule proposition : "(Index)"
Cela ne te parle pas ?
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 18:20
D'une manière plus générale :
La méthode remove(index) s'applique à toute collection.
Listitems est une collection. Subitems est également une collection

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
1 mars 2010 à 18:34
Merci pour ta réponse,


Voilà le code que j'ai tapé
Mais il ne fonctionne pas comme je veux.



Petite précision le sorted de la listview2 est à False.


Dim r As Long


For r = 1 To ListView2.ListItems.Count
If ListView2.ListItems(r).SubItems(1) = "0" Then
ListView2.ListItems.Remove (r)

Else
Exit For

End If
   Next




As-tu une idée.


Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 18:50
Si j'ai une idée ?
B& ... oui ...
Tu écris :
Else 
  exit For
end if

Ce qui veut dire que ta boucle est quittée dès le 1er ListView2.ListItems(r).SubItems(1)<> 0
Tu plaisantes ?


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
1 mars 2010 à 19:20
Désolé mais je ne plaisante pas.

A quel endroit dois-je mettre exit for pour que cela fonctionne ?

Si je le supprime il y a un message « index hors limite » ?


Merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 20:46
Je crois vraiment que tu plaisantes !
1) Le contraire serait extrêmement inquiétant ! (réfléchis un peu... un tout petit peu... un milliardième de chouïa... Quand même ! quitter une boucle ainsi, probablement dès le 1er r... et s'étonner de son non fonctionnement ... C'est tout sauf la démonstration de la compréhension de ce que l'on fait .... Je dirais même sans la moindre hésitation que c'est carrément du n'importe quoi ... Excuse-moi, mais il n'y a pas d'autres mots et il faut qu'ils soient dits, désolé !)
2) tu as un message "index hors limite" et ta "remèdee" consiste à quitter dès la 1ère valeur différente de 0, hein ? Tu te rends compte de ce que tu fais ? Oui ? Non ? (je m'interroge sérieusement sur le sérieux qui est le tien !). ===>> sui c'est là le genre de remède que tu privilégies, j'en connais un autre, moi... ne pas faire de boucle, ne pas faire de test.... et tiens .0.. ne pas faire d'appli !
3) son 1er indice étant 0, une listview de 2 articles a :
- pour ListView2.ListItems.Count : la valeur 2
- pour indices : l'indice 0 et l'indice 1 (donc listview2.listitems.count -1) et non 2
Lis, relis, re-relis tout ce que je viens d'écrire et sors vite (j'espère) de ton mirage !
Sui, malgré tout cela, tu ne t'(en sors pas, pardonne-moi, mais à défaut de te retrouver totalement seul, tu ne m'auras personnellement plus à tes côtés (c'est ainsi !)

Désolé de me montrer aussi sec, aussi dur... mais je ne trouve pas d'autre moyen pour te sortir de ce que j'appelle sans hésitation : une torpeur effrayante !
Bonne chance.



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
1 mars 2010 à 21:53
Non malheureusement je ne plaisante pas !

1)Tu as une manière bien étrange d'aider les gens, d'autant plus que tu m?as aidé plus fois sur VBFRANCE sans jamais te mettre en boule sans raison ? ( Je ne vois pas l'intérêt)
2)Concernant mon sérieux n'est aucun doute vu mon métier je n'ai pas droit à l'erreur.
3)Pour moi la programmation c'est très récent et cela reste une manière de décompresser, à mon avis tu prends cela trop au sérieux(Fait attention à l'ulcère)

Bonne soirée.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 22:08
Ce n'est quand même pas difficile dse lire et de comprendre !

For r = 1 To ListView2.ListItems.Count - 1


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 22:09
pardon (l'énervement ...) :
For r = 0 To ListView2.ListItems.Count - 1


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2010 à 22:17
Et de surcroît : quand on supprime dans une boucle for to next (dit mille et une fois) : on commence àpar le bas et on remonte (de sorte à éviter de tomber sur un index qui n'existe plus, c'est évidentr) ===>> donc ===>>
For r = ListView2.ListItems.Count - 1
to 0 step -1

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
1 mars 2010 à 22:44
Merci à toi de continuer à m?aider.

Effectivement cela fonctionne mieux.

Par contre si t?envoie mon code car j'ai un problème.

Si la dernière référence contient un zéro alors il n'est pas supprimé ?

As-tu une idée ?

Private Sub Form_Load()

' Initialisation Listview1
With ListView1
.MultiSelect = True ' Sélection de plusieurs lignes
.HideSelection = False ' Même sans le focus, la sélection reste
.FullRowSelect = True ' Sélectionne la ligne entière
.GridLines = True ' Affiche les lignes de la grille
.View = lvwReport ' Affichage en grille
'--------------------------------------------------------------------------
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne

.ColumnHeaders(1).Text = "Réfèrence " ' Spécifie la caption de la première colonne
.ColumnHeaders(1).Width = .Width / 4
.ColumnHeaders(2).Text = "GGGGG" ' Spécifie la caption de la deuxième colonne
.ColumnHeaders(2).Width = .Width / 4

.Arrange = lvwAutoLeft ' Range tout à gauche
End With




' Chargement de la Listview 1
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Test"
.SubItems(1) = "0"

End With


Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "zozo5"
.SubItems(1) = "0"

End With

Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Titi"
.SubItems(1) = "3"

End With

Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "zozo"
.SubItems(1) = "1"

End With

Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Test"
.SubItems(1) = "0"

End With

Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Titi"
.SubItems(1) = "7"

End With

Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "BiBi"
.SubItems(1) = "0"
End With

End Sub

Private Sub Command6_Click()
On Error Resume Next


Dim r As Long

For r = ListView1.ListItems.Count - 1 To 0 Step -1
i = 0
If ListView1.ListItems(r).SubItems(1) <> "0" Then

Else

While Not (ListView1.ListItems(r).SubItems(1) <> "0")


ListView1.ListItems.Remove (r)

i = i + 1

Wend

End If
Next

End Sub




Merci
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
1 mars 2010 à 23:13
Oui effectivement cette variable ne serve à rien ainsi que ce compteur,


Merci bien pour ta patience, mais voilà je ne suis peut être pas fait pour la programmation ?


Bonne soirée
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2010 à 08:11
mais voilà je ne suis peut être pas fait pour la programmation

Pas d'"accord !
Chacun d'entre nous est fait pour cette activité. Le cerveau lui-même passe tout son temps à ce "sport".
Pour le reste, ce n'est qu'une question de goûts, de couleurs, d'envie et de choix personnel.
Ce "sport" ne demande que de la réflexion et la volonté de réfléchir (au moins celle de ne faire que des pas dans le cadre d'un raisonnement et d'une logique - comme pour toute autre chose - !
Il te suffit de recommencer, mais par les bases et avec méthode !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2010 à 08:28
Mon conseil, Sancho :
- ré-apprends l'essentiel des bases
- force-toi à agir au maximum par toi-même. (Cesse de "solutionner" chaque difficulté par l'ouverture d'une discussion et la copie de ce que tu y récoltes).
Aide-toi au besoin par un crayon et une feuille de papier : utilise-les pour mettre noir sur blanc la logique (pseudo-algorithme) du mécanisme à mettre en oeuvre.
Utilise sans modération, )à chaque pas, ton aide en ligne (MSDN)
Prends l'habitude de ne solliciter une aide qu'en dernier recours et face à une difficulté "sortant de l'ordinaire ".
Lorsque tu reçois une aide : analyse-la à fond (à nouveau feuille de papier et crayon), jusqu'à ce qu'elle ne soit plus pour toi un simple ensemble étrange de lignes de codes ...
Voilà tout ! En d'autres termes : on ne devient pas footballeur en se contentant de regarder des matches à la télévision !
Je suyis certain de ce que tu peux y parvenir, si tu le VEUX !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
2 mars 2010 à 09:04
Merci pour tes conseils ucfoutu,

Tu as 1000 fois raisons je suis entièrement d'accord certes il me manque sûrement les bases mais dans mon cas et dans ce petit problème, le temps joue contre moi, c'est pour cette raison que j'ai sollicite VbFrance.

Mais tu sais je m?efforce déjà, et je passe beaucoup de temps a travailler seul mais il m?arrive quelques fois de tourner en rond !

Je lâche très rarement donc je n'ai aucun doute que je peux y parvenir.

Encore merci et bonne journée.
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
2 mars 2010 à 16:32
salut

dim r as long
for r = listview.listitems.count to 1 step -1
if listview.listitems(r).subitems(1) = "0" then listview.listitems.remove(r)
next


normalement c'est tout ce que tu cherche je vois pas pourquoi toute cette conversation


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2010 à 17:23
J'espère pour lui, Claiyah, qu'il l'a déjà trouvée seul, cette syntaxe (il en avait tous les ingrédients) ...
Il est vrai que si cette syntaxe lui avait été donnée d'emblée (en dépit de ses tentatives sans sens), il aurait gagné du temps, mais aurait continuer, à chaque futur pas, à traiter la totalité de ses problèmes de la même "manière", sans jamais commencer à commencer à commencer à progresser.
Tu poses décidément un autre regard que moi sur la manière d'aider réellement à développer ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
2 mars 2010 à 17:32
si je me suis intervenu c'est parce que le sujet devient long et il parait qu'il est pressé lol
dans tout les cas j'espère aussi qu'il l'a trouvé seule
a+


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
2 mars 2010 à 17:33
et comme il a dit il est nouveau dans la programmation donc on fera mieux de l'aider et l'encourager et pas le contraire.
enfin sa reste mon avis personnel et chacun a sa propre manière de voire les choses



Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
0
Rejoignez-nous