J'ai un petit soucis. J'ai la possiblité de créer un fichier PDF nommé, mais si celui-ci existe déjà et s'il est ouvert, j'ai un message d'erreur.
Voici mes ligne VBA qui fonctionnent parfaitement bien si le fichier est fermé, dans ce cas il est écrasé, ou il est créer s'il n'existe pas.
sFilename = ThisWorkbook.Name
sFilename = "Garde " & Range("01!Y15") & (" ") & Range("01!C85") & (" ") & Range("01!E83") & (".pdf")
Bonjour, J'ai un petit soucis. J'ai la possiblité de créer un fichier PDF nommé, mais si celui-ci existe déjà et s'il est ouvert, j'ai un message d'erreur. V...
re
ben c'est simple
je fouille un peu dans mes vieux VBS (les bon vieux truc a bibi)
et je te fait ça pour vba
ferme toute application Acrobat ouvertes
pour tester ouvrez un pdf avec votre acrobat reader (n'importe quelle version)
et lancez cette sub
VB:
Sub CloseAllAppPDF()
Dim process
Set objWMI = GetObject("winmgmts:root\cimv2")
sQuery = "Select * from Win32_process"
For Each process In objWMI.execquery(sQuery)
If InStr(1, process.Name, "Acrobat") Then process.Terminate
Next
Set objWMI = Nothing
End Sub
et oui ca a du bon les vieux trucs
je viens de tester ça fonctionne toujours
maintenant sur window10 il arrive que certains n'ont pas d'app pdf reader
il se servent de edge ou FF ou chrome
je suppose que je vais bien trouver un truc en listant les fenetre avec les api et l'api sendmessage pour close la fenêtre
LOL
re
ben c'est simple
je fouille un peu dans mes vieux VBS (les bon vieux truc a bibi)
et je te fait ça pour vba
ferme toute application Acrobat ouvertes
pour tester ouvrez un pdf avec votre acrobat reader (n'importe quelle version)
et lancez cette sub
VB:
Sub CloseAllAppPDF()
Dim process
Set objWMI = GetObject("winmgmts:root\cimv2")
sQuery = "Select * from Win32_process"
For Each process In objWMI.execquery(sQuery)
If InStr(1, process.Name, "Acrobat") Then process.Terminate
Next
Set objWMI = Nothing
End Sub
et oui ca a du bon les vieux trucs
je viens de tester ça fonctionne toujours
maintenant sur window10 il arrive que certains n'ont pas d'app pdf reader
il se servent de edge ou FF ou chrome
je suppose que je vais bien trouver un truc en listant les fenetre avec les api et l'api sendmessage pour close la fenêtre
LOL
Bonjour @kiki29
cells ci ferme le pdf avec une partie du texte de la barre de titre
fonctionne pour acrobat et firefox
VB:
Option Explicit
'déclaration VBA7 en 32/64 bits
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal HWND As LongPtr, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare PtrSafe Function GetWindow Lib "user32" (ByVal HWND As LongPtr, ByVal wCmd As Long) As Long
Private Declare PtrSafe Function SendMessageA Lib "user32" (ByVal HWND As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As Integer, ByVal lParam As LongPtr) As LongPtr
Private Const WM_SYSCOMMAND As Long = &H112
Private Const WM_CLOSE As Long = &H10
Private Const GW_HWNDNEXT As Long = 2
Sub test()
'le pdf s'appelle : "actualité MSN beau arts janvier xxxxxxxxxxx.pdf"
'FindAndcloseWindoWByPartTitle "*actu*janvier*.pdf", "Firefox" 'si PDF ouvert avec firefox
'<<<<< attention!!!! si le pdf n'est pas la seul page ouverte dans Firefox c'est tout Firefox qui est fermé !!!!>>>>>
'FindAndcloseWindoWByPartTitle "*actu*janvier*.pdf", "Acrobat" 'si PDF ouvert avec Acrobat reader (DC ou pas) (toutes versions
FindAndcloseWindoWByPartTitle "*actu*janvier*.pdf" 'si PDF ouvert avec Firefox ou Acrobat reader (DC ou pas) (toutes versions
End Sub
Sub FindAndcloseWindoWByPartTitle(Optional partTittle As String, Optional PartApp As String)
Dim sStr As String, HWND As LongPtr
sStr = Space$(300)
HWND = FindWindow(vbNullString, vbNullString)
Do While HWND <> 0
GetWindowText HWND, sStr, 300
If sStr Like "*" & partTittle & "*" & PartApp & "*" Then
SendMessageA HWND, WM_CLOSE, 0, 0
Exit Do
End If
HWND = GetWindow(HWND, 2)
Loop
End Sub