Bonjour à tous!

Et merci d'avance à ceux qui pourront m'aider!

Comme l'indique mon intitulé, je travaille actuellement sur une liste de liste de type structuré.

Voici mon code (parfois mieux vaut l'exemple qu'un long discours) :

- Tout d'abord, la structure servant à la liste de listes comportant ce type structuré EN ENTRÉE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    'structure permettant la récupération des éléments d'impression de la table étiquette
    Public Structure LabelPrintingElement
        Public etiq_num As String
        Public etiq_dateheure As Date
    End Structure
-Voici la structure servant à la liste de liste de type structurée EN SORTIE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    'structure permettant la récupération des éléments loftware
    Public Structure ElementsEtiquetteLWL
        Public LibelleElementLWL As String
        Public ValeurElementLWL As String
    End Structure
Pourquoi ce changement de type en cours de route? Tout simplement car j'ai créé une classe permettant d'utiliser n'importe quel type d'informations avec ce formalisme afin de produire des étiquettes industrielles.

Voici le code en question (C'est une fonction "rustine" qui fait le lien entre 2 classes ayant leur propre méthode, et c'est pour moi la manière la plus propre de m'en sortir et également celle qui me prendrait normalement le moins de temps... puisque je dois finaliser le tout pour vendredi ) :

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
    Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _
                As List(Of List(Of loftware_access.ElementsEtiquetteLWL))
        'Déclaration des variables
        Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL))
        Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL)
        Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL

        'Exécution
        For i As Integer = 0 To ListofLabels.Count - 1
            ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num"
            ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num
            'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
            ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)

            ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure"
            ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy")
            'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
            ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
            '----------------------------------------------------------
            'on ajoute le tout dans la liste de liste ListeElemsParEtiq
            '----------------------------------------------------------
            ListeElemsParEtiq.Add(ListeUnElemParEtiq)
            'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear
            ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq
            ListeUnElemParEtiq.Clear()

        Next
        ' ListeElemParEtiq.Add(ListeUnElemParEtiq)
        Return ListeElemsParEtiq
    End Function
Le ListeUnElemParEtiq.Clear() est "obligatoire" car sinon je vais "concaténer" (désolé pour l'abus de langage) les même éléments à chaque fois que je vais boucler (je suis censé avoir forcément 2 branches et X troncs).

SAUF QUE lorsque j'efface ListeUnElemParEtiq avec ListeUnElemParEtiq.Clear(), cela impacte également l'ensemble des élements déja présents dans ListeElemsParEtiq qui est une liste composée de ListeUnElemParEtiq.

J'avais pensé également à une variable du même type que ListeUnElemParEtiq qui jouerait le rôle d'intermédiaire entre ListeUnElemParEtiq et ListeElemsParEtiq, sauf que cela ne marche pas non plus : J'en conclus donc que tout se fait en mémoire (à la manière de variables pointées)...

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
Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _
                As List(Of List(Of loftware_access.ElementsEtiquetteLWL))
        'Déclaration des variables
        Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL))
        Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL)

        Dim ListeTemp As New List(Of loftware_access.ElementsEtiquetteLWL)

        Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL

        'Exécution
        For i As Integer = 0 To ListofLabels.Count - 1
            ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num"
            ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num
            'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
            ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)

            ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure"
            ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy")
            'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
            ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
            '----------------------------------------------------------
            'on ajoute le tout dans la liste de liste ListeElemsParEtiq
            '----------------------------------------------------------
            ListeTemp = ListeUnElemParEtiq

            ListeElemsParEtiq.Add(ListeTemp)
            'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear
            ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq
            ListeUnElemParEtiq.Clear()

        Next
        ' ListeElemParEtiq.Add(ListeUnElemParEtiq)
        Return ListeElemsParEtiq
    End Function
Peut-être existe-t'il une manière plus simple d'allouer les valeurs sans passer par des étapes intermédiaires ou une astuce... Enfin je vous laisse libre de tout choix technique tant que je garde les mêmes entrées/sorties.

Merci de vous êtes accroché(e)s jusqu'au bout!