XL 2021 Ouvrir une application et vérifier si elle est déjà ouverte

  • Initiateur de la discussion Initiateur de la discussion Jojo973
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jojo973

XLDnaute Occasionnel
Supporter XLD
Bonjour à la communauté.
Voici une macro pour lancer une application PDF.

Code:
Sub bouton_decoupe_pdf_Click()
Dim exonic_pdf As Integer
Dim strNomDossier As String
Dim chemin As String
chemin = CreateObject("WScript.Shell").specialFolders("Desktop")
strNomDossier = chemin & "\Split\"
strNomDossier = Dir(strNomDossier, vbDirectory)

    If strNomDossier = "" Then
        MkDir (chemin & "\Split\")
    End If
If Cells(1, 1).Value <> "" Then
exonic_temp = Cells(1, 1).Value
Shell ("Taskkill /F /PID " + CStr(exonic_temp))
exonic_pdf = Shell("C:\Program Files (x86)\Hexonic PDF Split and Merge\HexonicPDFSplitAndMerge.exe", 1)
Cells(1, 1).Value = exonic_pdf
Else

exonic_pdf = Shell("C:\Program Files (x86)\Hexonic PDF Split and Merge\HexonicPDFSplitAndMerge.exe", 1)
Cells(1, 1).Value = exonic_pdf
End If

End Sub

Cela empêche la macro de planter. C'est fonctionnel mais pas parfait. Par exemple quand l'application est fermée par l'utilisateur (volontaire), la cellule A1 garde l'id du process et je ne sais pas comment l'effacer à ce moment là (est-ce possible?) ou alors juste mettre le focus sur l'application qui est déjà ouverte au lieu de la quitter et de la réouvrir...

Ce n'est pas très propre et je pense que l'on peut améliorer le code.
Si vous avez des idées, merci à vous.
 
Bonjour @Jojo973

Edit Bonjour Bernard

Perso je trouve si j'ai bien compris le code que c'est pas cool du tout de tuer une tache sans le consentement de l'utilisateur ! 😳

Je préfère de loin ma solution qui avertit l'utilisateur voir un exemple dans cette discussion avec les messages que l'utilisateur aura :

==> https://excel-downloads.com/threads...automatique-pdf.20087485/page-2#post-20691854

Après chacun fait comme il veut mais pour ma part sur un fichier qui me fait cela soit je désactive la fonction soit je n’utilise pas le fichier

Bonne lecture
 
Bonjour

regarde cette discussion, c'est pour notepad mais le principe est le même

Cordialement
Bonjour @Jojo973

Edit Bonjour Bernard

Perso je trouve si j'ai bien compris le code que c'est pas cool du tout de tuer une tache sans le consentement de l'utilisateur ! 😳

Je préfère de loin ma solution qui avertit l'utilisateur voir un exemple dans cette discussion avec les messages que l'utilisateur aura :

==> https://excel-downloads.com/threads...automatique-pdf.20087485/page-2#post-20691854

Après chacun fait comme il veut mais pour ma part sur un fichier qui me fait cela soit je désactive la fonction soit je n’utilise pas le fichier

Bonne lecture
Merci à vous deux.
Déjà mon code va être plus propre et l'ux/ui améliorée.

Bein à vous
 
Voici le code complet pour le partage :

VB:
Public Exonic_Id As Integer
Sub Decoupe_OM_Click()
Dim exonic_pdf As Integer
Dim strNomDossier As String
Dim chemin As String
'----------Création/vérification dossier Split--------------------

chemin = CreateObject("WScript.Shell").specialFolders("Desktop")
strNomDossier = chemin & "\Split\"
strNomDossier = Dir(strNomDossier, vbDirectory)

    If strNomDossier = "" Then
        MkDir (chemin & "\Split\")
    End If

'----------Ouverture et contrôle instance Exonic_Pdf----------------------
If IsProcessRunning("HexonicPDFSplitAndMerge.exe") Then
        AppActivate Exonic_Id
    Else
        Exonic_Id = Shell("C:\Program Files (x86)\Hexonic PDF Split and Merge\HexonicPDFSplitAndMerge.exe", vbNormalFocus)
    End If
End Sub

'====Contrôle instanciation================
Function IsProcessRunning(process As String) As Boolean

    Dim objList As Object
    
    Set objList = GetObject("winmgmts:") _
        .ExecQuery("select * from win32_process where name='" & process & "'")
    
    IsProcessRunning = objList.Count > 0
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
124
Réponses
2
Affichages
466
Réponses
3
Affichages
548
Réponses
5
Affichages
454
Réponses
9
Affichages
871
Retour