IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème pour la création de tableau de classe [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Par défaut Problème pour la création de tableau de classe
    Bonjour,

    J'ai le problème suivant:
    J'ai créé la classe ci dessous

    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
     
     
    Private msTypeAccident As String
    Private mdDateAcc As Date
    Private mvDonneeEnt() As Variant
    Private mbooArret As Boolean
    Private miDureeArr As Integer
    'Private miReportArr() As Integer
    Private mbooRestriction As Boolean
    Private miDureeRest As Integer
    'Private miReportRest() As Integer
    Private mbooPosteAm As Boolean
    Private miDureePost As Integer
    'Private miReportPoste() As Integer
     
    Property Get sTypeAccident() As String
     
        sTypeAccident = msTypeAccident
     
    End Property
     
    Property Let sTypeAccident(sTypeAccident As String)
     
        msTypeAccident = sTypeAccident
     
    End Property
     
    Property Get dDateAcc() As Date
     
        dDateAcc = mdDateAcc
     
    End Property
    Property Let dDateAcc(dDateAcc As Date)
     
        mdDateAcc = dDateAcc
     
    End Property
     
    Property Get vDonneeEnt() As Variant()
     
        vDonneeEnt = mvDonneeEnt
     
    End Property
    Property Let vDonneeEnt(ByRef vDonneeEnt() As Variant)
     
         mvDonneeEnt = vDonneeEnt
     
    End Property
     
    Property Get booArret() As Boolean
     
        booArret = mbooArret
     
    End Property
     
    Property Let booArret(booArret As Boolean)
     
        mbooArret = booArret
     
    End Property
     
    Property Get iDureeArr() As Integer
     
        iDureeArr = miDureeArr
     
    End Property
     
    Property Let iDureeArr(iDureeArr As Integer)
     
        miDureeArr = iDureeArr
     
    End Property
     
    Property Get booRestriction() As Boolean
     
        booRestriction = mbooRestriction
     
    End Property
     
    Property Let booRestriction(booRestriction As Boolean)
     
        mbooRestriction = booRestriction
     
    End Property
     
    Property Get iDureeRest() As Integer
     
        iDureeRest = miDureeRest
     
    End Property
     
    Property Let iDureeRest(iDureeRest As Integer)
     
        miDureeRest = iDureeRest
     
    End Property
     
    Property Get booPosteAm() As Boolean
     
        booPosteAm = mbooPosteAm
     
    End Property
     
    Property Let booPosteAm(booPosteAm As Boolean)
     
        mbooPosteAm = booPosteAm
     
    End Property
     
    Property Get iDureePost() As Integer
     
        iDureePost = miDureePost
     
    End Property
     
    Property Let iDureePost(iDureePost As Integer)
     
        miDureePost = iDureePost
     
    End Property
     
    Property Get iReportArr() As Integer()
     
        If mbooArret Then iReportArr = CALC_REPORT_UNIQUE(mdDateAcc, miDureeArr)
     
    End Property
     
    Property Get iReportRest() As Integer()
     
        If mbooRestriction Then iReportRest = CALC_REPORT_UNIQUE(mdDateAcc, miDureeRest)
     
    End Property
     
    Property Get iReportPoste() As Integer()
     
        If mbooPosteAm Then iReportPoste = CALC_REPORT_UNIQUE(mdDateAcc, miDureePost)
     
    End Property

    et je souhaites l'utiliser pour créer un tableau en piochant des données dans Excel à l'aide du code suivant:

    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
     
     
    Sub CREATION_TABLE()
     
        Dim cAccTable() As cAccident
        'Dim cAccTemp As New cAccident
        Dim vPopulation() As Variant
        Dim i As Integer, j As Integer
        Dim rRattachementR As Range
     
        Set rRattachementR = ThisWorkbook.Sheets(1).Range("Y8")
     
     '   ReDim cAccTable(rRattachementR.Worksheet.Cells(1048576, rRattachementR.Column).End(xlUp).Row - rRattachementR.Row)
        ReDim vPopulation(4)
     
        For i = rRattachementR.Row To rRattachementR.Worksheet.Cells(1048576, rRattachementR.Column).End(xlUp).Row
     
            For j = 0 To 4
     
                vPopulation(j) = rRattachementR.Offset(i - rRattachementR.Row, j).Value
     
            Next
     
            Dim cAccTemp As New cAccident
     
            With cAccTemp
     
                .vDonneeEnt = vPopulation
                .dDateAcc = DateSerial(rRattachementR.Offset(i - rRattachementR.Row, 7).Value + 2000, rRattachementR.Offset(i - rRattachementR.Row, 6).Value, rRattachementR.Offset(i - rRattachementR.Row, 5).Value)
                .sTypeAccident = rRattachementR.Offset(i - rRattachementR.Row, 15).Value
     
                If rRattachementR.Offset(i - rRattachementR.Row, 16).Value = "AVEC ARRET" Then
     
                    .booArret = True
                    .iDureeArr = rRattachementR.Offset(i - rRattachementR.Row, 19).Value
     
                Else
     
                    .booArret = False
                    .iDureeArr = 0
     
                End If
     
                If rRattachementR.Offset(i - rRattachementR.Row, 23).Value = "OUI" Then
     
                    .booRestriction = True
                    .iDureeRest = rRattachementR.Offset(i - rRattachementR.Row, 24).Value
     
                Else
     
                    .booRestriction = False
                    .iDureeRest = 0
     
                End If
     
                If rRattachementR.Offset(i - rRattachementR.Row, 26).Value = "OUI" Then
     
                    .booPosteAm = True
                    .iDureePost = rRattachementR.Offset(i - rRattachementR.Row, 27).Value
     
                Else
     
                    .booPosteAm = False
                    .iDureePost = 0
     
                End If
     
            End With
     
            ReDim Preserve cAccTable(i - rRattachementR.Row)
            Set cAccTable(i - rRattachementR.Row) = cAccTemp
     
        Next
    Mon soucis est le suivant:

    Au lieu de me rajouter l’éléments unique "cAccTemp" à chaque itération de ma boucle dans "cAccTable", il me remplace l'ensemble des valeur déjà inscrite dans le tableau par la dernière valeur de "cAccTemp".
    J'ai essayé plusieurs méthodes de déclaration de mon tableau, mais le problème ne semble pas venir de là.
    Je ne maîtrise pas à 100% les classes et j'ai peur d'avoir mal définie celle-ci.

    Dans l'attente de toute aide ou conseil.

    Merci d'avance

    Garruth

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Essaie 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
    Dim cAccTemp As cAccident
    ...
    For i = rRattachementR.Row To rRattachementR.Worksheet.Cells(1048576, rRattachementR.Column).End(xlUp).Row
    .....
        Set cAccTemp = new cAccident
        With cAccident
            ....
        End With
        ...
        Set cAccTable(i - rRattachementR.Row) = cAccTemp
        Set cAccTemp=Nothing
     
    Next i
    Perso je n'utilise pas des tableaux d'objets mais plutôt des dictionnaires (Objet Scripting.Dictionary) ou des collections. Je trouve ça plus pratique. La méthode ci dessus fontionne avec un dictionnaire, jamais testé avec des tableaux....

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Par défaut
    Merci, cela fonctionne parfaitement.

    Je connais assez peu les collections et les dictionnaires (je m'en suis juste servi à l'occasion pour gérer des doublons) mais ce sont des objets qui ont l'air interessant.

    En tout cas merci beaucoup pour le coup de mains

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Problème pour la création d'un tableau de données
    Par dj_max_69 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 30/08/2011, 19h12
  2. [XI] Problème pour la création d'un rapport avec requête intégré
    Par doudoudetahiti dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 05/07/2007, 16h22
  3. Problème pour la création d'une fonction
    Par jipé95 dans le forum C
    Réponses: 5
    Dernier message: 10/12/2006, 14h28
  4. Réponses: 1
    Dernier message: 21/02/2006, 15h46
  5. Problème pour lire dans un tableau ...
    Par themis dans le forum Oracle
    Réponses: 1
    Dernier message: 15/02/2006, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo