Modifier la quantité si article et couleur identique

Résolu
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 - Modifié le 22 févr. 2022 à 17:48
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 - 22 févr. 2022 à 14:46
Bonjour,
J'ai un fichier .TXT j'arrive a le lire je l'écris dans une listview (tableau)composée de 3 colonnes article, couleur, quantité.
Si on a le même article et couleur alors on fait +1 à la quantité sinon on le rajoute au tableau.
Avec ce code quand je veux modifier la quantité si article et couleur identique ça me le rajoute sur la ligne du dessous qui est vide ( pas d'article ni couleur)

 Dim monStreamReader As New StreamReader("T:\test.TXT") 'Stream pour la lecture
 Dim article,, couleur, ligne As String
 Do
      ligne = monStreamReader.ReadLine
      If ligne <> "" Then
             article= ligne.Split(";")(3)
             couleur = ligne.Split(";")(4)
             If tableau.Items.Count = 0 Then
                      Dim str As String() = New String(2) {}
                      str(0) = article
                      str(1) = couleur
                      str(2) = +1
                      Dim lvi As New ListViewItem(str)
                      tableau.Items.Add(lvi)
             Else
                      With tableau
                               Dim itm As ListViewItem
                               itm = .FindItemWithText(ref, True, 0, True)
                               Dim itm1 As ListViewItem
                               itm1 = .FindItemWithText(couleur, True, 0, True)
                               If Not itm Is Nothing And Not itm1 Is Nothing Then
                                      MsgBox("est deja dans la liste")>
                                      Dim str As String() = New String(2) {}
                                      str(2) = +1
                                      Dim lvi As New ListViewItem(str)
                                     tableau.Items.Add(lvi)
                                Else
                                     Dim str As String() = New String(2) {}
                                     str(0) = article
                                     str(1) = couleur
                                     str(2) = +1
                                     Dim lvi As New ListViewItem(str)
                                     tableau.Items.Add(lvi)
                                End If
                      End With
             End If
      End If
Loop Until ligne Is Nothing
monStreamReader.Close()
A voir également:

68 réponses

Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
20 févr. 2022 à 21:51
Si tu ne dis pas quelle erreur tu as je ne peux pas deviner....

Les textbox, on verra plus tard, ça doit toujours être la dernière solution.
Qui dit textbox dit erreurs de saisie.
Qui dit erreurs de saisie dit eventuellement plantage du logiciel (c'est une bonne chose quelque part car l'opérateur sait qu'il y a eu un problème, même si ça l'énerve) ou pire faux traitement (et là l'opérateur ne le sait pas)

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 20 févr. 2022 à 22:47
Overrides n'est pas valide dans une declaration de variable membre
cette instruction ne peux pas apparaitre en dehors du corps de methodes

Est rentre dans une textbox le chemin que l'on renseigne au depart est apres on selectionne
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
20 févr. 2022 à 23:30
Ha OK, je te renvoies à la fin du message 6, juste après le Attention en gras.

Et t'arrêtes avec les textbox, on verra ça plus tard.
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 07:42
Désole mes dans le message 49 je dois placer ou mon chemin c:\test.txt
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 08:18
Ce n’est pas dans le.message 49, mais dans le 50.
Dans ce message là, qui est un test intermédiaire, j’ai considéré que les fichiers sont, dans un premier temps tous dans le répertoire de l’exe
        'On crée une liste de fichiers de test
        Dim lesFichiers As List(Of String) = New List(Of String) From
            {
                "trucss.csv",
                "trucss2.csv"
            } 

J’ai d’ailleurs fait ça dans tous les tests précédents

Donc s’ils sont dans C:\Test , iil faut faire ça
        'On crée une liste de fichiers de test
        Dim lesFichiers As List(Of String) = New List(Of String) From
            {
                "C:\Test\trucss.csv",
                "C:\Test\trucss2.csv"
            } 

Et aussi un peu plus bas, quand j’ajoute le 3eme fichier
0

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

Posez votre question
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 08:42
Juste une erreur chargefichier n'est pas déclarer
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 08:53
Si si je te l’ai donnée
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 09:01
Pour l'erreur sur le chargefichier
il me la modifier comme ci dessous
Private Sub chargeFichier(lesFichiers As List(Of String), datas As List(Of DataTrucss))
        Throw New NotImplementedException()
    End Sub


Est ce génant ?
Quand je lance erreur the methode or operation is not implemented
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 09:13
Cette ligne
 Throw New NotImplementedException() 


Ça veut dire générer une erreur.

Je t’ai donné le code de cette méthode. Si tu veux que je t’aide, tu prends le code que je t’ai donné
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 09:32
J'ai chargé exactement le message 48 et 50 pourtant
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 10:29
Et pas le 49?
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 11:58
C'est bon j'ai réussi avec les 3 chemins
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 12:12
Et concernant le message 51?
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 21 févr. 2022 à 13:54
oui j'ai testé les 2 donc pour le openfildialog c'est bien je trouve quand on a besoin d'aller cherché des fichiers un peu partout tandis que l'autres solution quand c'est toujours dans les mêmes répertoires et meilleures.
Merci de m'avoir fait tester les 2 solutions c'est truc puissant VB
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 15:43
Ok, je vais donc te faire tester un autre façon.
Dans un premier temps, il va te falloir installer un contrôle externe car celui de vb.net n’est pas bien.

Commence par lire cet article https://docs.microsoft.com/fr-fr/nuget/quickstart/install-and-use-a-package-in-visual-studio qui explique comment installer un package nugget.
Et ensuite installe celui qui s’appelle betterfolderbrowserdialog

Ce soir, je te posterai un exemple avec ce contrôle et une alternative au datetimepicker
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
21 févr. 2022 à 16:33
Il y a que betterfolderbrower c'est pareil ?
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 17:25
Ha oui, c’est ça
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 17:59
Bon parlons du contrôle MonthCalendar.
C'est assez adapté à ton cas, car ça sert à sélectionner une période continue.
Par exemple, ce mois-ci je peux facilement choisir un jour


Ou une période continue du 31 janvier au 13 mars


Attention toutefois, par défaut, la durée maximale est de 7 jours, pour ce second exemple je l'ai augmentée (propriété MaxSelectionCount).
On peut choisir d'afficher ou non certaines information avec les propriétés ShowQuelqueChose

Par rapport à 2 datetimipicker cela comporte 2 avantages
  • un seul contrôle
  • pas besoin de vérifier que la date sélectionnée comme étant la fin est bien après celle sélectionnée comme étant le début.


Mais si tu veux que la période soit plus étalée entre 2 mois (ou plus), c'est moins "glamour".
Il faut te servir de la propriété CalendarDimensions qui se saisit au format x;y x étant le nombre de mois affichés horizontalement et y le nombre de mois affichés verticalement
2;1 ça donne

1;2 ça donne


0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
21 févr. 2022 à 18:10
Donc pour cet exemple, j'utilise un betterfolderbrowser et un monthcalendar (que tu peux remplacer par 2 datetimepicker si tu veux);

Dans les propriétés du betterfolderbrowser, on peux saisir un répertoire par défaut (c:\Test par exemple)
Et en principe, lui indiquer que la sélection de plusieurs dossiers est autorisée, mais ça ne fonctionne pas chez moi, alors je l'ai fait dans le code.

Sur le formulaire j'ajoute un bouton qui s'appelle butChoixRepertoires. Dans la méthode associée à l'évènement Click de ce bouton, il y a
    Private Sub butChoixRepertoires_Click(sender As Object, e As EventArgs) Handles butChoixRepertoires.Click
        'autorise l'utilisateur à selectionner plusieurs répertoires dans un même répertoire source
        BetterFolderBrowser1.Multiselect = True 'je ne sais pas pourquoi, je n'arrive pas à le faire en mode design....

        If BetterFolderBrowser1.ShowDialog() = DialogResult.OK Then

            For Each dossier In BetterFolderBrowser1.SelectedFolders
                'pour chaque répertoires sélectionné

                Dim laDate As DateTime = MonthCalendar1.SelectionStart 'on récupère la date de départ
                Do
                    Dim fichier As String = Path.Combine(dossier, String.Format("{0:yyyyMMdd}.txt", laDate)) 'on crée le chemin de fichier pour cette date
                    If File.Exists(fichier) Then lesFichiers.Add(fichier) 'si le fichier existe, on l'ajoute à la liste
                    laDate = laDate.AddDays(1) 'on passe à la date suivante
                Loop While (laDate < MonthCalendar1.SelectionEnd) 'et on recommence jusqu'à la date de fin
            Next dossier
        End If
    End Sub


Comme tu auras conservé les codes de tests précédents, la liste lesFichiers existera.

En cliquant sur ce nouveau bouton, tu pourras sélectionner des répertoires et tous les fichiers au format qui va bien dans la période de temps sélectionnée seront ajouté à la liste des fichiers à charger.

Il te restera à cliquer sur le bouton butChargerDatas déjà coder pour la suite.



0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 22 févr. 2022 à 09:12
Merci quand j'ai installé betterfolderbrowser probléme de compatibilité de version de framwork.

Peux tu m'expliquer pourquoi on prend pas 2 dates ou 2 textes et que l'on fait la différence on peut pas aller cherche les fichiers en sachant que c'est format 20220222.txt.

Je vais continuer pour tester ton code
0
Whismeril Messages postés 19044 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 mai 2024 656
Modifié le 22 févr. 2022 à 09:11
Le betterfolderbrowser n’a rien à voir avec les dates, il permet de sélectionner des répertoires.
S’il n’est pas compatible avec ta configuration, il y a d’autres contrôles disponibles sur nugget du genre folderbrowser, il faut les essayer pour voir.
Sinon par défaut, il y a le folderbrowserdialog de vb ( qui est en fait le vieux contrôle de windows xp…)mais il ne permet de choisir qu’un répertoire à la fois et souvent, à l’ouverture il n’affiche pas le chemin présélectionné. Il y a de multiples solutions plus ou moins farfelues sur le net qui ne fonctionnent pas vraiment (celle qu’on trouve le plus souvent consiste à taper 2 fois sur tab et je ne sais plus quelle autre touche, ou le faire taper par le code…). La seule qui semble vraiment marcher est de réécrire complètement l’import du contrôle xp et son comportement. Franchement c’est plus simple d’aller en chercher un tout fait chez nuggets.

Choisir tes dates avec des datetimepicker est tout à fait possible, je t’ai montré le monthcalendar pour que tu connaisses une alternative. Par contre avec les datetimepicker tu devras veiller à l’ordre des dates.

Quand au textbox, je te le répète moins tu en as et mieux c’est.
C’est très vite fait de faire une erreur de frappe, de se tromper et taper une date qui n’existe pas, comme le 29 février 2022 par exemple.
C’est encore pire sur un chemin de répertoire dans lequel il faut saisir des chaînes caractères longues avec des touches « chiantes » tels que \ et : la moindre petite erreur de saisie et c’est mort.

Mais c’est toi vois au final

0
Rejoignez-nous