test "un doc est il ouvert?"

M

maxime

Guest
chers généreux membres du forum,

je sollicite votre aide precieuse sur un probleme assez simple:

je voudrais que ma macro pendant son exécution ouvre un autre fichier excel.
le probleme est que celui ci peut parfois deja etre ouvert et donc la macro se bloque.
mon idee est de faire que la macro verifie si le fichier est ouvert ou pas.
grosso modo:
if le fichier est ouvert then rien du tout else l'ouvrir end if
je ne sais pas comment lui dire de verifier si le fichier est bien ouvert.
la commande "isopen" ne s'applique pas aux fichiers mais aux "projets".
si quelqu'un a la solution, muchos gracias de bien vouloir m'aider.
Merci
Maxime
 
M

michel

Guest
Bonsoir Maxime

Je te proposerais deux solutions :


Utiliser le message d'erreur pour activer ce fichier déjà ouvert

Sub LaMacro()
On Error GoTo fin

...............ta macro d'ouverture de fichier..................

fin:
If Err = 1004 Then
MsgBox " ce fichier est déja ouvert . "
Workbooks("MonFichier").Activate
End If
End Sub


Ou systématiqment tester les noms de fichiers ouverts et les comparer au nom du nouveau fichier

Sub LaMacro()
Dim Wkb As Workbook
...........
For Each Wkb In Workbooks
..........
If Workbooks("MonFichier").name =Wkb.Name Then
MsgBox " ce fichier est déja ouvert . "
Workbooks("MonFichier").activave
Exit Sub
............
Next Wkb
...........
Workbooks("MonFichier").open
...........

End Sub



Tout cela est bien sur à adapter pour ton projet

Bonne soirée
Michel
lapin4.gif
 
S

STéphane

Guest
bonjour
une autre méthode

function FileLocked(strFilename As String) As Boolean
On Error Resume next
' if the file is already opened by another process,
' and the specified type of access is not allowed,
' the Open operation fails and an error occurs.
Open strFilename for Binary Access Read Lock Read As #1
Close #1
' if an error occurs, the document is currently open.
if Err.Number <> 0 then
' Display the error number and description.
msgbox "Error #" & Str(Err.Number) & " - " & Err.Description
FileLocked = true
Err.Clear
end if
end function


tu trouveras des exemples dans les anciens messages
et notamment là
http://xlbysteph.free.fr/ (tests d'existence)
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry