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 exécuter une commande en administrateur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut VBA exécuter une commande en administrateur
    Bonjour,

    Je cherche à exécuter cette commande en administrateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Shell ("C:\WINDOWS\SysWOW64\RegSvr32.exe " & fileName)
    J'ai bien trouvé des exemples avec ShellExecute mais j'avoue que pour moi c'est un peu du charabia.

    Merci

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #If VBA7 Then
        Declare PtrSafe Function LogonUser Lib "advapi32" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
        Declare PtrSafe Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
        Declare PtrSafe Function RevertToSelf Lib "advapi32.dll" () As Long
    #Else
        Public Declare Function LogonUser Lib "advapi32" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
        Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
        Declare Function RevertToSelf Lib "advapi32.dll" () As Long
    #End If
    Enum MConst
        LOGON32_LOGON_INTERACTIVE = 2
        LOGON32_PROVIDER_DEFAULT = 0
    End Enum
    Public lngTokenHandle, lngLogonType, lngLogonProvider As Long
    Public blnResult As Boolean
     
     
    Sub TEST()
     If AdminLogOn("Username", "Domain", "Password") Then
        Shell "C:\Windows\System32\calc.exe"
        Shell "C:\Windows\system32\notepad.exe"
     Logoff
     End If
    End Sub
     
     
    Public Function AdminLogOn(Username, Domain, Password) As Boolean
    blnResult = RevertToSelf()
    If LogonUser( _
    Username, _
    Domain, _
    Password, _
              LOGON32_LOGON_INTERACTIVE, _
             LOGON32_PROVIDER_DEFAULT, _
                lngTokenHandle) = 0 Then
        MsgBox "Impossible d'ouvrir la session : " & Username & ". "
        GoTo Fin
    End If
     
     
     
     
    If blnResult = False Then
        MsgBox "Impossible d'ouvrir LogonUser"
       GoTo Fin
    End If
     
     
    blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
    AdminLogOn = True: Exit Function
     
     
    Fin:
    AdminLogOn = False
    End Function
    Public Sub Logoff()
    Dim blnResult As Boolean
    'MsgBox "Session fermée"
    blnResult = RevertToSelf()
    End Sub

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    Hello,
    le souci c'est qu'il va falloir mettre le mot de passe d'un compte administrateur dans le code ce qui n'est pas très "secure".
    Pourquoi veux-tu lancer une commande regsvr32 dans du code VBA. En général ceci sert à installer un composant activex. Quel genre de composant veux-tu installer ?
    Ami calmant, J.P

  4. #4
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #If VBA7 Then
        Declare PtrSafe Function LogonUser Lib "advapi32" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
        Declare PtrSafe Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
        Declare PtrSafe Function RevertToSelf Lib "advapi32.dll" () As Long
    #Else
        Public Declare Function LogonUser Lib "advapi32" Alias "LogonUserA" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
        Declare Function ImpersonateLoggedOnUser Lib "advapi32.dll" (ByVal hToken As Long) As Long
        Declare Function RevertToSelf Lib "advapi32.dll" () As Long
    #End If
    Enum MConst
        LOGON32_LOGON_INTERACTIVE = 2
        LOGON32_PROVIDER_DEFAULT = 0
    End Enum
    Public lngTokenHandle, lngLogonType, lngLogonProvider As Long
    Public blnResult As Boolean
     
     
    Sub TEST()
     If AdminLogOn("Username", "Domain", "Password") Then
        Shell "C:\Windows\System32\calc.exe"
        Shell "C:\Windows\system32\notepad.exe"
     Logoff
     End If
    End Sub
     
     
    Public Function AdminLogOn(Username, Domain, Password) As Boolean
    blnResult = RevertToSelf()
    If LogonUser( _
    Username, _
    Domain, _
    Password, _
              LOGON32_LOGON_INTERACTIVE, _
             LOGON32_PROVIDER_DEFAULT, _
                lngTokenHandle) = 0 Then
        MsgBox "Impossible d'ouvrir la session : " & Username & ". "
        GoTo Fin
    End If
     
     
     
     
    If blnResult = False Then
        MsgBox "Impossible d'ouvrir LogonUser"
       GoTo Fin
    End If
     
     
    blnResult = ImpersonateLoggedOnUser(lngTokenHandle)
    AdminLogOn = True: Exit Function
     
     
    Fin:
    AdminLogOn = False
    End Function
    Public Sub Logoff()
    Dim blnResult As Boolean
    'MsgBox "Session fermée"
    blnResult = RevertToSelf()
    End Sub
    Bonjour Thumb down, Mille merci pour votre réponse. Est-ce vraiment le code minimal pour exécuter une commande en admin ??? Je comprends mieux pourquoi je n'ai pas trop trouvé d'aide à ce sujet. Effectivement devoir mettre des mdp je ne pourrais pas car je ne serai pas le seul à utiliser ce classeur.

    Bonjour jurassic pork, ben en fait je reviens sur l'aide que tu m'as donnée au sujet de mon problème avec DSO. Je me suis réveillé un matin en me disant que je voulais persister pour résoudre mon problème. Tu m'as mis la puce à l'oreille en me demandant mes versions d'office et il se trouve que tu avais touché dans le mille. Ce que j'ai découvert et que je ne savais pas, c'est que mes DLL doivent êtres enregistrées pour fonctionner. C'est pour ça qu'en les référençant simplement, la déclaration de mon objet DSO ne plantait pas mais en revanche il est impossible de l'initialiser correctement. Quand j'enregistre la bonne DLL, version office 32 ou 64 , ça fonctionne parfaitement. Le site où j'ai trouvé la DLL pour la première fois contenait un installateur (qui doit être utilisé en mode admin) que j'ai utilisé et c'est pour ça que ça fonctionnait au début. J'ai regardé le code de cet installateur et avec un peu de recherches j'en ai conclu tout ça et voila pourquoi j'en arrive à poster ce sujet. Je dois exécuter une commande "RegSvr32.exe" en mode admin avec la bonne DLL suivant la version d'office.

  5. #5
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    C'est vrai que le plus simple serait d'écrire un ficher bât et de l'exécuter en tant qu'administrateur !

    Quand tu auras créer le fichier bât tu feras un click droit exécuter en temps qu'dmin

  6. #6
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    C'est vrai que le plus simple serait d'écrire un ficher bât et de l'exécuter en tant qu'administrateur !
    Et je n'y avais même pas penser après tout ça... Merci beaucoup ! Je vais regarder comment faire ça. Si je ne trouve rien je reviendrai ici

    Excellente journée

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Notes également que tu as toute latitude pour exécuter Excel en tant qu'administrateur !


    Nom : Sans titre.png
Affichages : 184
Taille : 392,2 Ko

  8. #8
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Notes également que tu as toute latitude pour exécuter Excel en tant qu'administrateur !
    Et si j'utilise excel en administrateur je n'ai pas besoin d'exécuter mes commandes en administrateur ? Je peux créer un classeur qui va se lancer automatiquement en administrateur sur d'autres appareils ?

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    J'avais modifier mon message!

    depuis les Version Nt il faut préciser en tan qu'administrateur même si tu es admin!

  10. #10
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    J'avais modifier mon message!

    depuis les Version Nt il faut préciser en tan qu'administrateur même si tu es admin!
    Ah oui j'avais pas vu. Donc pour des raisons évidentes de sécurité j'imagine qu'il est impossible d'exécuter ce fichier automatiquement ? (Je pose quand même la question pour être sur)

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Citation Envoyé par poseidonsr Voir le message
    Ah oui j'avais pas vu. Donc pour des raisons évidentes de sécurité j'imagine qu'il est impossible d'exécuter ce fichier automatiquement ? (Je pose quand même la question pour être sur)
    tu as tous compris!

    mais en revanche on fait pas ça tous les jours!

  12. #12
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2015
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2015
    Messages : 49
    Par défaut
    ok ben écoute je te remercie mille fois pour le temps que tu as consacré à me répondre et te souhaite une excellente fin de journée.

    A une prochaine peut-être.

Discussions similaires

  1. Exécuter une commande en tant qu'administrateur
    Par yopidou dans le forum Langage
    Réponses: 1
    Dernier message: 17/08/2015, 20h27
  2. [VBA]Exécuter une commande Shell
    Par antoine46 dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/04/2008, 08h07
  3. exécuter une commande de logiciel
    Par MrsFrizz dans le forum C
    Réponses: 4
    Dernier message: 17/01/2006, 10h48
  4. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  5. Exécuter une commande linux.
    Par casafa dans le forum Linux
    Réponses: 4
    Dernier message: 20/07/2005, 23h13

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