Bonjour à tous.

Je tiens a m'excuser d'avance du pavé de code que je vais vous donner mais mon erreur ce situe quelque-part là dedans et je n'arrives pas à trouver ou...

En fait mon programme sers à enregistrer des données de matériel: type de matériel, numéro de séries etc etc.
J'arrive à en ajouter et à les enregistrer lors du 1er enregistrement.
Exemple j'ai mon fichier avec 30, 40 ou même 500000 objets enregistrés, si je veux en ajouter 1 pas de soucis il me l'ajoute à la suite.
En revanche, avec ce code, si je veux après en avoir ajouté 1, en rajouter un second.....Ben..... craboum.....
Ca me supprime tous ceux qui étaient deja présents et me fait un clonage (je ne sais pas combien de fois je pense que c'est assez aléatoire) de mon dernier matériel enregistré.
Du coup je me retrouves avec mon second matériel 20 30 5000 fois dans mon fichier....
Je ne trouve pas d'où viens ce problème...
Si quelqu'un peut m'éclairer je suis preneur

P.S. : avec l'aide pas à pas de vs2013, il ne m'affiche même pas les valeurs de mes textbox je ne sais pas pourquoi, pourtant dans mon fichier je les retrouves bien.
P.S.2 : je pense que mon problème viens de mon "Enregistrement_Matériel()" mais sans réelle certitude.

Voila je pense avoir tout dit.
Merci par avance.



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Public Class Ajouter_matériel
    Dim ComboBox As New ComboBox 'Créé une nouvelle Combobox nommée ComboBox.'
    Dim Label As New List(Of Label) 'Créé une nouvelle liste de Label nommée Label.'
    Dim TextBox As New List(Of TextBox) 'Créé une nouvelle liste de TextBox nommée TextBox.'
    Dim Boutons As New List(Of Button) 'Créé une nouvelle liste de Button nommée Boutons.'
    Dim type_produit As String = "" 'Créé une chaine de caractères nommée type_produit.'
 
    Private Sub Ajouter_matériel_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'S'exécute lors du chargement de la fenêtre.'
 
        ComboBox.Visible = True 'La combobox sera visible dès le chargement de la fenêtre d'ajout de matériel.'
        ComboBox.DropDownStyle = ComboBoxStyle.DropDownList 'Définit la ComboBox comme non modifiable par l'utilisateur.'
 
        For i As Integer = 0 To 1
 
            Boutons.Add(New Button) 'Ajoute un nouveau Button à la liste Boutons."
            Boutons(i).Width = 150 'Définit la largeur du Button créé.'
            AddHandler Boutons(i).Click, AddressOf Boutons_Click 'Créé un événement lors d'un clic sur le nouveau Button, et lance le sous-programme Boutons_Click.'
 
        Next
 
        With ComboBox.Items 'Avec le terme "ComboBox.Items",'
            .Add("Moteur Asynchrone.") 'Ajouter l'item "Moteur Asynchrone.".'
            .Add("Moteur Brushless.") 'Ajouter l'item "Moteur Brushless.".'
            .Add("Motoréducteur.") 'Ajouter l'item "Motoréducteur.".'
            .Add("Variateur.") 'Ajouter l'item "Variateur.".'
            .Add("Poste à souder.") 'Ajouter l'item "Poste à souder.".'
            .Add("Découpeur Plasma.") 'Ajouter l'item "Découpeur Plasma.".'
            .Add("Chargeur Démarreur.") 'Ajouter l'item "Chargeur Démarreur.".'
            .Add("Autre.") 'Ajouter l'item "Autre.".'
        End With
 
        FlowLayoutPanel.AutoScroll = True 'Donne au FlowLayoutPanel la possibilité d'addapter une barre de défillement si necessaire.'
        FlowLayoutPanel.Controls.Add(ComboBox) 'Ajoute la ComboBox dans le FlowLayoutPanel.'
 
        AddHandler ComboBox.SelectedIndexChanged, AddressOf ComboBox_ChangeIndex 'Créé un événement lorsque l'élément dans la comboBox est changé par l'utilisateur.'
 
    End Sub
 
    Private Sub ComboBox_ChangeIndex() 'S'exécute lorsque un item de la ComboBox est changé.'
 
        Label.Clear() 'Supprime tous les Labels dans la liste "Label".'
        TextBox.Clear() 'Supprime toutes les TextBox dans la liste "TextBox".'
        FlowLayoutPanel.Controls.Clear() 'Supprime tous les controles présents dans le "FlowLayoutPanel".'
        ComboBox.Height = 40 'Change la hauteur de la ComboBox pour une bonne mise en page.'
        FlowLayoutPanel.Controls.Add(ComboBox) 'Ajoute la ComboBox avec sa nouvelle taille dans le "FlowLayoutPanel".'
 
        If ComboBox.SelectedIndex = 0 Or ComboBox.SelectedIndex = 3 Or ComboBox.SelectedIndex = 6 Or ComboBox.SelectedIndex = 7 Then 'Si l'item sélectionné dans la ComboBox est "Moteur Asynchrone." ou "Variateur." ou "Chargeur Demarreur." ou "Autre.",'
 
            For i As Integer = 0 To 4 'Boucle de 4 rotations. Chaque rotation ajoute +1 à i.'
                Mise_En_Page_Ajout_Matériel(i) 'Lance le sous programme "Mise_En_Page_Ajout_Matériel" et lui envoie la valeur de i.'
            Next 'Ajoute +1 à i tant que i est différent de 4.'
 
            If ComboBox.SelectedIndex = 0 Then 'Si l'item sélectionné dans la ComboBox est "Moteur Asynchrone.",'
                Label(3).Text = "Rotation par minutes :" 'Définit le texte du Label(3).'
            Else 'Sinon (si l'item sélectionné dans la ComboBox est "Variateur." ou "Chargeur Demarreur." ou "Autre",)
                Label(3).Text = "Tension de sortie :" 'Définit le texte du Label(3).'
            End If 'Fin de la condition.'
 
            Label(4).Text = "Puissance :" 'Définit le texte du Label(4).'
 
        ElseIf ComboBox.SelectedIndex = 1 Then 'Sinon si l'item sélectionné dans la ComboBox est "Moteur Brushless",'
 
            For i As Integer = 0 To 5 'Boucle de 5 rotations. Chaque rotation ajoute +1 à i.'
                Mise_En_Page_Ajout_Matériel(i) 'Lance le sous programme "Mise_En_Page_Ajout_Matériel" et lui envoie la valeur de i.'
            Next 'Ajoute +1 à i tant que i est différent de 5.'
 
            Label(3).Text = "Rotation par minutes :" 'Définit le texte du Label(3).'
            Label(4).Text = "Référence du codeur :" 'Définit le texte du Label(4).'
            Label(5).Text = "Puissance :" 'Définit le texte du Label(5).'
 
        ElseIf ComboBox.SelectedIndex = 2 Then 'Sinon si l'item sélectionné dans la ComboBox est "Motoréducteurs",'
 
            For i As Integer = 0 To 7 'Boucle de 7 rotations. Chaque rotation ajoute +1 à i.'
                Mise_En_Page_Ajout_Matériel(i) 'Lance le sous programme "Mise_En_Page_Ajout_Matériel" et lui envoie la valeur de i.'
            Next 'Ajoute +1 à i tant que i est différent de 7.'
 
            Label(3).Text = "Rotation par minutes :" 'Définit le texte du Label(3).'
            Label(4).Text = "Marque du réducteur :" 'Définit le texte du Label(4).'
            Label(5).Text = "N° de série du réducteur :" 'Définit le texte du Label(5).'
            Label(6).Text = "Rapport de réduction :" 'Définit le texte du Label(6).'
            Label(7).Text = "Puissance :" 'Définit le texte du Label(7).'
 
        ElseIf ComboBox.SelectedIndex = 4 Or ComboBox.SelectedIndex = 5 Then 'Sinon si l'item sélectionné dans la ComboBox est "Poste à souder" ou "Découpeur Plasma",'
 
            For i As Integer = 0 To 3 'Boucle de 3 rotations. Chaque rotation ajoute +1 à i.'
                Mise_En_Page_Ajout_Matériel(i) 'Lance le sous programme "Mise_En_Page_Ajout_Matériel" et lui envoie la valeur de i.'
            Next 'Ajoute +1 à i tant que i est différent de 3.'
 
            Label(3).Text = "Puissance :" 'Définit le texte du Label(3).'
 
        End If 'Fin de la condition.'
 
        FlowLayoutPanel.SetFlowBreak(ComboBox, True) 'Oblige l'interface à aller à la ligne après la ComboBox dans le FlowLayoutPanel.'
 
        ComboBox.Height = 21 'Définit la hauteur de la ComboBox à 21 pixels.'
        Label(0).Text = "Marque :" 'Définit le texte du Label(0).'
        Label(1).Text = "N° de série :" 'Définit le texte du Label(1).'
        Label(2).Text = "Tension d'alimentation :" 'Définit le texte du Label(2).'
 
        For i As Integer = 0 To 1 'Boucle de 1 rotations. Chaque rotation ajoute +1 à i.'
            FlowLayoutPanel.Controls.Add(Boutons(i)) 'Ajoute le "Boutons(i)" créé au chargement de la fenêtre dans le "FlowLayoutPanel".'
        Next 'Ajoute +1 à i tant que i est différent de 1.'
 
        Boutons(0).Text = "Annuler" 'Définit le texte du Boutons(0).'
        Boutons(1).Text = "Enregistrer" 'Définit le texte du Boutons(1).'
 
    End Sub
 
    Private Sub Boutons_Click() 'S'exécute lors d'un clic sur un des 2 Boutons créé lors du chargement de la fenêtre.'
 
        Machines_Client.Matériel.Add(Matériel_Client) 'Ajoute le matériel nouvellement créé aux machines du client.'
        Nom_Client.Machine.Add(Machines_Client) 'Ajoute les machines client au client.'
 
        If Boutons(0).Focused Then 'Si c'est un clic sur le bouton "Annuler", alors :'
 
            Lecture_Fiche_Client.Show() 'Affiche la page d'accueuil.'
            Me.Close() 'Ferme la fenêtre en cours.'
 
        Else 'Sinon, si c'est un clic sur le bouton "Enregistrer,"
 
            If ComboBox.SelectedIndex <> 7 Then 'Si l'item sélectionné dans la ComboBox est différent de "Autre :", alors :'
 
                Matériel_Client.Type_Produit = ComboBox.SelectedItem 'Le type de produit dans matériel client est égal au texte de l'item sélectionné dans la ComboBox.'
                Enregistrement_Matériel() 'Exécute le sous-programme Enregistrement_Matériel.'
 
            Else 'Sinon, si l'item sélectionné dans la ComboBox est "Autre ",'
 
                type_produit = InputBox("Quel est le type de produit ?", "Type de produit.") 'Créé une fenêtre de saisie pour nommer le produit et entre ce nom dans la variable "type_produit".'
 
                If type_produit <> "" Then 'Si la variable type_produit contient du texte, alors :' 
 
                    Matériel_Client.Type_Produit = "Autre : " & type_produit 'Type_Produit prends la valeur "Autre : " suivit de la valeur de type_produit. 
                    Enregistrement_Matériel() 'Exécute le sous-programme Enregistrement_Matériel.'
 
                End If 'Fin de la condition.'
 
            End If 'Fin de la condition.'
 
        End If 'Fin de la condition.'
 
    End Sub
 
    Private Sub Mise_En_Page_Ajout_Matériel(i As Integer)
 
        Label.Add(New Label) 'Ajoute un nouveau Label dans la liste Label.'
        TextBox.Add(New TextBox) 'Ajoute une nouvelle TextBox dans la liste TextBox.'
 
        With Label(i) 'Avec le terme Label(i), (i = numéro de rotation)'
            .Height = TextBox(i).Height 'Règle la hauteur du Label(i) au même niveau que la hauteur de la TextBox(i).'
            .Width = 150 'Règle la largeur du Label(i) à 150 pixels.'
            .TextAlign = ContentAlignment.MiddleLeft 'Définit l'alignement du texte contenu dans le Label(i) comme centré à gauche.'
        End With
 
        TextBox(i).Width = 150 'Définit la largeur de la TextBox(i) à 150 pixels.'
        FlowLayoutPanel.Controls.Add(Label(i)) 'Ajoute le Label(i) dans le FlowLayoutPanel.'
        FlowLayoutPanel.Controls.Add(TextBox(i)) 'Ajoute la TextBox(i) dans le FlowLayoutPanel.'
        FlowLayoutPanel.SetFlowBreak(TextBox(i), True) 'Oblige l'interface à aller à la ligne après chaque TextBox(i) dans le FlowLayoutPanel.'
 
    End Sub
 
    Private Sub Enregistrement_Matériel()
 
        If ComboBox.SelectedIndex = 0 Then 'Si combobox = Moteur Asynchrone :
 
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Marque = TextBox(0).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Num_Série = TextBox(1).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Tension_Entrée = TextBox(2).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Rotations_Par_Minutes = TextBox(3).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Puissance = TextBox(4).Text
 
        ElseIf ComboBox.SelectedIndex = 1 Then 'Si combobox = moteur brushless
 
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Marque = TextBox(0).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Num_Série = TextBox(1).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Tension_Entrée = TextBox(2).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Rotations_Par_Minutes = TextBox(3).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Référence_Codeur = TextBox(4).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Puissance = TextBox(5).Text
 
        ElseIf ComboBox.SelectedIndex = 2 Then 'si combobox = motoréducteur
 
            Matériel_Client.Référence.Référence_Réducteur.Add(Réducteur)
            'TextBox(0).Text
            'TextBox(1).Text
            'TextBox(2).Text
            'TextBox(3).Text
            'TextBox(4).Text
            'TextBox(5).Text
            'TextBox(6).Text
            'TextBox(7).Text
 
        ElseIf ComboBox.SelectedIndex = 4 Then 'si combobox = variateur
 
            'TextBox(0).Text
            'TextBox(1).Text
            'TextBox(2).Text
            'TextBox(3).Text
 
        ElseIf ComboBox.SelectedIndex = 5 Then 'si combobox = poste à souder
 
            'TextBox(0).Text
            'TextBox(1).Text
            'TextBox(2).Text
            'TextBox(3).Text
 
        Else
 
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Marque = TextBox(0).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Num_Série = TextBox(1).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Tension_Entrée = TextBox(2).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Tension_Sortie = TextBox(3).Text
            Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel(Nom_Client.Machine(Nom_Client.Machine.Count - 1).Matériel.Count - 1).Référence.Puissance = TextBox(4).Text
 
        End If
 
        Enregistre_Fiche_Client(Fichier_Client, Nom_Client) 'Lance le sous programme d'enregistrement, qui va enregistrer dans le fichier client, le nouveau matériel.'
 
        If Not Erreur Then 'Si aucune erreur ne ce produit lors de l'enregistrement, alors :'
            MsgBox("Matériel ajouté au client " & Nom_Client.Société.Nom & " avec succes.", MsgBoxStyle.Information, "Opération Réussie.") 'Affiche un message comme quoi tout c'est bien déroulé.'
        End If 'Fin de la condition.'
 
    End Sub
 
End Class