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 :

Collection de collection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Chacun code comme il l'entend. Apporter de la complexité pour le plaisir ne fait pas partie de ma façon d'appréhender la programmation. Déporter la création des capteurs et étalonnages dans des fonctions spécifiques, C'EST du Design Pattern Factory à la sauce VBA.

    Dans MES projets, j'utilise un Factory. Mais sur le forum, je ne vois pas l'intérêt d'apporter cette notion dans le problème qui nous occupe ici, pas plus que les collections fortement typées ou les propriétés Friend. 30 ans que je code, et je n'ai jamais eu de problèmes à utiliser des collections non typées ou à ne pas utiliser Friend.

    concernant FRIEND, je réitère mes propos. Pour des objets qui sont utilisés dans le projet qui les contient, FRIEND ne sert strictement à rien. Les classes sont privées par défaut et donc utilisables uniquement au sein du même projet. Et ne pas mettre Friend n'empêche absolument pas de réutiliser la classe. Je ne vois vraiment pas ce que ta remarque vient faire ici. Une propriété Friend d'une classe, ça veut simplement dire qu'un autre projet je pourra pas l'utiliser. On peut probablement compter sur les doigts d'une main les projets VBA qui utilisent des classes provenant d'autres projets.

    A quoi cela sert-il de venir perdre le lecteur avec des concepts de haut vol lorsque déjà, il ne maîtrise pas les bases de la programmation Objet. 🙄
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Je n'impose rien, je présente une solution, permet moi de la défendre.

    Ensuite, notre but n'est-il pas aussi d'offrir une approche pédagogique ?

    Ne nous voilons pas la face, la qualité des codes sources qui traînent sur internet sont majoritairement médiocre, faute à l'illusion de facilité que prodiguent les cours (Cours correct en VBA, je n'en ai jamais vu).
    Bidouiller, c'est facile.
    Programmer, c'est difficile.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le code que j'ai proposé est loin du bidouillage, et, formateur sur Excel et VBA depuis plus de 25 ans, ma pédagogie, c'est d'apporter les concepts lorsque c'est nécessaire de les apporter. Perdre une personne qui demande à manipuler des classes qui s'emboitent avec des collections dans des concepts de factory, de propriété Friend (totalement inutile ici) et de collections typées, cela n'a strictement rien de pédagogique à mes yeux.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Je me permet de citer ta signature:
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2024
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2024
    Messages : 5
    Par défaut
    Bonsoir à tous,

    Merci à tous pour vos recherches et propositions.
    J'ai passé toute la journée sur mon PC et je n'avais pas vu vos messages que je viens de découvrir. Je vais bien les lire car je pense qu'il y a encore plein de choses que je vais découvrir.
    C'est vraiment sympa de voir le temps que vous avez passé à me chercher une solution.
    Je suis arrivé à un bout de code, mais il est très perfectible.

    Main
    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
     
    Option Explicit
    Dim Capteurs() As Collection
    Dim Coef() As Variant
    Dim Info() As Variant
    Dim a As String
    Dim i As Integer
    Dim NbCapteurs As Long
    Dim NbLignes As Long
     
    Sub Test()
     
        Sheets("BDD").Select
        NbLignes = 11 'vite fait pour les tests !!!
        NbCapteurs = 0
        ReDim Coef(1 To NbLignes - 1)
        ReDim Capteurs(1 To NbLignes - 1)
        ReDim Info(1 To NbLignes - 1)
     
        For i = 1 To NbLignes - 1
            If Cells(i + 1, 1) <> Cells(i, 1) Then
                NbCapteurs = NbCapteurs + 1
                Set Capteurs(NbCapteurs) = New Collection
     
                Set Info(NbCapteurs) = New ClsInfos
                Info(NbCapteurs).ID = Cells(i + 1, 1)
                Info(NbCapteurs).Marque = Cells(i + 1, 2)
                Info(NbCapteurs).Modele = Cells(i + 1, 3)
                Capteurs(NbCapteurs).Add Info(NbCapteurs)
            End If
     
            Set Coef(i) = New ClsCoefficient
            Coef(i).DateEtal = Cells(i, 4)
            Coef(i).Alpha = Cells(i, 5)
            Coef(i).Beta = Cells(i, 6)
            Coef(i).Linearite = Cells(i, 7)
            Capteurs(NbCapteurs).Add Coef(i)
     
        Next i
     
    End Sub
    Classe ClsCoefficient
    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
     
    Option Explicit
    Private mDateEtal As String
    Private mAlpha As String
    Private mBeta As String
    Private mLinearite As String
     
    Public Property Let DateEtal(Value As String)
    mDateEtal = Value
    End Property
     
    Public Property Get DateEtal() As String
    DateEtal = mDateEtal
    End Property
     
    Public Property Let Alpha(Value As String)
    mAlpha = Value
    End Property
     
    Public Property Get Alpha() As String
    Alpha = mAlpha
    End Property
     
    Public Property Let Beta(Value As String)
    mBeta = Value
    End Property
     
    Public Property Get Beta() As String
    Beta = mBeta
    End Property
     
    Public Property Let Linearite(Value As String)
    mLinearite = Value
    End Property
     
    Public Property Get Linearite() As String
    Linearite = mLinearite
    End Property
    Classe ClsInfos
    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
     
    Option Explicit
    Private mID As String
    Private mMarque As String
    Private mModele As String
     
    Public Property Let ID(Value As String)
    mID = Value
    End Property
     
    Public Property Get ID() As String
    ID = mID
    End Property
     
    Public Property Let Marque(Value As String)
    mMarque = Value
    End Property
     
    Public Property Get Marque() As String
    Marque = mMarque
    End Property
     
    Public Property Let Modele(Value As String)
    mModele = Value
    End Property
     
    Public Property Get Modele() As String
    Modele = mModele
    End Property
    J'ai utilisé des collections de tableaux car je n'ai trouvé que cela pour aboutir à la structure que je désire.
    Dans tous les cas, l'item(1) regroupera les informations du capteur. Les items suivants concerneront chacun un étalonnage différent.
    La structure étant toujours identique, j'espère pouvoir faire facilement tous les calculs et tris dont j'aurai besoin.

    Merci encore pour votre aide.
    Dominique

Discussions similaires

  1. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2004, 18h02
  2. [VB6] Sauvegarder une collection d'objets
    Par Sayagh dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2003, 11h58
  3. [VB6] la collection controls
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/04/2003, 17h03
  4. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

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