Cree un fichier avec les donnees d'une listview

Résolu
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022
- Modifié le 20 juin 2022 à 16:40
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022
- 23 juin 2022 à 07:31
Bonjour,

J'ai réussi a crée un fichier csv et a écrire les données de la listview, maintenant je voudrais écrire que les données qui ont la valeur 1 dans la colonne 5 de la listview comment je peux faire ?


 Call sauvegardercommande(ListView, c:\test.csv")


Dim build As New Text.StringBuilder()
        Dim nelement As Integer = liste.Items.Count

        For Each element As ListViewItem In liste.Items
            For i As Integer = 0 To liste.Columns.Count - 1
               If liste.Items(i).SubItems(5).Text <> "0" Then
'ecrire un autre fichier cvs 
                End If


 build.Append(element.SubItems(i).Text)
                If (i < liste.Columns.Count - 1) Then
                    build.Append(";")
                End If
            Next
            build.Append(vbCrLf)
        Next

20 réponses

Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
20 juin 2022 à 16:40
Si tu avais appliqué ce qu'on te dit depuis des mois
  • ne pas mélanger vb6 et vb.net (call n'existe pas en vb.net, pire il ralentit l'exécution....)
  • écrire des classes métiers et stocker tes données dans des collections de ces classes
  • les contrôles ne servent qu'à afficher et interagir avec l'utilisateur


Ces 12 lignes tiendraient en 2 lignes concises et claires. Pas de boucles, pas de subitem, pas de stringbuilder....Une requête Linq et c'est tout.
De plus, placer une condition d'exportation serait un jeu d'enfants..... une toute petite modification de la requête.

Mais von puisque tu persistes à bidouiller, il va te falloir incorporer ta conduite entre tes 2 for each
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 20 juin 2022 à 17:11
Merci je comprend whismeril pour un expert ça brule les yeux mais des que j'arrive a faire un truc je suis content, est il est vrai que ça demande énormément de temps , donc j'apprend au fur et a mesure.
Comment tu procéderais ? je dois utiliser une classe pour pouvoir filtrer ?
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
20 juin 2022 à 17:33
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

21 juin 2022 à 09:11
Ok je vais tout refaire
juste pour comprendre

Dim build As New Text.StringBuilder()
        Dim nelement As Integer = liste.Items.Count

        For Each element As ListViewItem In liste.Items
            For i As Integer = 0 To liste.Columns.Count - 1
                If liste.Items(i).SubItems(5).Text <> "0" Then           
                    build.Append(element.SubItems(i).Text)

                    If (i < liste.Columns.Count - 1) Then
                        build.Append(";")
                    End If
                End If
            Next
            build.Append(vbCrLf)
        Next


Pour la ligne If liste.Items(i).SubItems(5).Text <> "0" erreur invalidargument=la valeur1 n'est pas valide pour index c'est quoi ?
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
21 juin 2022 à 09:31
Que vaut i quand ça plante?
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

21 juin 2022 à 09:39
si j'ai 2 lignes ça plante a i=2 si j'ai une ligne ça plante a i=1
0

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

Posez votre question
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
21 juin 2022 à 11:13
Ha ben oui, tu ne te sers pas de la variable element et donc tu itères les lignes de ta listview avec le nombre de colonnes.
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

21 juin 2022 à 13:49
il vaut mieux crée le fichier puis lire la ligne de la listview et l'écrire dans le fichier ou lire toute la listview cree une list et ecrire dans le fichier ?
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 21 juin 2022 à 15:07
Comment je peux ecrire dans un fichier quand j'ai element.SubItems(5).Text = 1 je voudrais ecrire la ligne de la listview

Dim build As New Text.StringBuilder()
        Dim nelement As Integer = liste.Items.Count

        For Each element As ListViewItem In liste.Items
            For i As Integer = 0 To liste.Columns.Count - 1


                If element.SubItems(5).Text <> "0" Then
                    MsgBox(element.SubItems(5).Text)
                    MsgBox("good")
                Else
                    MsgBox("nogood")

                End If
                build.Append(element.SubItems(i).Text)
                If (i < liste.Columns.Count - 1) Then
                    build.Append(";")
                End If
            Next
            build.Append(vbCrLf)
        Next
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
21 juin 2022 à 15:42
Tu testes et exporte les subitems de "element" pas de liste.
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

22 juin 2022 à 07:43
un petit coup de pouce je galère depuis hier si il faut c'est simple
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
22 juin 2022 à 08:12
Je te l'ai dis dès ma première réponse, entre te 2 for each, tu testes la colonne qui va bien de la variable élément.
Si c'est Ok tu fais le second for each, si non tu ne fais rien
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 22 juin 2022 à 10:55
J'ai bien la variable element ou je viens lire la colonne avec element.Items(i).SubItems(5).Text
For Each element As ListViewItem In liste.Items
            If element.Items(i).SubItems(5).Text <> "0 then
            For i As Integer = 0 To liste.Columns.Count - 1             
                build.Append(element.SubItems(i).Text)
                If (i < liste.Columns.Count - 1) Then
                    build.Append(";")
                End If
            Next
            End If
            build.Append(vbCrLf)
        Next
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
22 juin 2022 à 11:38
Ecoute, au risque de me répéter tant que tu n.auras pas acquis les bases, tu ne pourras pas coder correctement.

Tapper des trucs au hasard ça ne marche pas.

La variables element est un item de listview et ça tu devrais le savoir puisque tu l'as déclaré comme tel.

Un listviewitem ne possède pas de propriété item et i n'a rien à faire là.

Les for et pes for each c'est la base des algorithmes répétitifs, tant que tu n'auras pas compris ce que ça fait tu n'arriveras pas à les rédiger correctement.

En février je t'ai conseillé de lire le cours de Tahé, j'ai du te dire que ça te prendrais quelques jours mais qu'après tu allais gagner un temps fou.

Sur ce point tu aurais déjà gagné 2 jours.
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

22 juin 2022 à 12:05
Je pense si je veux faire quelque chose de propre je vais ajouter les elements qui on un 1 dans une liste stock et je vais faire une autre liste pour la totalité et après ecrire le fichier text, c'est plus logique que mon derniere code.

Dim stock= New List(Of String)

        For boucle = 0 To ListView.Items.Count - 1

            If ListView.Items(boucle).SubItems(5).Text = "1" Then
                stock.Add(ListViewposte.Items(boucle).SubItems(0).Text)
                stock.Add(ListViewposte.Items(boucle).SubItems(1).Text)
                stock.Add(ListViewposte.Items(boucle).SubItems(2).Text)
                stock.Add(ListViewposte.Items(boucle).SubItems(3).Text)
                stock.Add(ListViewposte.Items(boucle).SubItems(4).Text)
            End If
        Next
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
22 juin 2022 à 12:31
Non, ce qui serait logique c'est que tu apprennes et comprennes comment marche un for each
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

22 juin 2022 à 13:54
Apres avoir mangé et relu quelque base ça va mieux j'étais parti dans un délire.
For Each element As ListViewItem In liste.Items

            If element.SubItems(5).Text <> "0" Then
            Else
                For i As Integer = 0 To liste.Columns.Count - 1
                    build.Append(element.SubItems(i).Text)
                    If (i < liste.Columns.Count - 1) Then
                        build.Append(";")
                    End If

                Next
            End If

            build.Append(vbCrLf)
        Next
0
Whismeril
Messages postés
17467
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 juin 2022
599
22 juin 2022 à 14:15
Là c'est mieux, mais avoir un "then" vide pour n'utiliser que le "else" c'est pas encore le mieux.

Surtout que là, tes données ne seront exportées que si la colonne 5 vaut 0 et j'ai cru comprendre que ce n'est pas ce que tu veux
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

22 juin 2022 à 15:07
Oui j'avais pas fini mon code, je pense que tu va hurler mais bon je me lance. Pour moi c ultra dur.
la j'ai compris ça fonctionne. fichier1 la ligne avec les valeurs 1 de la colonne 5 ,fichier 2 la ligne avec les valeurs 0.
Maintenant je vais essayer de fichier1 valeur 1 et fichier 2 valeur 1 et 0

For Each element As ListViewItem In liste.Items

            If element.SubItems(5).Text = "0" Then
                For ii As Integer = 0 To liste.Columns.Count - 1
                    build1.Append(element.SubItems(ii).Text)
                    If (ii < liste.Columns.Count - 1) Then
                        build1.Append(";")
                    End If
                Next
                build1.Append(vbCrLf)
            Else
                For i As Integer = 0 To liste.Columns.Count - 1
                    build.Append(element.SubItems(i).Text)
                    If (i < liste.Columns.Count - 1) Then
                        build.Append(";")
                    End If
                Next
                build.Append(vbCrLf)
            End If

        Next
        Try
            IO.File.WriteAllText(T:\test\fichier1.csv, build1.ToString())
            IO.File.WriteAllText("T:\test\fichier2.csv", build.ToString())
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

22 juin 2022 à 15:20
J'ai supprimé le call qui n'ai pas du VB j'avais Sub sauvegardercommande(ByVal liste As ListView, ByVal fichier As String) du coup je le supprime et je declare dim liste as listview je pense que c'est ça le probléme.

0
vb95
Messages postés
2774
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 juin 2022
151
22 juin 2022 à 15:46
Bonjour
Sur votre Form vous avez bien un contrôle nommé Liste qui est une ListView .
Pourquoi alors dans la Sub envoyermagasin_click faire un
Dim Liste as ListView

Le Liste avec le Dim n'existe pas : la référence de l'objet n'est pas associée à une instance de l'objet ( traduction en français ).
Cette ligne ne sert à rien si la Form contient une ListView nommée Liste .
Comme dit Whismeril ce n'est pas en bidouillant ou en tapant au pif que l'on arrive à coder .
Connaître les bases d'un langage de programmation est primordial pour coder correctement et proprement .

Et un salut à Whismeril en passant
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 22 juin 2022 à 15:59
Bonjour,
Bein non j'ai pas de liste déclaré dans mon form je l'ai déclaré que dans envoyermagasin_Click
Si je supprime dim liste as listview j'ai liste en rouge ce qui est normal car pas déclaré
0
vb95
Messages postés
2774
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 juin 2022
151
22 juin 2022 à 15:59
Bonjour
Au message 19 il y a bien Liste qui est une Listview .
Elle se trouve sur quelle Form cette Listview ?
Dans quelle Form se trouve le bouton envoyermagasin ?
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 22 juin 2022 à 16:08
sur la form1 et le bouton envoyermagasin sur la form1 ah ok
je comprend le problème mais comment je peux faire

Dim fichier As String
        Dim madate1
        Dim madate

        madate1 = Replace(CStr(Date.Now), "/", "")
        madate = Replace(CStr(madate1), ":", "")

        Dim build As New Text.StringBuilder()
        Dim build1 As New Text.StringBuilder()
        Dim nelement As Integer = liste.Items.Count

        For Each element As ListViewItem In liste.Items
0
vb95
Messages postés
2774
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 juin 2022
151
22 juin 2022 à 16:18
Là normalement liste ne devrait plus poser de problème .
Pourquoi avoir fait des Replace à madate et madate1 ?
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

Modifié le 22 juin 2022 à 16:23
c'est pour nommer mes fichiers txt



liste n'est pas déclaré
0
vb95
Messages postés
2774
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
28 juin 2022
151
22 juin 2022 à 16:32
Ok
Comment Liste n'est pas déclaré ? Tu as bien une Listview qui s'appelle Liste sur la Form .
Et sur cette même Form se trouve le bouton envoyermagasin qui est associé à la sub envoyermagasin_click ?
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

23 juin 2022 à 07:31
Erreur d'écriture de la listview
0
trucss
Messages postés
115
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
23 juin 2022

23 juin 2022 à 07:31
Je tiens a vous remercier pour votre patience et surtout votre travail reactif, merci a tous
0