Vérification de l'état d'un classeur à l'ouverture

Yohan05

XLDnaute Occasionnel
Bonjour,

Pouvez-vous m'indiquer ce que je peux utiliser pour :

Vérifier si le classeur est ouvert sur le serveur et le fermer avant l'exécution d'une macro si c'est le cas en n'enregistrant pas les modifs.

Option Explicit
Public RunWhen

Sub FermerWbk()
ThisWorkbook.Close SaveChanges:=vbYes
End Sub

Je connais ce que ci-dessus mais je ne vois pas comment le généraliser ou une autre solution?

Merci à vous,

Yohan
 

Yohan05

XLDnaute Occasionnel
Re : Vérification de l'état d'un classeur à l'ouverture

Bonjour,

Je me suis peut être mal exprimé en fait :

J'ai un classeur A qui doit exécuter une macro et interagir avec un classeur B.
Donc si le classeur B est ouvert cela ne fonctionne pas.

Le code que tu as mis je dois le mettre dans le classeur A? mais comment peut -il vérifier le classeur B?

Merci

Yohan
 

Yohan05

XLDnaute Occasionnel
Re : Vérification de l'état d'un classeur à l'ouverture

Voila je te met le code qui sera utilisé à partir du classeur A :
p = Sheets("Commande").Range("g4").Value
t = Sheets("Commande").Range("b4").Value
r = Sheets("Commande").Range("b4")
NomFeuil = Range("H5").Value
l = "H:\Gestion de production\Commande Archivage\" & p & Format(Date, "yyyy-mm-dd") & "_" & ".xlsm"

'mod i,j,k,y,z
y = Sheets("Commande").Range("g5").Value

Sheets("Commande").Range("Z1").Value = DateValue(Sheets("Commande").Range("G5").Value & " " & Sheets("Commande").Range("H5").Value)

e = Sheets("Commande").Range("Z1").Value

Workbooks.Open Filename:="\\Serveur\documents\GESTION DE PRODUCTION\Analyse\Analyse du système.xlsm", UpdateLinks:=0

For n = 1 To 10000
If Sheets("Informations").Range("B" & n) = r Then
Sheets("Informations").Range("E" & n) = e
Cells.Hyperlinks.Add Anchor:=Sheets("Informations").Range("A" & n), Address:=l, TextToDisplay _
:=p & t

End If
Next n
ActiveWorkbook.Save
ActiveWindow.Close

Workbooks.Open Filename:="H:\GESTION DE PRODUCTION\Planning.xlsm", UpdateLinks:=0

ActiveWorkbook.Sheets(NomFeuil).Select

Range("a1").Select
j = 1
For j = 1 To 31

If j = y Then
ActiveCell.Offset(0, 1).Select
j = 32

Else: ActiveCell.Offset(1, 0).Select
End If
Next j

z = 1

For z = 1 To 14
If ActiveCell.Value = "" Then
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
l, TextToDisplay _
:=p & t

z = 15
Else: ActiveCell.Offset(0, 1).Select

End If

Next z
Windows("Planning.xlsm").Activate
ActiveWorkbook.Save
ActiveWindow.Close


ThisWorkbook.Close savechanges:=False
Application.Quit
Else
End If
End Sub


Le classeur B est nommé planning mais il peut être utilisé par 4 personnes en même temps.
Mais quand je travail à partir du classeur A, j'aimerais que le classeur B soit fermé ou bien le code ne fonctionne pas.

Merci à toi;

Yoahn
 

Efgé

XLDnaute Barbatruc
Re : Vérification de l'état d'un classeur à l'ouverture

Bonjour Yohan05, Bonjour Jean-Marcel :)
Si je puis me permetre...
Fermer un classeur sans sauvegarde peut être un peu "Stalinien" si quelqu'un est en train de travailler dessus...
Pour connaitre le statut d'un fichier j'utilise ceci:

VB:
Function IsFileOpen(ByVal Filename As String) As String
'Récupération du statut d'un fichier
Dim filenum As Integer, Errnum As Integer
On Error Resume Next
    filenum = FreeFile()
    Open Filename For Input Lock Read As #filenum
    Close filenum
    Errnum = Err
On Error GoTo 0
Select Case Errnum
    Case 0
        IsFileOpen = "Fermé"
    Case 53
        IsFileOpen = "Absent"
    Case 70
        IsFileOpen = "Ouvert"
End Select
End Function
Que j'appelle comme ça:
VB:
Dim Mon_fichier As String
Mon_Fichier = "H:\GESTION DE PRODUCTION\Planning.xlsm"
Select Case IsFileOpen(Mon_fichier)
    Case "Absent"
        Rep = MsgBox("Le fichier " & vbLf & Tmp(i) & vbLf & " n'a pas été trouvé pour la consolidation." & vbLf _
              & "Le traitement est arrété.", vbNo + vbCritical, "Erreur")
        Exit Sub
    Case "Ouvert"
        Rep = MsgBox("Merci de fermer le fichier " & vbLf & Tmp(i) & vbLf & " avant de lancer le traitement" & vbLf _
              & "Le traitement est arrété.", vbNo + vbCritical, "Erreur")
        Exit Sub
End Select
Si ça peut aider.
Cordialement
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Vérification de l'état d'un classeur à l'ouverture

Re
Jean-Marcel : Je suis d'accord avec toi, dans ta proposition l'utilisateur ne voit rien :).
C'est juste mon interprétation de la demande initiale qui semblai vouloir fermer le classeur pour pouvoir effectuer le traitement.
Je me suis peut être quelque peut gourré :D
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 765
Messages
2 091 876
Membres
105 084
dernier inscrit
lca.pertus