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 :

VBA: user defined type et prodécures/fonctions dans le code d'un onglet


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut VBA: user defined type et prodécures/fonctions dans le code d'un onglet
    Bonjour,

    Je suis en train d'essayer d'écrire une macro assez lourde qui faire l'interface entre un logiciel externe (Femap v10) et Excel.
    Mon but est de faire un macro qui appartient au code d'un onglet, afin d'avoir la possibilité de copier cette onglet entre les différents fichiers Excel et être sûr que le code suit.

    Ce qui me complique la tâche, c'est que j'ai crée un type de donnée personnalisé (sous forme d'un arbre) et que j'ai besoin de fonction ou sous-procédures pour modifier des variables de ce nouveau type de donnée.

    Et forcément, j'ai des erreurs de compilation. Il semblerait que je ne puisse modifier ces données personnalisée dans des fonctions, même en utilisant un module.

    Est-ce que quelqu'un a une solution magique?
    Merci pour votre aide,
    BenJ
    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
    Public Type Edge_Matrix
        node As Long
        Neighbour() As Long
    End Type
     
    Public Type Vector
        x As Double
        y As Double
        z As Double
    End Type
     
    Sub Get_Center(ID1 As Vector, ID2 As Vector, ByVal outV As Vector)
    ' Calculate the coordinates of the center between 2 points.
     
        outV.x = (ID1.x + ID2.x) / 2
        outV.y = (ID1.y + ID2.y) / 2
        outV.z = (ID1.z + ID2.z) / 2
     
    End Sub

  2. #2
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 805
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 805
    Points : 32 093
    Points
    32 093
    Par défaut
    mmmh, du code dupliqué, voilà une source habituelle de soucis.

    Est-ce que tes déclarations sont dupliquées? Si oui, pas la peine de chercher plus loin la source de tes ennuis.

    Si non, si sur un seul EXCEL tu as une seule déclaration, tu as un autre problème : le ByVal. ByVal signifie que tu passes la valeur, et qu'elle ne sera pas changée dans la procedure. Ton code compile correctement si tu mets ta sortie en ByRef. Et surtout, il sera juste. Même si il compilait, ton code actuel ne te donnerait pas la réponse. Juste avec ByRef, c'est du tout cuit.

    Mais c'est, à mon sens, suboptimal. une fonction est plus adaptée :

    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
     
    Function GetCenter(ID1 As Vector, ID2 As Vector) As Vector
        GetCenter.x = (ID1.x + ID2.x) / 2
        GetCenter.y = (ID1.y + ID2.y) / 2
        GetCenter.z = (ID1.z + ID2.z) / 2
    End Function
     
    Sub Main()
        Dim Vecteur1 As Vector
        Dim Vecteur2 As Vector
        Dim Vecteur3 As Vector
        Vecteur1.x = 4
        Vecteur1.y = 4
        Vecteur1.z = 4
        Vecteur2.x = -2
        Vecteur2.y = 2
        Vecteur2.z = -2
        Vecteur3 = GetCenter(Vecteur1, Vecteur2)
        MsgBox (Vecteur3.x & "/" & Vecteur3.y & "/" & Vecteur3.z)
    End Sub
    Sinon, un objet serait encore mieux, mais ça peut être du boulot de transférer les modules de classes d'un classeur à l'autre.

Discussions similaires

  1. Envoi de Mail VBA/ Access 2003 / User defined type not defined
    Par helico57570 dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/07/2010, 22h28
  2. User-defined type not defined
    Par wajdisoft dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/07/2009, 19h05
  3. MouseWheel user-defined type not defined
    Par jibouze dans le forum IHM
    Réponses: 7
    Dernier message: 08/06/2006, 17h36
  4. Réponses: 5
    Dernier message: 13/03/2006, 15h51
  5. [VB]user defined type undefined???
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/02/2006, 14h36

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