Bonjour,

Je bloque sur un problème que malgré mes recherches, je n'arrive pas à résoudre.

Je travaille actuellement sur un programme qui me permettrait de récupérer des données depuis un autre fichier pour faire des analyses statistiques.

Je n'ai qu'une liste de données, avec un grand nombre de champs (74 pour être exact).

J'ai donc créé une collection personnalisée avec un module de classe, pour ne travailler qu'à partir de la collection, sans avoir besoin d'importer les données dans la feuille de calcul du logiciel. Je pensais que c'était une bonne idée, mais je coince sur l'utilisation de cette collection dans d'autres modules.

J'ai déclaré en début de module ma collection en Global, mais dès l'instant où je sors du module pour générer une liste dans un UserForm, la collection semble perdue...

Une idée?

A l'ouverture du fichier, je démarre automatiquement la macro qui affichera le UserForm "Principal"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Public Sub Workbook_Open()
UF_Accueil.Show
End Sub
Le UserForm permet, via un bouton, l'importation des données, par le choix du fichier qui le contient. De là, on appelle la procédure Importer_Fichier_Donnees dans le module Initialisation

En début de module, je déclare ma collection en Global

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Global Sinistres As New Collection
La procédure au sein du module ajoute chaque donnée en tant qu'objet dans la collection comme ceci :

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
Set Sinistre = New clSinistre
    With Sinistre
        .Numero = wbSource.Sheets(1).Cells(i, 1)
        .APM = wbSource.Sheets(1).Cells(i, 2)
        .Analysed = (wbSource.Sheets(1).Cells(i, 3) = "O")
        .Societe = wbSource.Sheets(1).Cells(i, 4)
        .Metier = wbSource.Sheets(1).Cells(i, 5)
        .Site = wbSource.Sheets(1).Cells(i, 6)
        .Immat = wbSource.Sheets(1).Cells(i, 7)
        .ImmatRemorque = wbSource.Sheets(1).Cells(i, 8)
        .DateSinistre = wbSource.Sheets(1).Cells(i, 9)
        .Annee = wbSource.Sheets(1).Cells(i, 10)
        .HeureSinistre = wbSource.Sheets(1).Cells(i, 11)
        .LieuSinistre = wbSource.Sheets(1).Cells(i, 12)
        .Client = wbSource.Sheets(1).Cells(i, 13)
        .Declaration = (wbSource.Sheets(1).Cells(i, 14) = "O")
        .Entretien = (wbSource.Sheets(1).Cells(i, 15) = "O")
        .Circonstances = wbSource.Sheets(1).Cells(1, 16)
        .NomConducteur = wbSource.Sheets(1).Cells(i, 17)
        .PrenomConducteur = wbSource.Sheets(1).Cells(i, 18)
        .DateNaissanceConducteur = wbSource.Sheets(1).Cells(i, 19)
        .AncienneteConducteur = wbSource.Sheets(1).Cells(i, 20)
        .Exploitant = wbSource.Sheets(1).Cells(i, 21)
        .AnalysePar = wbSource.Sheets(1).Cells(i, 22)
        .NbHeures = wbSource.Sheets(1).Cells(i, 23)
        .StatutConducteur = wbSource.Sheets(1).Cells(i, 24)
        .Milieu = wbSource.Sheets(1).Cells(i, 25)
        .GenreSinistre = wbSource.Sheets(1).Cells(i, 26)
        .Conditions = TabConditions
        .PropositionConducteur = TabPropositions
        .Responsabilite = wbSource.Sheets(1).Cells(i, 65)
        .Constat = wbSource.Sheets(1).Cells(i, 66)
        .DateDeclaration = wbSource.Sheets(1).Cells(i, 67)
        .UsageTelephone = (wbSource.Sheets(1).Cells(i, 68) = "O")
        .Evitable = (wbSource.Sheets(1).Cells(i, 69) = "O")
        .RaisonsEvitable = wbSource.Sheets(1).Cells(i, 70)
        .RaisonsInevitable = wbSource.Sheets(1).Cells(i, 71)
        .Consequences = (wbSource.Sheets(1).Cells(i, 72) = "O")
        .Modification = (wbSource.Sheets(1).Cells(i, 73) = "O")
        .Commentaires = wbSource.Sheets(1).Cells(i, 74)
    End With
    Erase TabConditions
    Erase TabPropositions
    Sinistres.Add Sinistre
On rebascule ensuite sur le UserForm principal, qui autorise l'accès à un UserForm "Analyse", dans lequel, je voudrais permettre d'appliquer des filtres éventuels avant les analyses. Dans le UserForm en question, j'aimerais, si un checkbox est sélectionné, afficher dans un listbox les différentes sociétés concernées pour permettre à l'utilisateur de choisir celles sur lesquelles doit porter l'analyse

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
Private Sub CheckAnalyseFiltres_Click()
Dim NbItems As Integer
Dim ItemExiste As Boolean
If CheckAnalyseFiltres = True Then
NbItems = ListBoxSocietes.ListCount
    For Each Sinistre In Sinistres
        ItemExiste = False
        For i = 0 To NbItems
            If Sinistre.Societe = ListBoxSocietes(i) Then
                ItemExiste = True
            Else
            End If
        Next i
        If ItemExiste = False Then
            ListBoxSocietes.AddItem (Sinistre.Societe)
        Else
        End If
    Next Sinistre
Else
End If
End Sub
C'est là que le problème survient, en mettant un espion pour voir comment se comporte ma collection, je m'aperçois qu'elle est vide...

Je pourrais importer "physiquement" les enregistrements dans une feuille de calcul, ce qui me permettrait de réinitialiser la collection dans chaque module, mais ça me paraît lourd et inutile

Je peux envoyer le fichier si nécessaire

Merci d'avance!