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"
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public Sub Workbook_Open() UF_Accueil.Show End Sub
En début de module, je déclare ma collection en Global
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 Global Sinistres As New Collection
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
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
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...
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
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!
Partager