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 :

Événements de feuille qui ne se déclenche pas


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut Événements de feuille qui ne se déclenche pas
    Bonjour,

    Une petite colle sur laquelle je sèche:

    Sur un classeur, je souhaite m'assurer d'afficher la première feuille à l'ouverture du classeur.
    Sur la première feuille, implémenter une interface afin de profiter des possibilités objet offertes par VBA.
    J'aurai besoin d'utiliser l'évènement Activate des feuilles.
    Mais surprise, l'évènement Activate de la première feuille ne se déclenche pas.

    Faute de solution, je cherche une explication.
    Piece jointe: Classeur1.xlsm

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 133
    Billets dans le blog
    53
    Par défaut
    Bonjour deedolith,
    J'aurai besoin d'utiliser l'évènement Activate des feuilles.
    Mais surprise, l'évènement Activate de la première feuille ne se déclenche pas.
    Ce n'est pas l'événement Activate de la première feuille qui ne se déclenche pas mais celui de la feuille active. Comme elle est active, on ne peut l'activer
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Ops, attention aux cas particuliers (l'ouverture).

    Si l'on active une autre feuille, et que l'on revient sur la première (manuellement ou par code), le gestionnaire d'évènement reste muet.
    Soit il ne se déclenche pas, soit ... autre chose.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 133
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    1. J'ai placé la procédure ci-dessous dans les deux feuilles du classeur que tu as mis en pièce jointe.
    2. J'ai fermé le classeur dont la première feuille était active.
    3. J'ai ouvert le classeur et évidemment l'événement n'a pas été déclenché
    4. J'ai sélectionné la feuille 2, et là j'ai eu le message.
    5. J'ai sélectionné ensuite la feuille 1 et j'ai également eu le message


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
      MsgBox "Activation de la feuille " & Me.Name
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 510
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 510
    Par défaut
    Il faut rajouter le code au niveau du ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        Feuil1.Activate
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 133
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il faut rajouter le code au niveau du ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        Feuil1.Activate
    End Sub
    As-tu seulement effectuer un test sur ce que tu avances ?
    Si à la fermeture du classeur, la feuil1 est active, tu as beau utiliser la méthode Activate, tu ne déclencheras pas l'événement de l'activation de la feuille et cela me semble tout à fait normal.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Heu ...
    Visiblement, la piece jointe n'a pas été ouverte, donc voici les codes que j'ai écrit dedans.

    Class Interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
     
    Public Sub Dosomething(): End Sub
    ThisWorkbook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub Workbook_Open()
        Dim Ws As Excel.Worksheet
        Set Ws = ThisWorkbook.Worksheets(1)
        Ws.Activate
    End Sub
    Feuil1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Implements Interface
     
    Private Sub Interface_Dosomething()
     
    End Sub
     
    Private Sub Worksheet_Activate()
        Debug.Print "Worksheet_Activate (" & Me.Name & ")"
    End Sub
    Feuil2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Sub Worksheet_Activate()
        Debug.Print "Worksheet_Activate (" & Me.Name & ")"
    End Sub
    Feuil3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Sub Worksheet_Activate()
        Debug.Print "Worksheet_Activate (" & Me.Name & ")"
    End Sub
    Le classeur a été enregistré avec la feuille 2 active.

    Scenarios de test:
    Ouverture: La feuille 1 est bien affichée, aucun message dans la fenêtre d'exécution (Anomalie ?)
    Activation manuelle de la feuille 2: Le message "Worksheet_Activate (Feuil2)" s'affiche dans la fenêtre d'exécution (Comportement attendu).
    Activation manuelle de la feuille 1: Aucun message supplémentaire dans la fenêtre d'exécution (Anomalie !).

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 133
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Visiblement, la piece jointe n'a pas été ouverte, donc voici les codes que j'ai écrit dedans.
    A l'heure où j'écris, la pièce jointe a été chargée cinq fois dont moi et il n'y avait aucune procédure événementielle ni de module de classe, cela m'a d'ailleurs étonné.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Etonnant en effet (probablement une erreur de ma part), mais passons et revenons au sujet de départ.

    Une idée sur ce comportement étrange ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour le fil,

    Une simple sub dans ThisWorkbook fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
      Debug.Print "Workbook_SheetActivate(" & Sh.Name & ")"
    End Sub
    Ensuite pour être certain d'afficher une 1ère feuille ce qu'on fait en général
    1) Une feuille "Accueil" sur laquelle on demande d'activer les macros
    2) A la fermeture du classeur on affiche la feuille "Accueil" et on masque toutes les autres
    3) A l'ouverture on fait l'inverse

    Ainsi si la personne n'a pas VBA activé sur son poste, elle aura le message d'Accueil, sinon les feuilles
    On peut choisir alors de se positionner sur celle qu'on souhaite

    Bon week-end

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 187
    Par défaut
    Hello,
    la procédure Activate sur une feuille ne se déclenche pas si la feuille est déjà active.
    A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
       Application.ScreenUpdating = False
        Worksheets("Feuil2").Activate
        Worksheets("Feuil1").Activate
        Application.ScreenUpdating = True
    End Sub
    Ami calmant, J.P[/COLOR]

  12. #12
    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
    Salut.

    Je me pose la question de l'utilisation d'un interface, déjà.

    Perso, à l'ouverture, j'activerais la feuille 1 (Si elle l'est déjà tant mieux) puis je lancerais la procédure souhaitée.

    Note: On ne met JAMAIS du code applicatif dans un évènement*. En gros, le seul code que l'on peut y trouver, c'est l'appel de procédures qui font le job.

    Dans le module ThisWorkBook
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
      If ActiveSheet Is Feuil1 Then
        MaProcDePreparation
      Else
        Feuil1.Activate
      End If
    End Sub

    Dans le module de Feuil1
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
      MaProcDePreparation
    End Sub

    Dans un module standard
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MaProcDePreparation()
      MsgBox "J'ai préparé le classeur"
    End Function


    * https://www.developpez.net/forums/bl...-evenementiel/
    "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...
    ---------------

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    @BrunoM45:
    Ce que tu proposes est la solution du pauvre, malheureusement, cela oblige à tester sh en tout sens pour savoir à qui on a affaire, ainsi que des retouches a chaque fois que l'on ajoute ou supprime une feuille. Pas terrible.
    De plus, j'ai découvert d'autres complications.

    Il apparait qu'une feuille ne peut hériter d'une interface, sinon son instanciation échoue.
    Ce qui semble expliquer que les évènements de la feuille ne sont pas déclenchés (pas d'instance, pas d'évènement).

    "Les routes de Microsoft mon fils, sont impénétrables."

  14. #14
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 187
    Par défaut
    Hello,
    Citation Envoyé par deedolith Voir le message
    Il apparait qu'une feuille ne peut hériter d'une interface, sinon son instanciation échoue.
    Ce qui semble expliquer que les évènements de la feuille ne sont pas déclenchés (pas d'instance, pas d'évènement).
    voici un exemple que propose le démoniaque ChatGPT :
    Module de classe MyClassModule
    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
    ' MyClassModule
    Option Explicit
     
    Private mName As String
     
    Public Property Get Name() As String
        Name = mName
    End Property
     
    Public Property Let Name(value As String)
        mName = value
    End Property
     
    Public Sub DoSomething()
        MsgBox "Doing something in MyClassModule. Name: " & mName
    End Sub

    Module de classe MyInterface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' MyInterface
    Option Explicit
     
    Public Sub DoSomething()
    End Sub
    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
    ' Worksheet module (e.g., Sheet1)
    Option Explicit
    Implements MyInterface
     
    Private myClassInstance As MyClassModule
     
    Private Sub Worksheet_Activate()
        Set myClassInstance = New MyClassModule
        myClassInstance.Name = "Example"
        myClassInstance.DoSomething
    End Sub
     
    Private Sub MyInterface_DoSomething()
        MsgBox "Doing something in Worksheet. Name: " & myClassInstance.Name
    End Sub
    Ami calmant, J.P

  15. #15
    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
    Citation Envoyé par deedolith Voir le message
    [...]
    Il apparait qu'une feuille ne peut hériter d'une interface, sinon son instanciation échoue.
    Ce qui semble expliquer que les évènements de la feuille ne sont pas déclenchés (pas d'instance, pas d'évènement).[...]
    Il faut modifier la propriété Instancing du module d'interface en "Public not creatable"
    "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...
    ---------------

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    @jurassic pork:
    Malheureusement, le démoniaque chatGPT est dans les choux.
    Si après l'écriture du code, on obtiens le comportement attendu (forcement, l'instance de Feuil1 existant déjà),
    Après fermeture et re-ouverture du classeur, ça fait coin-coin (pas de pop-up).

    @Pierre Fauconnier:
    Ca, c'est déjà fait (ce genre d'erreur est signalé à la compilation).


    Je pense avoir trouvé une solution:
    Déléguer les évènements à une classe instanciée par la feuille, et héritant de l'interface.

  17. #17
    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
    Je me pose toujours la question de l'intérêt de l'interface. Ajouter de la complexité pour le plaisir? Si tu ajoutes une propriété de feuille pointant vers une classe, à quoi te sert l'interface?

    L'interface, c'est pour du polymorphisme (avoir un objet qui peut être regardé soit comme issu d'une classe, soit comme issu d'une autre). Du coup, quel est ton besoin? Il est purement théorique?

    Citation Envoyé par deedolith Voir le message
    [...]
    @Pierre Fauconnier:
    Ca, c'est déjà fait (ce genre d'erreur est signalé à la compilation).[...]
    Si tu l'as fait, tu peux donc regarder ta feuille qui implémente l'interface soit comme un worksheet, soit comme un objet issu de l'interface et les demandes de ton post initial sont résolus.

    Code de l'interface
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Property Get Propriete() As String
     
    End Property
     
    Property Let Propriete(Valeur As String)
     
    End Property

    Code de la feuille 1
    Code vba : 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
    Option Explicit
     
    Implements IInterface
     
    Private mPropriete As String
     
    Private Property Get IInterface_Propriete() As String
      IInterface_Propriete = mPropriete
    End Property
     
    Private Property Let IInterface_Propriete(Valeur As String)
      mPropriete = Valeur
    End Property
     
    Private Sub Worksheet_Activate()
      MaProcDePreparation
    End Sub

    Code de ThisWorkbook
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
      If ActiveSheet Is Feuil1 Then
        MaProcDePreparation
      Else
        Feuil1.Activate
      End If
    End Sub

    Code d'une module standard qui considère la feuille non comme un worksheet, mais comme un IInterface ( => polymorphisme)
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Function Test()
      Dim a As IInterface
     
      Set a = Feuil1
      a.Propriete = "Bonjour"
      Debug.Print a.Propriete
    End Function
     
    Function MaProcDePreparation()
      MsgBox "J'ai préparé le classeur"
    End Function

    Sans nous expliquer ton besoin, tu sembles juste vouloir publier pour montrer que tu "maîtrises" (mal) des concepts qui, sur un plan fonctionnel, ne servent à rien.
    "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...
    ---------------

  18. #18
    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
    Coder une classe qui utilise un interface et qui sera utilisée comme propriété d'une feuille que l'on active à l'ouverture du classeur, ça n'a pour moi rien des bonnes pratiques et s'apparente plutôt à du bidouillage (cfr tes interventions sur une autre discussion) pour faire compliqué là où on peut faire simple.
    "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...
    ---------------

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Je n'ai pas besoin d'expliquer la finalité, car ce n'est pas le sujet.

    En théorie, les modules de feuille sont des classes quelconques.
    Sachant qu'une classe peut implémenter une ou plusieurs interfaces, sans interférer avec son instanciation, le même comportement doit se retrouver avec les modules de feuille.

    Force est de constater que ce n'est pas le cas.

  20. #20
    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
    Citation Envoyé par deedolith Voir le message
    [...]
    Sachant qu'une classe peut implémenter une ou plusieurs interfaces, sans interférer avec son instanciation, le même comportement doit se retrouver avec les modules de feuille.

    Force est de constater que ce n'est pas le cas.
    Tu peux implémenter des interfaces dans un module de feuille, comme je l'ai illustré dans le dernier code que je t'ai donné.

    Citation Envoyé par deedolith Voir le message
    Je n'ai pas besoin d'expliquer la finalité, car ce n'est pas le sujet.[...]
    Sans savoir à quoi ce montage sert, on ne sait pas aider mieux. Continue donc à bidouiller des classes qui interfacent des brols pour les utiliser comme propriétés dans des modules de feuilles, puisque cela a l'air de manifestement t'amuser beaucoup.
    "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...
    ---------------

Discussions similaires

  1. [XL-2019] Protection de la feuille qui ne se remet pas toujours
    Par nlbmoi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/08/2021, 17h46
  2. [XL-2010] Feuille qui ne se calcul pas
    Par Nico_73 dans le forum Excel
    Réponses: 6
    Dernier message: 21/07/2016, 10h41
  3. Réponses: 0
    Dernier message: 05/03/2014, 22h13
  4. [XL-2003] Formule pointant sur une feuille qui n'existe pas
    Par Ketsu dans le forum Excel
    Réponses: 3
    Dernier message: 02/06/2010, 12h14
  5. [C#] [Excel] Feuille qui s'ouvre pas...
    Par lololefada dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/07/2004, 14h45

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