fermer un programme en vba ( avant autre choix)

bruno66

XLDnaute Occasionnel
bonjour, j'ai un code en vba( double clic qui me permet d'ouvrir une feuille dans un classeur sur une ligne spécifique... dans la seconde partie du code, en double cliquant sur une cellule, je peut ouvrir une visionneuse de fichier dwg...
je cherche un morceau de code pour la deuxième partie me permettant de fermer ( si la visionneuse est ouverte, la fermer pour la rouvrir avec le nouveau fichier( afin d’éviter 50 fichiers ouvert par ailleurs)




Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect([Q13:Q3000], Target) Is Nothing Then
Sheets("Stock").Select
ActiveSheet.Range("A3:X3000").AutoFilter Field:=6, Criteria1:=Target
Exit Sub
End If
If Not Intersect(Target, [L13:L3000]) Is Nothing Then
'quand double clic dans colonne entre L13 et L3000
On Error Resume Next
'a ce niveau, je cherche un code pour fermer le fichier DWG si ouvert quand je double clic dans autre cellule( c'est une visionneuse de fichier DWG sans enregistrement ouvrir /fermer

'Workbooks.Open ActiveWorkbook.Path & "/DWG/" & Target.Value & ".dxf"
Shell ("C:\Program Files\IGC\Free DWG Viewer\BravaFreeDWG.exe " & ActiveWorkbook.Path & "\DWG\" & Target.Value & ".dwg"), vbMaximizedFocus
If Err.Number <> 0 Then
Call MsgBox("Le fichier " & Chr(34) & " " & Target.Value & ".dwg " & Chr(34) & " n'éxiste pas dans le répertoire Profil DXF.", vbCritical, "Manque fichier profil")
End If
End If
End Sub

si quelqu'un a une idée pour me faire avancer merci
 

gilbert_RGI

XLDnaute Barbatruc
Re : fermer un programme en vba ( avant autre choix)

Bonjour

ça fonctionne pour Word ça devrait fonctionner pour d'autres programmes

Code:
Public Declare Function GetWindowText _
               Lib "user32" _
               Alias "GetWindowTextA" ( _
               ByVal hWnd As Long, _
               ByVal lpString As String, _
               ByVal cch As Long) As Long
 
Public Declare Function EnumWindows _
               Lib "user32" ( _
               ByVal lpEnumFunc As Long, _
               ByVal lParam As Long) As Long
 
Dim Ouvert As String
Dim NomProg As String
 
'proc de test, à adapter :
Sub Test()
 
    Dim lResult As Long
 
    NomProg = "Word" 'cherche si Word est ouvert
 
    lResult = EnumWindows(AddressOf ProgrammeOuvert, 0&)
 
    MsgBox Ouvert
 
End Sub
 
'cherche dans le titre des fenêtres le nom du programme
Public Function ProgrammeOuvert(ByVal hWnd As Long, _
                                ByVal lgParam As Long) As Long
 
    Dim Buffer As String
    Dim Result As Long
 
    Buffer = Space(255)
 
    Result = GetWindowText(hWnd, Buffer, 255)
 
    If Left(Buffer, 1) <> Chr(0) Then
 
        'non sensible à la casse (UCase)
        If InStr(UCase(Trim(Buffer)), UCase(NomProg)) <> 0 Then
 
            Ouvert = NomProg & " est ouvert !"
 
            Exit Function
 
        Else
 
            Ouvert = NomProg & " est fermé !"
 
        End If
 
    End If
 
    ProgrammeOuvert = 1
 
End Function
 

Discussions similaires