XL 2016 Fermeture automatique si ouverture

guiyom

XLDnaute Junior
Bonjour,

Sur mon lieu de travail nous travaillons sur un tableau don l’emplacement est sur le réseau.

Chacun d’entre nous travail sur une session Windows qui se bloque automatiquement après X minutes d’inactivité auquel un mot de passe perso doit être saisie.

Le problème que nous rencontrons étant que si une personne X saisie des informations et oublie de fermer le tableau (donc sans sauvegarder) sur sa session, une autre personne Y n’aura accès au tableau qu’en lecture seul et sans les informations mis à jour par X.

Pour résumer est-il possible de sauvegarder et fermer automatiquement un tableau ouvert si celui-ci est à nouveau ouvert par un autre utilisateur ?

Le tableau en question est appelé par une macro via un autre tableau :

Sub appel_du_tableau ()
Workbooks.Open Filename:="\\adresse_du_fichier_sur_reseau\tableau.xlsm"
End Sub

Cordialement
 

eriiic

XLDnaute Barbatruc
Bonjour,

Non, tu ne peux pas le fermer en l'ouvrant par qq'un d'autre.
Par contre, si le mot de passe n'est pas saisis en 30s par exemple, tu peux embrayer sur une fermeture.
Perso je m'abstiendrai d'enregistrer automatiquement, ça doit rester une action volontaire. Ils prendront vite l'habitude d'enregistrer va.
Si qq'un a balancer un truc sur le clavier tu vas enregistrer n'importe quoi, avec peut-être des données importantes écrasées.

Tu peux voir aussi la solution d'un classeur partagé (ça a des limites)
Plusieurs peuvent travailler dessus. Par contre il faut gérer les collisions si 2 travaillent sur la même plage.
eric
 

guiyom

XLDnaute Junior
Merci pour cette réponse Eriiiic.

Effectivement fermer automatiquement un classeur sur la session d'un autre semble impossible et pose également d’éventuel problèmes d'erreurs de saisies ou de corruption de fichier.

Je me suis donc résigné à me contenter de vérifier si le fichier est ouvert :
  • Si oui une message box s'affiche et n'ouvre pas le tableau
  • Si non le tableau s'ouvre

Voici le code utilisé si des personnes intéressé

VB:
Sub nom_de_macro()

    
    If IsFileOpen("\\chemin_réseau_du_fichier\tableau.xlsm") Then
        
        MsgBox "Le fichier est ouvert par un autre utilisateur, ouverture impossible !"
      
    Else
         Workbooks.Open filename:="\\chemin_réseau_du_fichier\tableau.xlsm"
    End If

End Sub


Function IsFileOpen(filename As String)
    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 = False

    
        Case 70
            IsFileOpen = True

      
        Case Else
            Error errnum
    End Select
 

Discussions similaires

Réponses
8
Affichages
527

Statistiques des forums

Discussions
312 347
Messages
2 087 502
Membres
103 563
dernier inscrit
samyezzehar