Findwindow ou comment savoir si un fichier est ouvert

Le
berkowil
Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #18829651
Quel est l'objectif que tu poursuis ?
Si tu veux savoir si un fichier excel est déjà ouvert :

Dim Wk as Worksheet
On Error Resume next
Set Wk = Workbooks("NomDuFichierÀTester.xls")
if err.number <>0 then
err.clear
Msgbox "Fichier non ouvert"
else
Msgbox "Fichier ouvert
End if



"berkowil"
Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci
berkowil
Le #18829841
J'ai ouvert 2 fois excel et l'un des fichiers doit etre envoyé par outlook
en fichier joint
Je dois donc m'assurer que ce fichier est bien fermé
Ce fichier contient des macros et je veux qu'il soit totalement independant
du mien qui contient aussi des macros, c'est pour cette raison que j'ouvre 2
fois excell


"MichDenis" news:
Quel est l'objectif que tu poursuis ?
Si tu veux savoir si un fichier excel est déjà ouvert :

Dim Wk as Worksheet
On Error Resume next
Set Wk = Workbooks("NomDuFichierÀTester.xls")
if err.number <>0 then
err.clear
Msgbox "Fichier non ouvert"
else
Msgbox "Fichier ouvert
End if



"berkowil" discussion :

Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As
String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci



MichDenis
Le #18830421
La question : Pourquoi 2 instances te sont-ils obligatoires ?
Qu'est-ce qui justifie que tu te compliques la vie ?

Si à partir d'une macro, tu veux ouvrir un fichier dans un
autre instance d'excel pour des raisons encore obscures ...

Dim Xl As New Excel.Application
Xl.Visible = True
Dim Wk As Workbook
Set Wk = Xl.Workbooks.Open("NomDuclasseur.xls")

L'avantage de cette façon de faire, et que tu peux contrôler
par les variables objets, l'instance d'excel que tu viens d'ouvrir
ainsi que le fichier ou les fichiers ouvert dans cette instance.

Et pour conserver la main mise sur cette instance et fichier, tu peux
déclarer comme Public tes variables dans un module standard...
et leur référence aux objets vont durer le temps que tu voudras !

Ce n'est pas suffisant ?



"berkowil"
J'ai ouvert 2 fois excel et l'un des fichiers doit etre envoyé par outlook
en fichier joint
Je dois donc m'assurer que ce fichier est bien fermé
Ce fichier contient des macros et je veux qu'il soit totalement independant
du mien qui contient aussi des macros, c'est pour cette raison que j'ouvre 2
fois excell


"MichDenis" news:
Quel est l'objectif que tu poursuis ?
Si tu veux savoir si un fichier excel est déjà ouvert :

Dim Wk as Worksheet
On Error Resume next
Set Wk = Workbooks("NomDuFichierÀTester.xls")
if err.number <>0 then
err.clear
Msgbox "Fichier non ouvert"
else
Msgbox "Fichier ouvert
End if



"berkowil" discussion :

Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As
String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci



berkowil
Le #18830351
C'est vrai mais j'aurais besoin de la meme chose avec une apllication Word
qui sera envoyé sur outlook grace a une aplli excel
me manque simplement la fonction qui me permet de mettre a jour la liste des
appli ouvertes car celle ci se met a jour environ 1 fois par mn
peut etre via l'api kernell32 mais la cela devient tres egnimatique pour
moi


"MichDenis" news:
La question : Pourquoi 2 instances te sont-ils obligatoires ?
Qu'est-ce qui justifie que tu te compliques la vie ?

Si à partir d'une macro, tu veux ouvrir un fichier dans un
autre instance d'excel pour des raisons encore obscures ...

Dim Xl As New Excel.Application
Xl.Visible = True
Dim Wk As Workbook
Set Wk = Xl.Workbooks.Open("NomDuclasseur.xls")

L'avantage de cette façon de faire, et que tu peux contrôler
par les variables objets, l'instance d'excel que tu viens d'ouvrir
ainsi que le fichier ou les fichiers ouvert dans cette instance.

Et pour conserver la main mise sur cette instance et fichier, tu peux
déclarer comme Public tes variables dans un module standard...
et leur référence aux objets vont durer le temps que tu voudras !

Ce n'est pas suffisant ?



"berkowil" discussion :

J'ai ouvert 2 fois excel et l'un des fichiers doit etre envoyé par outlook
en fichier joint
Je dois donc m'assurer que ce fichier est bien fermé
Ce fichier contient des macros et je veux qu'il soit totalement
independant
du mien qui contient aussi des macros, c'est pour cette raison que j'ouvre
2
fois excell


"MichDenis" news:
Quel est l'objectif que tu poursuis ?
Si tu veux savoir si un fichier excel est déjà ouvert :

Dim Wk as Worksheet
On Error Resume next
Set Wk = Workbooks("NomDuFichierÀTester.xls")
if err.number <>0 then
err.clear
Msgbox "Fichier non ouvert"
else
Msgbox "Fichier ouvert
End if



"berkowil" discussion :

Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As
String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre
appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre
exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci






MichDenis
Le #18830771
La seule chose à laquelle je pense, c'est
l'utilisation de :

Application.OnTime Now + TimeValue("00:00:05"), "TaSub"

que tu peux faire tourner en boucle. Il soit y avoir un exemple
dans l'aide d'excel sur "OnTime"


"berkowil"
C'est vrai mais j'aurais besoin de la meme chose avec une apllication Word
qui sera envoyé sur outlook grace a une aplli excel
me manque simplement la fonction qui me permet de mettre a jour la liste des
appli ouvertes car celle ci se met a jour environ 1 fois par mn
peut etre via l'api kernell32 mais la cela devient tres egnimatique pour
moi


"MichDenis" news:
La question : Pourquoi 2 instances te sont-ils obligatoires ?
Qu'est-ce qui justifie que tu te compliques la vie ?

Si à partir d'une macro, tu veux ouvrir un fichier dans un
autre instance d'excel pour des raisons encore obscures ...

Dim Xl As New Excel.Application
Xl.Visible = True
Dim Wk As Workbook
Set Wk = Xl.Workbooks.Open("NomDuclasseur.xls")

L'avantage de cette façon de faire, et que tu peux contrôler
par les variables objets, l'instance d'excel que tu viens d'ouvrir
ainsi que le fichier ou les fichiers ouvert dans cette instance.

Et pour conserver la main mise sur cette instance et fichier, tu peux
déclarer comme Public tes variables dans un module standard...
et leur référence aux objets vont durer le temps que tu voudras !

Ce n'est pas suffisant ?



"berkowil" discussion :

J'ai ouvert 2 fois excel et l'un des fichiers doit etre envoyé par outlook
en fichier joint
Je dois donc m'assurer que ce fichier est bien fermé
Ce fichier contient des macros et je veux qu'il soit totalement
independant
du mien qui contient aussi des macros, c'est pour cette raison que j'ouvre
2
fois excell


"MichDenis" news:
Quel est l'objectif que tu poursuis ?
Si tu veux savoir si un fichier excel est déjà ouvert :

Dim Wk as Worksheet
On Error Resume next
Set Wk = Workbooks("NomDuFichierÀTester.xls")
if err.number <>0 then
err.clear
Msgbox "Fichier non ouvert"
else
Msgbox "Fichier ouvert
End if



"berkowil" discussion :

Bonjour Tous
ma question est a la fin de ce bout de code qui permet de savoir si une
application est ouverte peut servir a d'autres

******
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal
lpClassName As String, ByVal lpWindowName As String) As Long

Private Function FB_fichierDejaOuvert(ClassName As String, Titre As
String)
As Boolean
Dim ProcessHandle As Long
Dim ProcessId As Long
Dim Appli As Long
Titre = "Microsoft Excel - " & Titre 'a enlever pour une autre
appli
Appli = 0
Appli = FindWindow(ClassName, Titre)
GetWindowThreadProcessId Appli, ProcessId
If Appli > 0 Then
FB_fichierDejaOuvert = True
Else
FB_fichierDejaOuvert = False
End If
End Function

dans le code
If FB_fichierDejaOuvert(vbNullString, fichier) Then
avec fichier le titre exact de l'application : ex si le ficier toto.xls a
été ouvert alors fichier c'est: Microsoft Excel - toto.xls (le titre
exact
de l'appli)
***************

Mon probleme est de rafraichier la liste des applications ouvertes car le
programme rafraichit cette liste 1 fois par minute

Merci






berkowil
Le #18836761
Merci de ton aide !
berkowil
Publicité
Poster une réponse
Anonyme