Contrôle d'ouverture d'un Classeur

R

Rachid

Guest
Bonsoir à tous
Je vous soumets un problème que je n’arrive pas à résoudre et pour lequel je souhaite vivement votre aide. Il s’agit d’une procédure de contrôle d’ouverture d’un classeur Excel.

Merci d’avance à tous ceux ou à toutes celles qui pourront m’aider .
J'utilise Excel XP (2002) et je suis un utilisateur d'Excel à un niveau moyen.

Rachid .


“Param” est une procédure appelée à partir d’un menu déroulant créé à l’ouverture d’Excel .

Cette procédure et cette fonction ont été programmées pour contrôler l’ouverture d’un classeur nommé « Paramètres ». Normalement si le classeur « Paramètres » est déjà ouvert ;la procédure « Param » doit empêcher qu’ Excel l’ouvre à nouveau avec un message Box d’information en plus.

Quand je lance à partir du Menu la procédure « Param » ;Excel ignore la procédure Function et exécute les instructions situées après la fonction c'est-à-dire en ouvrant à chaque appel du menu, le classeur « Paramètres » sans pouvoir contrôler si ce classeur est déjà ouvert.

Le code source de mon essai est détaillé ci-dessous.

Sub Param()
Application.ScreenUpdating = False

Dim Classeur As Workbook
Dim Message As String

On Error Resume Next
If Err.Number <> 0 Then Err.Clear


If Not FileIsOpen(Classeur) Then
Workbooks.Open Filename:="C:\Mes Documents Excel\Paramètres.xls"

Else

ChDir "C:\ Mes Documents Excel\Paramètres.xls"
Windows("Paramètres").Activate
MsgBox "Le Classeur (Paramètres ) est déjà Ouvert !!! ", vbInformation


Exit Sub
End If

End Sub


Private Function FileIsOpen(ByVal Classeur As String) As Boolean
' Doit retourner True si le Classeur (Paramètres) est ouvert

Dim y As Workbook
On Error Resume Next

Set y = Workbooks("Paramètres")
If Err = 0 Then FileIsOpen = True
Else
FileIsOpen = False
End Function
 
R

Rachid

Guest
Bonsoir

Désolé pour le xls en plus mais ça ne donne rien.

Je pense que j'ai trouvé la solution à mon problème que je soumets ci-dessous.En fait il existe 2 solutions : une par l'intermédiaire d'une fonction et une autre par du code VBA tout simplement.

Ces 2 Solutions proviennent du site http://dj.joss.free.fr/
Elles ont été adaptées à ma procédure.

Sub Param()
Application.ScreenUpdating = False

Dim Classeur As Workbook

On Error Resume Next
If Err.Number <> 0 Then Err.Clear

If IsOpen("Paramètres.xls") Then
MsgBox "Ce Classeur est déjà ouvert !!!", vbInformation
ChDir "C:\Mes Documents Excel\"
Windows("Paramètres.xls").Activate

Else


Workbooks.Open "c:\Mes Documents Excel\Paramètres.xls"

End If
End Sub



Private Function IsOpen(Classeur$) As Boolean
On Error Resume Next
IsOpen = Not Workbooks(Classeur) Is Nothing
Err.Clear

End Function



2ème Solution

Sub Param()
Dim w as Workbook
On Error Resume Next

Set w = Workbooks("Paramètres.xls")
On Error GoTo 0

If w Is Nothing Then Workbooks.Open "C:\Mes Documents Excel\Paramètres.xls"_

Else

Set w = Nothing

End If
End Sub

Ces 2 solutions ont été testées à plusieurs reprises.Elles marchent très bien.

A Bientôt et Merci
Rachid
 

Discussions similaires

Statistiques des forums

Discussions
313 137
Messages
2 095 626
Membres
106 308
dernier inscrit
F.DIAS