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 :

WScript.Shell VS IWshRuntimeLibrary.WshShell


Sujet :

Macros et VBA Excel

  1. #1
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut WScript.Shell VS IWshRuntimeLibrary.WshShell
    Bonjour,

    je me pose une question sur l'objet Shell de la bibliothèque Windows Script Host Object Model (bibliothèque bien sûr cochée dans les Références de mon projet).

    Lorsque je souhaite déclarer un objet Shell (voire le créer via le mot-clef New), je dois passer par la bibliothèque suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oshell As New IWshRuntimeLibrary.WshShell
    Mais lorsque je souhaite créer l'objet via un CreateObject, je dois passer par cette bibliothèque-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oshell = CreateObject("WScript.Shell")
    Pourquoi deux bibliothèques et dénominations différentes pour le même objet ?

    A noter que, si j'essaie d'intervertir les deux dénominations (utiliser WScript.Shell dans le cadre d'un Dim et IWshRuntimeLibrary.WshShell dans le cadre d'un CreateObject), j'ai les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oshell As WScript.Shell
    => Erreur de compilation : Type défini par l'utilisateur non-défini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oshell = CreateObject("IWshRuntimeLibrary.WshShell")
    => Erreur d'exécution '429': un composant ActiveX ne peut pas créer d'objet


    J'y perds un peu mon latin...

    Merci d'avance pour vos lumières !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour la reponse est simple
    on appele ca latebinding ou earlybinding

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set blala=createobject("wscript.shell")
    C'est du late binding(declaration tardive)
    avec ce mode tu n'est pas obligé de cocher la reference dans ton projet
    fait une recherche sur ces deux expressions
    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

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, qqs infos ici ou là : Early ou Late Binding

  4. #4
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Tout d'abord, merci pour vos réponses.
    En fait, je connais les concepts de late et d'early binding. Ce que je ne comprends pas, c'est la raison pour laquelle je ne peux pas faire appel à la même bibliothèque pour mon Dim et pour mon CreateObject.

  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
    Bonjour,

    parce que Windows est conçu ainsi pardi !

    Ne pas confondre le nom dans la bibliothèque et son nom d'ActiveX référencé dans la Base de Registres …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  6. #6
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    parce que Windows est conçu ainsi pardi !
    Mais imaginons que je veuille déclarer puis créer (explicitement) un Recordset ADO, je procède ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rst1 As ADODB.Recordset
    Set rst1 = CreateObject("ADODB.Recordset")
    Je fais appel à la même bibliothèque pour mon Dim et mon CreateObject, ce qui semble évidemment logique.

    Alors pourquoi, pour l'objet Shell de la bibliothèque WScript, dois-je procéder ainsi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oshell As IWshRuntimeLibrary.WshShell
    Set oshell = CreateObject("WScript.Shell")

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


    J'y ai pourtant déjà répondu …     Plein de choses intéressantes dans la Base de Registres !

    Au passage je ne me rappelle pas d'avoir déclaré comme cela le WShShell en déclaration anticipée,
    mais là ne pouvant le vérifier …

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    MarcL t'a tres bien repondu
    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oshell As IWshRuntimeLibrary.WshShell
    Set oshell = CreateObject("WScript.Shell")
    traduction de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oshell As lalibrairie
    Set oshell = CreateObject("lalibrairie")
    tu vois ou ca coince

    il arrive cependant que certaines librairies est besoins de la reference cochée meme en late binding sans doute ont elles été ajoutées avec les mises a jour window ou instalation logicielles tiers et sont mal encapsullée dans les dlls
    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

  9. #9
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Je me permets d'insister car je ne comprends décidément pas votre réponse.

    Je vous demande pourquoi l'objet Shell doit être appelé de deux manières différentes en fonction de l'instruction concernée (Dim / CreateObject) et vous me répondez que "Windows est conçu ainsi".
    Vous comprendrez que cela me laisse un peu sur ma faim

    Vous évoquez la base de registre, suis-je censé y trouver le lien entre la dénomination IWshRuntimeLibrary.WshShell et la dénomination WScript.Shell ?

    En vous remerciant par avance pour vos lumières.

  10. #10
    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
    Citation Envoyé par J1 Voir le message
    je dois passer par la bibliothèque suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oshell As New IWshRuntimeLibrary.WshShell
    Pourquoi déclarer ainsi au lieu de directement l'objet concerné ?

    Sinon d'un côté il y a une référence nommée d'une certaine manière et de l'autre un objet ActiveX nommé d'une autre …

  11. #11
    J1
    J1 est déconnecté
    Membre expérimenté Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Par défaut
    Citation Envoyé par J1 Voir le message
    je dois passer par la bibliothèque suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oshell As New IWshRuntimeLibrary.WshShell
    Citation Envoyé par Marc-L Voir le message
    Pourquoi déclarer ainsi au lieu de directement l'objet concerné ?
    Parce que, comme je l'indiquais dans mon premier post, si je déclare mon objet en tant que WScript.Shell, j'ai l'erreur suivante :

    Erreur de compilation : Type défini par l'utilisateur non-défini

    D'où la création de ce topic.

  12. #12
    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
    Citation Envoyé par J1 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim oshell As WScript.Shell
    => Erreur de compilation : Type défini par l'utilisateur non-défini
    Normal !   L'objet n'existe pas dans la référence …

    L'autre bonne déclaration directement sur le bon objet :   Dim oShell As New WshShell   …

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2010, 09h42
  2. Wscript.Shell ...
    Par christine dans le forum ASP
    Réponses: 8
    Dernier message: 31/03/2006, 22h25
  3. [VbScript]Question concernant WScript.Shell.Exec
    Par ghim dans le forum Windows
    Réponses: 5
    Dernier message: 17/03/2006, 17h04
  4. Réponses: 21
    Dernier message: 08/08/2005, 11h57
  5. Pb - CreateObjet(WScript.shell)
    Par anathem62 dans le forum ASP
    Réponses: 28
    Dernier message: 02/06/2004, 11h40

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