Bonjour,
Je sais détecter si un fichier est déjà ouvert si c'est dans la même instance d'Excel, mais comment le faire si c'est dans une instance différente?
Merci
Bonjour,
Je sais détecter si un fichier est déjà ouvert si c'est dans la même instance d'Excel, mais comment le faire si c'est dans une instance différente?
Merci
Salut, voir http://excel.developpez.com/faq/?pag...ClasseurOuvert et adapter
Bonjour.
Tu as une réponse d'AlainTech ici.
Je peux te proposer aussi une fonction qui utilise la bibli Windows host script object modelLa fonction renvoie -1 si le fichier n'existe pas, 0 s'il n'est pas ouvert, 1 s'il est ouvert.
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 Function fctIsOpen(ByVal sPath As String) As Integer Dim fso As IWshRuntimeLibrary.FileSystemObject Dim fle As IWshRuntimeLibrary.File Set fso = New IWshRuntimeLibrary.FileSystemObject On Error Resume Next Set fle = fso.GetFile(sPath) If Err.Number <> 0 Then fctIsOpen = -1 Exit Function Else fle.Move sPath fctIsOpen = IIf(Err.Number <> 0, 1, 0) End If On Error GoTo 0 Set fso = Nothing Set fle = Nothing End Function
Sinon on doit pouvoir faire avec une ou deux API.
Une fois que tu sais s'il est ouvert, si tu veux l'instancier, tu peux utiliser GetObject.
En espérant que cela t'aide,
PGZ
réessaie, lien corrigé
Bonjour,
ou tout simplement en utilisant la fonction FindWindow de la librairie User32 de l'Api de Windows.
Car, si l'on cherche un classeur, on en connait la classe et le nom...
Si le classeur est ouvert, la fonction retourne son hwnd. Dans le cas contraire, elle retourne un Null
EDIT :
Illustrons donc notre assertion par un exemple (où le classeur se nomme Class1.xls)
XLMAIN est la classe Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Form_Load() If FindWindow("XLMAIN", "Microsoft Excel - Class1.xls") > 0 Then MsgBox "classeur déjà ouvert" End Sub
Microsoft Excel - Class1.xls est le titre de la fenêtre à rechercher.
Et c'est tout.
Bonsoir
Il faut noter que si plusieurs fenêtres du classeur sont ouvertes, ou que l'on est en groupe de travail, ou que l'on est en lecture seule, le code de ucfoutu devra être adapté, car les noms des fenêtres sont modifiés dans ces cas de figure, et la recherche ne renverra pas le résultat souhaité
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
ok merci
titre de la fenêtre? il peut y avoir des titres personnalisés suivant les postes
on ne peut pas avoir le nom du fichier tout simplement?
Je vois après coup que c'est écrit plus haut :
Comment écrire le code correspondant?Utilisation des fonctions EnumWindows et GetWindowText de la librairie User32 de l'Api de Windows. Pour chaque élément : utilisation de la fonction Like de VBA pour comparer te résultat de GetWindowText avec le nom ou une partie du nom (celle restant fixe) du classeur recherché
Merci
Partager