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 :

Différence déclaration ? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Par défaut Différence déclaration ?
    Bonjour à tous,

    En essayant de lancer une macro sous Excel permettant d'ouvrir un nouveau document Visio et d'y tracer des formes, selon le pc je suis confronté à des erreurs (tous sous Excel 2010). L'erreur survient sur ma ligne en surlignant "app_visio" avec ce message "Mécanisme de bibliothèque d'objets non géré" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set app_visio = CreateObject("Visio.Application")
    En regardant le programme et en testant, je me suis rendu compte que 2 déclarations différentes donnaient le même résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim app_visio As Visio.Application
    Set app_visio = CreateObject("Visio.Application")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim app_visio As Object
    Set app_visio = CreateObject("Visio.Application")
    Y a-t-il une différence significative sur le fonctionnement du programme entre ces deux méthodes ? Est ce que ça pourrait être une source d'erreur en fonction du poste sur lequel la macro est lancée ?

    Merci d'avance pour votre aide,

    Bonne journée

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    la première en liaison anticipée (Early Binding) est plus efficace,
    encore faut-il ajouter la librairie correspondante aux Références du projet (via le menu Outils) …

    La deuxième est en liaison tardive (Late Binding) et n'a pas besoin d'une référence cochée.

    Voir la fiche Comprendre Early ou Late Binding

    Lorsqu'un applicatif migre sur différents ordinateurs, préférence vers la liaison tardive.

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    la seule difference c'est que si tu déclares comme visio application tu pourras utiliser l'autocomplétion en codant... c'est à dire que l'éditeur vb va te cherche ce que tu peux mettre comme propriété quand tu mets un point

    Ex: range("A1").C va t'afficher une petite fenêtre avec Copy ...

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Par défaut
    Merci Marc je vais y jeter un coup d'oeil. l'erreur de "mécanisme de bibliothèque d'objets non géré" peut donc effectivement découler de cette déclaration ?

    Et merci EngueEngue pour cette précision, en fait ça peut être bien de faire la 1ère déclaration pendant le codage et à la fin de basculer sur la 2ème déclaration avant la publication du fichier pour utilisation.

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    peut-être pour l'erreur (j'ai un doute à cause du message)

    et tout à fait pour le développement en liaison anticipée puis passage en liaison tardive pour le déploiement de l'applicatif.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Par défaut
    Merci beaucoup pour ces explications rapides et claires ! à moi de jouer pour corriger tout ça.

    Bonne journée

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Pas vu le réponse de marc qui est bien sûr plus précise que la mienne comme d'habitude.

    Sorry

    Cependant si tu utilises des fonctions de la reference visio... tu devras les activer sur les postes lors du déploiement que ce soit déclaré comme objet ou comme visio.application

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Par défaut
    Mais vu que je transmet le fichier, les références activées sont liées au fichier si j'ai bien vu en transmettant le fichier sur d'autres postes. Avec la méthode de Late Binding je viens d'essayer même sur un poste ayant Excel 2003 et ça fonctionne parfaitement sans toucher aux références

  9. #9
    Invité
    Invité(e)
    Par défaut
    +1 avec les réponses de Marc-L.

    J'utilise aussi de manière générale ce genre de déclaration (As Object) lorsque je fait appel à une référence qui ne fait pas parti des 4 références de base:
    - VBA
    - Excel
    - stdole
    - Office

    Enumérable par (à faire dans un project neuf):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim ItemRef As Object ' ou plus généralement As Variant
    For Each ItemRef In Application.ThisWorkbook.VBProject.References
        Debug.Print ItemRef.Name
    Next
    Egalement, faire appel à TypeName plutôt que typeOf peut éviter d'appeler par exemple dans le cas d'un MSForm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If TypeOf a Is MSForms.ToggleButton Then
    If TypeName(a) = "ToggleButton" Then 'cas ne nécessitant pas de référence

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

Discussions similaires

  1. Différence entre . et div# dans la déclaration des blocs
    Par filtep dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/01/2010, 19h03
  2. Différence de syntaxe dans la déclaration struct
    Par GreatDeveloperOnizuka dans le forum C
    Réponses: 6
    Dernier message: 25/01/2009, 12h28
  3. Réponses: 2
    Dernier message: 16/12/2007, 01h35
  4. Quelle est la différence entre ces deux déclarations ?
    Par sidahmed dans le forum Débuter
    Réponses: 15
    Dernier message: 04/10/2007, 19h59
  5. Différence / déclaration ouverture de feuille excel
    Par mosquitout dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/08/2006, 09h50

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