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 :

Objet de type WshShell [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de meolimo
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 141
    Par défaut Objet de type WshShell
    Bonjour à tous

    Je me vois transmettre la responsabilité d'un fichier excel qui contenant du code VBA programmer par un ancien employé.

    Il y a un bug initiale au moment de la compilation et tout porte a croire à une référence manquante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub PLUMprint()
     
    Dim objshell As WshShell
     
    Set objshell = CreateObject("WScript.Shell")
     
    objshell.Run """C:\TN3270 Plus v4.0.4 Evaluation\TN3270.exe""" & _
    "/session Justice /script C:\Users\ddulong9\Desktop\plumitif\SCRIPTS\PrintRSLTS.txt"
     
    End Sub

    Erreur de compilation
    Type définit par l’utilisateur non défini

    J ai cherché sur différente ressource sur le net concernant l’objet de type WshShell
    Selon vous est-ce bien lié au référence ?

    Merci à l’avance

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    À l'oeillomètre.

    "WScript.Shell" vient avec Windows Scripting Host. Les versions plus récentes de VBA exigent de cocher la référence aux objets externes même quand on utilise CreateObject. Dans ce cas, tu devrais vérifier si la référence à Microsoft Scripting Runtime est cochée. Si la référence n'est pas disponible, il resterait deux choses à faire:

    Vérifier avec le Service de Dictature Informatique si l'utilisation des scripts est permise sur ta machine. (Paraîtrait que c'est possible.)

    Télécharger et installer le programme:

    https://www.microsoft.com/en-us/down...s.aspx?id=8247

  3. #3
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à tous,
    Citation Envoyé par clementmarcotte Voir le message
    "WScript.Shell" vient avec Windows Scripting Host. Les versions plus récentes de VBA exigent de cocher la référence aux objets externes même quand on utilise CreateObject. Dans ce cas, tu devrais vérifier si la référence à Microsoft Scripting Runtime est cochée.
    ??????????

    Les quelles ?
    Que ce soit sous Office2k16 x32/x64 sur W7 et Office2k16 x32/x64 sur W10 j'utilise CreateObject sans cocher les références et ça fonctionne comme avant.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Sur mon Office 2010 64 bits, c'est comme cela. Impossible d'utiliser automation sans cocher les références.

    Bon, c'est peut-être dû à option explicit que je n'utilise pas, ou c'est peut-être un cadeau externe ajouté par Visual Studio (.net) qui n'aime pas vraiment le Late Binding.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si tu vas dans les références du programme au niveau de l'IDE, tu devrais voir une référence manquante.
    En fait, tu dois faire référence à Windows Script Host Object Model

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Salut Clément,
    Battu de vitesse ...

  7. #7
    Membre confirmé Avatar de meolimo
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 141
    Par défaut EFFICACITÉ !!!
    Merci a vous deux, Clément tu m’impressionne. Tout semble facile j'aimerais développer cette aisance.

  8. #8
    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, curieux ici sous 2007 cela fonctionne, par exemple pour du pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Tst()
    Dim sFichier As String, WsShell As Object
        sFichier = "C:\Faq\Faq VBA\Exemples\PDF\PdfCreator\catalogue Pivotage.pdf"
        Set WsShell = CreateObject("WScript.Shell")
        WsShell.Run "AcroRd32 " & sFichier
        Set WsShell = Nothing
    End Sub

  9. #9
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Curieux car j'ai également un O2k10 x64 sur mon PC W7 et je n'ai pas le souci.

  10. #10
    Membre chevronné
    Inscrit en
    Avril 2008
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 270
    Par défaut
    Bonsoir à tous,

    La différence vient de la déclaration.
    En early binding, on peut le déclarer en tant qu’Object ou le déclarer en tant que WshShell pour profiter de l’auto-complétion. On peut l’instancier au choix avec CreateObject ou New.
    En late binding, il faut le déclarer en tant qu’Object et l’instancier avec CreateObject.

    On ne peut pas en late binding déclarer un type d'objet "précis" et utiliser ce même type avec la commande New. Ça bloque à la compilation car la référence n'est pas incluse au projet, et du coup le projet ne connait pas le type d'objet.

    A+

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Merci pour l'information. En fait j'ai l'habitude de ne pas utiliser as Object ou as variant, sauf si c'est vraiment impossible de faire autrement. Et cela c'est rare.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    L'idéal, c'est de déclarer As Object et d'utiliser CreateObject.
    Ça évite des problèmes de compatibilité entre les différentes versions de contrôles, librairies,...
    Et ça arrive pas mal souvent.

    Par contre, au moment du développement, c'est bien utile de créer des références pour l'usage de l'Intellisense

  13. #13
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Merci pour l'information. En fait j'ai l'habitude de ne pas utiliser as Object ou as variant, sauf si c'est vraiment impossible de faire autrement. Et cela c'est rare.
    @clementmarcotte : Ah d'accord !
    En fait si tu utilise CreateObject c'est justement pour ne pas mettre les références, donc si tu type ta variable tu perds ce gain et tu est effectivement obligé de mettre les références.

    CreateObject => Variable de type Object
    Sinon référence => Variable typé

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

Discussions similaires

  1. [Debutant][Conception] visibilité des objets de type conteneur
    Par thebloodyman dans le forum Général Java
    Réponses: 10
    Dernier message: 04/01/2006, 12h44
  2. Réponses: 3
    Dernier message: 28/10/2005, 01h12
  3. Tableau d'objets de type différents
    Par Hell dans le forum C++
    Réponses: 9
    Dernier message: 11/01/2005, 22h57
  4. [Sérialisation] d'objets de types différents
    Par Amnesiak dans le forum Général Java
    Réponses: 3
    Dernier message: 08/12/2004, 22h28
  5. DB objet sous types heritage
    Par smex dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/06/2004, 21h58

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