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 :

classes persos et fonctionnement incompris [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut classes persos et fonctionnement incompris
    Bonjour,

    je débute en POO. Dans le cadre d'une tentative de développement d'un jeu (qui existe en plateau) j'approfondis (du moins j'essaie) ma connaissance d'XL.
    Là j'en suis à utiliser des classes perso.
    J'ai 2 classes dont les objets sont des MSFORMS.IMAGE
    J'ai créé des évènements (sur click et mousemove) dans les 2 classes.
    POur créer les objets basés sur ces classes j'ai utilisé 2 méthodes :
    - pour l'une je crée mes objets à partir d'objet activeX image déjà existant dans le classeur (via la macro test1 / classe starcraft)
    - pour l'autre je crée l'objet à partir de OLEObjects.Add (via la macro test2/ classe cards)

    Dans le 1er cas tout se passe bien, mes objets sont bien créés et réagissent aux évènements créés.
    Dans le 2e cas , les objets activeX image sont bien créés mais ils ne réagissent pas aux évènements. Mais une fois créés, si j'affecte ces contrôles activeX image aux objets du type de la classe perso et bien là ils réagissent aux évènements.
    Ca fait des jours que j'essaie de créer mes objets de la 2e classe d façon différente sans succès. C'est la raison pour laquelle je sollicite votre aide sur le sujet.
    classeur1.xlsm
    Comme je le dis je débute ; il ya peut-être d'autres façon de faire mais sachez que le 1er cas est pour un nb d'objet restreint avec que le 2e est pour une collection bien plus importante d'où l'idée de ne pas surcharger le classeur et de créer l'objet à la demande quand c'est nécessaire.

    Merci d'avance. Le classeur simplifié avec le strict nécessaire est en PJ. Il faut juste avoir 2 images gif (image1.gif et image2.gif dans un répertoire c:\image)

    EDIT : en mettant des timers et en regardant l'exécution des programmes quelque chose m'interpelle : la création des objet par la méthode OLEObject.Add fait :
    - qu'on ne peut pas interrompre l'exécution de la macro (c'est vrai avec la classe choisie ici mais aussi avec d'autres type comme les boutons (j'ai essayé) Et j'ai essayé avec des exemples de programme de tutoriels et c'est pareil.
    - quelque soit le nombre d'objets créés c'est comme si les instructions qui suivent étaient toutes exécutées à la fin (exemple les images affectées ne se voient qu'à la fin,, le nom des objets (modifiés dans la macro) pareil)
    Je me dis que ce fonctionnement (qui est peut-être anormal) empêche l'affectation d'une objet de ma classe perso à l'objet qui vient d'être créé et que tout mes soucis viennent de là.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Bonjour,

    voilà j'ai trouvé ce qui n'allait pas. Comme expliqué dans cette discussion
    https://www.developpez.net/forums/d2...fin-procedure/
    l'affectation d'un objet créé par OLEObject.Add ne semble pas apprécier n'importe quelle façon de spécifier où l'objet doit être créé.

    Si je fais directement référence à la feuille (et ce même en spécifiant le classeur) l'objet est bien créé sur la feuille mais la variable Objet (même déclarée en Public au début de module) reste vide à la fin du code.

    Si je passe par un objet worksheet déclaré auparavant et lui affecte l'adresse de la feuille où l'objet doit être créé (Activeworkbook.Worksheets(xxx) ou ActiveSheet) alors là tout se passe bien. Mes objets sont conservés en fin de code et les évènements affectés à la classe perso par exemple fonctionnent parfaitement.

    Voilà si ca peut être utile.

    Je n'ai pas trouvé cette précision dans les diverses docs de référence que j'ai parcouru.

    Le code qui fonctionne pour garder les objet de classe perso Cards
    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
    Sub create_card(feuille As String, num As String, xOrientation As String, x As Single, y As Single)
    Dim Sh As Worksheet
        Set Sh = ActiveWorkbook.Worksheets(feuille)
        nbCard = nbCard + 1
        On Error Resume Next
        If Sh.OLEObjects(num).Object Is Nothing Then
            Set Cards(nbCard).Card = Sh.OLEObjects.Add _
            (classtype:="Forms.Image.1", Left:=x, Top:=y, Width:=155.25, Height:=240.75).Object
            With Cards(nbCard).Card
                .Name = num
                .PictureAlignment = fmPictureAlignmentCenter
                .BackStyle = fmBackStyleTransparent
                .PictureSizeMode = fmPictureSizeModeZoom
                .Picture = LoadPicture("E:\Dropbox\HF4\Produit Commercial\Cards\GIF\" & num & ".gif")
            End With
        Else
            Set Cards(nbCard).Card = Worksheets("Feuil1").OLEObjects(num).Object
        End If
        Cards(nbCard).Orientation = xOrientation
    End Sub

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 035
    Par défaut
    Bonjour.
    Si tu souhaites développer un jeu d'arcade, alors cette documentation peut être utile : http://laurent-ott.developpez.com/tu...el-vba-tome-2/
    Bonne continuation.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur maintenance
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur maintenance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Bonjour,

    Merci. Dans mes recherches j'étais déjà tombé sur ces tutoriels. Mais je ne sentez pas assez à l'aise pour passer aux API.
    Et puis le jeux que je cherche à automatiser est d'abord un jeu complexe et les objets restent simples (des cartes et des pions, certes complexes dans leurs propriétés et les possibilités offertes)
    En tout cas merci pour le partage de ce travail.

    Bonne continuation aussi

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

Discussions similaires

  1. Comment renvoyer une classe perso ?
    Par Cyrilange dans le forum Services Web
    Réponses: 5
    Dernier message: 03/05/2006, 16h54
  2. [MFC][Debutant] Une classe perso de CEdit
    Par kiroukou dans le forum MFC
    Réponses: 6
    Dernier message: 21/06/2005, 15h07
  3. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  4. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07
  5. [ JSP ] [ Tomcat ] importer une classe perso
    Par captainpouet dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 11/03/2004, 11h30

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