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 :

Ajout d'objet dans une classe


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Points : 60
    Points
    60
    Par défaut Ajout d'objet dans une classe
    J'aissai d'ajouter un objet dans une classe avec le 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
    Option Explicit
     
     
     
    Public WithEvents CButton As MSForms.CommandButton
     
    'Exemple pour gérer l'évènement clic sur les objets type Button
    Private Sub CButton_Click()
        'cet exemple affiche le nom et la valeur de l'objet cliqué
        'MsgBox CButton.Name & ": " & CButton.Name
        saisi.Label6.Caption = "Opération " & CButton.Caption
     
        Dim requetteSQL As String
        Dim rst As New ADODB.Recordset
     
        requetteSQL = "SELECT information.idInformation,information.libelle,information.obligatoire,information.unite,information.defaut,information.min,information.max,information.typeinfo " _
        & " FROM necessiteremontee,information " _
        & " WHERE numOperation = '" & CButton.Caption & "' " _
        & " AND information.idInformation = necessiteremontee.idInformation  ;"
     
        Dim conn As ADODB.connection
        Set conn = connection
     
        rst.Open requetteSQL, conn
     
        Dim Obj As Control
        Dim i As Integer
     
     
        Dim Glabel As gere_event_label
        Set Glabel = New gere_event_label
     
        While Not rst.EOF
            Set Obj = saisi.Frame3.Controls.Add("forms.Label.1")
            With Obj
                .Name = "LabelInfo" & rst.Fields("idInformation")
                .Caption = rst.Fields("libelle")
                .Left = 35
                .Top = 25 * i + 40
                .Width = 80
                .Height = 20
            End With
     
     
            'ajout de l'objet dans la classe
            Set Glabel.CLabel = Obj
            CollectLabel.Add Glabel
     
            rst.MoveNext
            i = i + 1
     
        Wend
     
        rst.Close
     
    End Sub
    L'execution s'arrête à la ligne CollectLabel.Add Glabel. Il me dit erreur 91, Variable objet, ou variable de bloc with non défini...

    Je ne comprends vraiment pas d'ou peut venir le problème. J'ai pourtant bien le début et la fin de mon with. Je précise que si je commente la ligne en question, tous marche.

    Auriez vous une idée ou une piste pour résoudre ce problème ?

    Merci !

  2. #2
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Il faudrait voir de quel type est l'objet CollectLabel.

    Vu le nom, je suppose qu'il s'agit d'un objet de type Collection, mais vu qu'il semble y avoir des classes perso, j'ai quand même des doutes. Il faudrait donc voir à quel moment cet objet est instancié, car je n'ai rien vu pour cela dans le code que tu donnes. Il faudrait également voir ce que cet objet attend comme paramètre de sa procédure Add.

    Merci donc de préciser le contexte.
    "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...
    ---------------

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    J'ai un module qui s'appelle fonction_diverses

    j'y ai mis certaines fonctions dont les déclarations de mes collections :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public CollectButton As Collection
    Public CollectLabel As Collection
    Et ma classe gere_event_label ne contient que ça pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
     
    Public WithEvents CLabel As MSForms.Label
    En fait à l'origine j'ai mon IHM qui affiche un certain nombre de boutton qui varie en cours d'exécution du programme. J'ai créer une classe gere_event_button pour gérer ces évènements. Finalement ces évènements devaient ajouter encore d'autres Label. J'ai donc créer également gere_event_label, mais qui ne sert pas à grand chose...

    Est-ce que cela vous aide pour déterminer d'où vient le problème ?

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Est-ce que cela vous aide pour déterminer d'où vient le problème ?
    Oui. Il s'agit donc bien d'une collection.

    Elle est déclarée en dehors de la procédure qui l'utilise, et elle doit être instanciée. Il faut, dans le code, une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set CollectLabel = New Collection
    avant de pouvoir y ajouter des objets...

    Cette ligne ne doit pas obligatoirement être présente dans la procédure qui utiliser la collection, mais il faut, à un moment ou un autre, dans le code appelant, que la collection soit créée, et pas seulement instanciée...
    "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...
    ---------------

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup ça marche !

    Je pensais que cela déclarait et instanciait en même temps.

    Merci encore !

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

Discussions similaires

  1. Ajout d'un objet dans une classe
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2008, 11h16
  2. list d'objet dans une classe
    Par wadcyr8_197 dans le forum C++
    Réponses: 10
    Dernier message: 04/07/2007, 15h34
  3. Ajout de propriété dans une classe d'une assembly
    Par ftesson dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 14/05/2007, 14h25
  4. Réponses: 8
    Dernier message: 12/04/2007, 11h32
  5. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05

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