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

VBA Discussion :

Portée d'une variable dans une classe control


Sujet :

VBA

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut Portée d'une variable dans une classe control
    Bonjour a tous
    c'est peut être une chose tout simple mais qui me pose problème depuis un moment déjà a savoir la porté d'une variable dans une/des instances d'une classe controls

    en effet jusqu'à présent j'utilisais le tag et autre astuces pour mémoriser une donnée et le ressortir dans les évènement control de la classe

    pour faire simple aujourd'hui on va instancier une classe a partir du userform pour y appeler la fonction1 qui va classer une listbox je pourrais donc gérer son évènement

    "mousedown" dans la classe .jusque la rien de bien compliqué

    et dans la fonction1 de la classe on va instancier la classe control

    arrêtez moi si je me trompe il y a donc 2 classe1 instanciées

    mon problème c'est que je voudrais qu'une variable "colwidth" prenne une valeur et que cette valeur au mousedown de la listbox dans la classe je puisse ressortir cette variable pour

    l'exemple aujourd'hui et pour une facilité de solution on ressortira cette variable dans un msgbox

    code du userform

    on constate que dans le initialyse de la classe si j'alimente la variable elle est utilisable dans l'evenement mousedown de la listebox

    problème je suis obligé de classer la listbox avant quoi que se soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim cl As New Classe1
    Private Sub UserForm_Activate()
        Set plage = Sheets(1).Range("a1:j100")
        colonnewidths = Array(60, 80, 60, 60, 90, 80, 75, 68, 90, 60)
        With ListBox1
            .List = plage.Value
            .ColumnCount = plage.Columns.Count
            .ColumnWidths = Join(colonnewidths, ";")
        End With
        cl.fonction1 ListBox1
    End Sub
    code de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public WthEvents liste1 As MSForms.listbox
    Dim CLS As New Classe1
    dim colwidth
    Private Sub Class_Initialize()
    'colwidth = "blablablabla"
    End Sub
    Function fonction1(listbox)
    colwidth = listbox.ColumnWidths
    Set CLS.liste1 = listbox
    End Function
    Private Sub liste1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox colwidth
    End Sub

    Attention il n'est surtout pas question ici de mettre cette variable en public dans un module standard

    si quelqu'un a une idée a proposer je veux bien
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Patrick
    Encore sur cette "listbox éditable dynamiquement", hein ...
    Je vais finir par déposer une contribution sur ce sujet futile et on n'en parlera plus.
    Pour te répondre (et de manière générale) : on évite de toutes manières autant que faire se peut de jouer avec la portée des variables. C'est gourmand , alors qu'il suffit souvent de passer ces mêmes variables en paramètres ***** de la procédure qui doit les utiliser.

    ***** Ah oui ! Je sais ... tu "mesures", toi, la qualité d'un code au nombre le plus réduit possible des octets qu'il occupe. Je pose sur ces choses un tout autre regard et privilégie l'efficacité, la moindre occupation de la mémoire (proportionnelle à la portée des variables) et la rapidité d'exécution .
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour jacques

    ca répond pas a ma question

    et c'est non seulement pour ma liste box (qui fonctionne déjà très bien) mais pour d'autre projets aussi


    même si c'est (gourmand, que tu utiliserais un autre procédé, etc.) je voudrais bien savoir comment garder cette variable dans toute ma classe

    j'ai bien essayé property (let/get) mais c'est pareil si c'est pas alimenté dans le initialise ca la garde pas

    d'autant plus que si tu avais lu ma demande correctement (pas en diagonale) tu ne m'aurais pas dis cela
    Pour te répondre (et de manière générale) : on évite de toutes manières autant que faire se peut de jouer avec la portée des variables. C'est gourmand , alors qu'il suffit souvent de passer ces mêmes variables en paramètres ***** de la procédure qui doit les utiliser
    je vois pas comment on pourrait envoyé un paramètre a une private sub évènement control sub classé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    j'ai eu beau relire 4 fois ton post, je ne comprends rien :
    -de ce que tu expliques
    -de ce qui te bloques
    -de ce que tu attends de nous.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re Bonjour jean Phillipe André

    ce que j'explique c'est simple

    dans le userform j'instancie la classe
    'dans le activate de l'userform j'appelle la fonction1 de la classe avec pour paramètre la listbox
    dans la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public WithEvents liste2 As MSForms.listbox
    dim machin as string
    dim cls as new classe1
    dans la fonction1 de la classe1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function fonction1(listbox)
    set cls.liste2=listbox
    machin =listbox.columnwidths 
    end function
    et dans l'évènement liste2 mousedown dans la classe je veux

    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick,
    chaque propriétés et méthodes , quelle soient public ou privées, appartiennent exclusivement à l'instance de la classe.

    il faut comparer ça à un bloc de papier calque ou chaque calque est univoque. pour modifier une autre instance il faut y avoir accès!

    le plus simple, facile à dire, est de définir une instance mère qui engrangera toutes les information utile aux filles.
    Code revient à rendre public les info! : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set clsM = ClsMaitre
    clsM.colwidth = listbox.ColumnWidths

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public WithEvents liste1 As MSForms.listbox
    Public colwidth
    Private clsM As Classe1
    Function fonction1(listbox, ClsMaitre As Classe1)
    Set clsM = ClsMaitre
    clsM.colwidth = listbox.ColumnWidths
    Set CLS.liste1 = listbox
    End Function
    Private Sub liste1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox clsM.colwidth
    End Sub

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour robert
    ton premier code tu le met ou
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Invité
    Invité(e)
    Par défaut
    Dans ta fonction du module de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function fonction1(listbox, ClsMaitre As Classe1)
    Set clsM = ClsMaitre
    clsM.colwidth = listbox.ColumnWidths
    Set CLS.liste1 = listbox
    End Function

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Re bonjour Patrick

    Je t'invite à lire le didacticiel fort bien fait que Pierre Fauconnier a pris la peine de déposer en ce qui concerne les classes personnalisées.
    http://fauconnier.developpez.com/art...neral/classes/
    Je l'ai personnellement lu et relu. Il apporte ta solution, notamment en ce qui concerne l'aspect analogue entre une classe personnalisée et une variable de type personnalisé.
    Fais comme moi -->> prends le temps de lire et analyser tout ce que Pierre Fauconnier y expose.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour jacques

    je l'ai même en pdf ce tuto depuis longtemps

    les variables typées/classe je sais m'en servir

    il y a une seule chose qui manque

    c'est le fait que j'utilise une fonction dans!!!! la classe pour instancier une autre!!!! instance de la classe

    ce qui a pour effet dans les sub classe de perdre le property let/get ou même une simple variable dimée c'est évident

    dans les démo a moins que j'ai sauté ce chapitre l'utilisation des object de la classe est en dehors du module classe

    je vais tester la proposition de robert
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    @Robert

    non ca ne fonctionne pas

    pour rappel
    code userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim cl As New Classe1
     
    Private Sub UserForm_Activate()
        Set plage = Sheets(1).Range("a1:j100")
        colonnewidths = Array(60, 80, 60, 60, 90, 80, 75, 68, 90, 60)
        With ListBox1
            .List = plage.Value
            .ColumnCount = plage.Columns.Count
            .ColumnWidths = Join(colonnewidths, ";")
        End With
        cl.fonction1 ListBox1, cl
    End Sub
    code classe

    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
    Public WithEvents liste1 As MSForms.listbox
    Dim CLS(2) As New Classe1
    public ncolwidth as string
     
    Property Get colwidth() As String
        ' Propriété en lecture
        colwidth = ncolwidth
    End Property
     
    Property Let colwidth(colwidth As String)
        ' Propriété en écriture
        ncolwidth = colwidth
    End Property
     
    Private Sub Class_Initialize()
    'colwidth = "blablablabla"
    End Sub
     
     
    Function fonction1(listbox, ClsMaitre)
    Dim clsM As Classe1
    Set clsM = ClsMaitre
    clsM.colwidth = listbox.ColumnWidths
    Set CLS(1).liste1 = listbox
    CLS(1).colwidth = listbox.ColumnWidths
    End Function
    Private Sub liste1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox colwidth
    End Sub
    j'ai toujours un message vide
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 250
    Points
    34 250
    Par défaut
    Salut,

    a defaut de pouvoir faire avancer le schmiblick, je crois pouvoir dire que cette ligne est foireuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cl.fonction1 ListBox1, cl
    se passer soi meme en parametre :/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re il m'a sembler aussi
    mais comme il la mis dans sa réponse j'ai essayé ca coute rien

    mais c'est bon ca fonctionne
    en fait il faut alimenter le colwidth de chaque instances

    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
    Option Explicit
    Public WithEvents liste1 As MSForms.listbox
    Dim CLS(2) As New Classe1
    Private ncolwidth As String
    Private clsM As Classe1
     
    Property Get colwidth() As String
        colwidth = ncolwidth ' Propriété en lecture
    End Property
    Property Let colwidth(colwidth As String)
         ncolwidth = colwidth ' Propriété en écriture
    End Property
     
    Private Sub Class_Initialize()
    'colwidth = "blablablabla"
    End Sub
    Function fonction1(listbox)
    Set CLS(1).liste1 = listbox
    CLS(1).colwidth = listbox.ColumnWidths
    End Function
    Private Sub liste1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox colwidth
    End Sub
    Merci a tous
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Invité
    Invité(e)
    Par défaut
    En fait il courant qu'une instance se passe elle même en paramètres!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set ClsFille = new Classe1
    Set ClsFille.Parent = Me
    Il est ainsi possible de naviguer dans arborescence!

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bien vu robert c'est une question que je me posais depuis un moment

    juste pour finir y a t il un moyen du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each class in cls.instances
    histoire de pouvoir faire des mise ajour globales de toutes les instances dynamiquement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Invité
    Invité(e)
    Par défaut
    Si tu instancie via une collection oui en quelque sorte!

    Mais là on as une arborescence comme les répertoires de Windows!

    Tu auras accès aux instances immédiatement fille. Implémentes une méthode qui parcours de filles en filles!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function Scan()
    for i = 0 to Instances.count -1
              Instances(i).scan
    Next
    End function
    Mais tu peux appeler la fonction fille en vérifiant le typename(ClseFille) <>"Nothing"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public instances as new collection
    For i = 1 to 10
    Set cls= new class1
    Set Cls.parent = me
    instances.add cls
    Set cls= nothing
    Next
    for each class in instances
    Dernière modification par Invité ; 03/09/2017 à 16h04.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En conclusion pour la compréhension.
    Un module de classe est un modèle de variable objet que je qualifierai d’intelligent !
    Une instance est une photocopie du code de ce module de classe, compilé via son constructeur NEW et chargé en mémoire. Je peux donc manipuler cette instance (Objet fini).

    Il ne faut pas confondre instance et module de classe, même si apparemment [Touche F8] c’est la même chose ! En fait le compilateur passe plusieurs fois dans l’éditeur du module de classe mais en renseignant ses propriétés avec celles de l’instance en cours (Me).
    Les propriétés et méthodes sont univoques pour chaque instance .elles sont encapsulé dans l’instance et seule les propriétés et méthodes public sont accessibles via une déclinaison de la hiérarchie de l’instance ! Me.Parent.Parent.Parent !
    Les modules de classe sont déroutants pour un développeur habitué au langage procédural !

    Il faut désapprendre ce que nous avons appris et voir les module de classe comme un chaine de commandement où chaque acteur sais faire le travail qu’il lui est confié sans pour autant que le chef de projet ne puisse avoir accès à son logiciel !
    Une application architecturée autour de module de classe est comme une maison fabriquée en Lego ! Je choisi tel ou tel brique en fonction de ses caractéristique sens me soucier de comment elle a été fabriqué même si pour le coup c’est moi qui la fabrique ! Après tout on le fait tous les jours
    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
    Debug.Print ActiveCell.Parent.Name
    Debug.Print ActiveCell.Parent.Parent.Name
    Debug.Print ActiveCell.Parent.Parent.Parent.Name
     
    Private Sub Workbook_Open()
    Debug.Print Me.Name
    End Sub
     
     
    Private Sub Worksheet_Deactivate()
    Debug.Print Me.Name
    Debug.Print Me.Parent.Name
    End Sub
     
     
     
    Private Sub UserForm_Initialize()
    Debug.Print Me.Name
    End Sub
    il faut comprendre WorkBooks est une collection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WorkBooks.add
    MyCollection.Add
    et ne pas perdre de vue que WorkBook est un classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim Xl as new Excel.application 'Classe
    Cordialement
    Dernière modification par Invité ; 06/09/2017 à 13h00.

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Merci robert pour l'exemple de la collection
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick,

    Je viens de penser que faire une boucle pour modifier les listes fille n'était pas forcement la bonne solution vue que l'évènement peut tout aussi bien être intercepté par la classe fille!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub liste1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox colwidth
    End Sub
    Private Sub liste1_parent_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 2 Then MsgBox colwidth
    End Sub
    C'était juste histoire que tu passe définitivement du coté obscure de la force!

  20. #20
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Robert
    je l'avais jamais tenter comme ca bien vu je me passe de variable et j'ai les parent rien en classant les filles

    bien vu
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. récupérer une variable d'une fonction dans une classe
    Par free_dom dans le forum Général Python
    Réponses: 20
    Dernier message: 08/07/2009, 12h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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