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 :

Objets, modules de classe, méthodes [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut Objets, modules de classe, méthodes
    Bonjour à tous,

    j'utilise trois objets, Demande, Site et Tranche, ainsi que trois autres objets, qui sont des collections d'objets suscités (donc CollectionDemande, Collectionsite, CollectionTranche).



    Le code de l'objet Demande, par exemple, est constitué entre autres de 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
    Option Explicit
     
    ' Stockage de la priorité
    Private pNomTranche As String
     
     
    Public Property Get NomTranche() As String
        Dim NomProcApp As String   'Stockage de la procédure appelante
     
        NomProcApp = NomProc
        NomProc = "NomTranche ( Get )"  'Gestion des erreurs (procédure en cours)
         NomTranche = pNomTranche
     
    Sortie:
    ' Remettre la procédure appelante
        NomProc = NomProcApp
        Exit Property
     
    End Property
     
    Public Property Let NomTranche(ByVal NNomTranche As String)
        Dim NomProcApp As String   'Stockage de la procédure appelante
     
        NomProcApp = NomProc
        NomProc = "NomTranche ( Let )"  'Gestion des erreurs (procédure en cours)
         pNomTranche = NNomTranche
     
     
    Sortie:
    ' Remettre la procédure appelante
        NomProc = NomProcApp
        Exit Property
     
    End Property
    Qui ne sont donc que des propriétés privées munies de leurs accesseurs et constructeurs.

    Les objets Collection, quand à eux, sont constitués 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
     
    Option Explicit
     
     
     
    Private Demandes As Collection
     
    Public Sub ImporterCollectionDemandes()
        Dim NomProcApp As String   'Stockage de la procédure appelante
     
        NomProcApp = NomProc
        NomProc = "ImporterCollectionDemandes"  'Gestion des erreurs (procédure en cours)
     
        'Initialiser collection
        Set Demandes = New Collection
        'Charger la collection dans fichier
        'Ouvrir le fichier
        'Lire le fichier
        'Ajouter les éléments à la collection, avec comme index : concaténation de nom de la tranche, date de la demande, durée de la demande
     
     
    Sortie:
        ' Remettre la procédure appelante
        NomProc = NomProcApp
        Exit Sub
     
    End Sub
    Ainsi que de fonctions d'ajout, suppression, export, modification... toutes publiques.

    Je délclare donc mon objet CollectionDemande dans Thisworkbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public DemandesEnCours As CollectionDemandes
    Puis cherche, dans l'évènement Activate(), à utiliser la méthode d'import :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call DemandesEnCours.ImporterCollectionDemandes
    VB me crache alors l'erreur suivante :

    Variable objet ou variable de bloc With non définie

    Et je vois pas du tout, mais du tout le rapport étant donné que pas une seule fois j'utilise l'instruction With.

    aurai-je mal conçu mon architecture? à votre avis pourquoi VB me crache-t-il cette erreur?

    Merci à tous

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Le message d'erreur indique qu'il peut s'agir d'une variable objet non définie. Donc, tu peux laisser tomber a priori l'histoire du bloc With...
    La procédure appelée ne contient qu'une instruction qui concerne tes objets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Demandes = New Collection
    , ou alors, tu n'as pas mis tout le code...
    Par contre tu as mis la propriété LET et GET de NomTranche de Demande, mais cet objet n'est pas utilisé dans la procédure incriminée...
    Du coup, juste un conseil : met un point d'arrêt sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call DemandesEnCours.ImporterCollectionDemandes
    et F8.

    A mon avis, il manque quand même un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DemandesEnCours = New CollectionDemandes
    Ce qui ferait que DemandesEnCours = Nothing, et le message d'erreur serait justifié.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre actif Avatar de crashtib
    Homme Profil pro
    Support technico-fonctionnel
    Inscrit en
    Avril 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Support technico-fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 221
    Points : 204
    Points
    204
    Par défaut
    C'était le cas, il manquait effectivement l'instruction "Set Demandes = New Collection". Pour être plus précis, elel était présente mais non exécutée puisque placée dans thisworkbook.open() et suivant des instructions buggées, donc non exécutée. Résultat, l'objet n'était pas instancié.

    Merci en tout cas pour ton aide.
    Bon week-end !

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

Discussions similaires

  1. Classe/méthode statique et objet instancié
    Par kileak dans le forum C#
    Réponses: 4
    Dernier message: 12/04/2013, 09h40
  2. Objets "module de classe" passé en paramètre de fonction
    Par jeanjean6 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/03/2013, 09h49
  3. Pb ajout objet dans module de classe
    Par steph6499 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 06/02/2011, 17h55
  4. Accès à une méthode d'un objet d'une classe
    Par neoraptor dans le forum Débuter
    Réponses: 7
    Dernier message: 29/01/2009, 10h17
  5. Classe et objet + Modules standards
    Par Girzi dans le forum Modules
    Réponses: 2
    Dernier message: 03/11/2006, 21h23

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