IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fermeture d'un fichier excel à distance


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut Fermeture d'un fichier excel à distance
    Bonjour à tous,

    J'avoue que là, c'est au-dessus de mes capacités.

    J'ai un fichier sur le réseau de ma boite (toto.xlsm) qui peut être ouvert pour modification par tous ceux qui ont le mot de passe. Sauf que certains oublie de le fermer et par conséquence le bloque.
    J'aimerais pouvoir le fermer en exécutant une macro sur un autre fichier par exemple.

    Merci de votre aide

    Ben

  2. #2
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    De ton poste, tu ne peux pas fermer un fichier ouvert sur un autre poste par un autre utilisateur.
    Par contre, tu peux mettre un timer dans le fichier :

    Dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public HeureArrêt
    Sub ProchainArret()
     HeureArrêt = Now + TimeValue("00:02:00")
     Application.OnTime HeureArrêt, "Fin"
     Sheets(1).[A1]=HeureArrêt
    End Sub
     
    Sub Fin()
      On Error Resume Next
      Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False    'annule événnement
      ThisWorkbook.Close True
    End Sub
    Dans ThisWorkBook:
    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
     
    Private Sub Workbook_Open()
     ProchainArret
    End Sub
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     On Error Resume Next
     Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False
     ProchainArret
    End Sub
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
      ThisWorkbook.Save
      'ThisWorkbook.Saved = True
      On Error Resume Next
      Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False  ' annule événnement
    End Sub
    Grosso modo :
    ca enregistre dans A1 de la feuille 1, l'heure à laquelle est ouvert le fichier, heure à laquelle on ajoute ici 1 minute
    (tu peux bien sûr augmenter le temps d'attente et/ou l'onglet où tu enregistres cette heure)
    A chaque changement de l'utilisateur sur le fichier, cette heure limite est incrémentée.
    Quand cette heure est atteinte, le fichier se sauvegarde et se ferme automatiquement.


    Merci à boisgontierjacques pour son code
    discussion : https://www.developpez.net/forums/d1...d-temps-donne/

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Ok merci, même si j'execute une macro se trouvant dans mon fichier en question ?

    Merci

  4. #4
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Quand tu exécutes une macro, tu l'exécutes sur TON poste et non sur le poste d'un autre utilisateur.
    Alors à moins de programmer dans le fichier cible, une fermeture automatique au cours de x minutes d'inutilisation, non, tu ne peux pas, à partir de ton poste, fermer un fichier Excel sur un autre poste.

  5. #5
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Alors, je vais nuancer ma réponse.
    Tu ne peux pas fermer le fichier à distance, mais tu peux déconnecter les utilisateurs qui ont oubliés de fermer le fichier.
    Le fichier reste ouvert, mais ils ne pourront plus le sauvegarder, à moins de faire un Fichier/Enregistrer sous
    => Ils vont perdre leurs modifications non sauvegardées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkbook.RemoveUser (1)
    A faire autant de fois qu'il y a d'utilisateurs connectés
    Tu ne pourras pas d'auto-déconnecté

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Ok je comprends.

    Merci beaucoup pour votre aide

    à bientôt

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par chimonito Voir le message
    J'ai un fichier sur le réseau de ma boite (toto.xlsm) qui peut être ouvert pour modification par tous ceux qui ont le mot de passe. Sauf que certains oublie de le fermer et par conséquence le bloque.
    Déjà, c'est une très mauvaise idée d'utiliser un fichier Excel en multi-utilisateurs.
    Excel est très maladroit dans cet exercice et ne dispose pas des outils pour le faire proprement.
    D'autant plus que, la plupart du temps, ce mode de fonctionnement sert à remplir des tableaux de données.

    Donc autant utiliser un outil qui est fait pour ça : un SGBD (Access, Open Base, Libre Base, etc.).

    J'aimerais pouvoir le fermer en exécutant une macro sur un autre fichier par exemple.
    Ce que tu souhaites faire est TREEEEES dangereux : fermer un fichier à l'arrache sans savoir si l'utilisateur l'a sauvegardé ou même s'il souhaite le sauvegarder, c'est l'idéal pour causer (au mieux) des corruptions de données ou (au pire) des tournées de bourepif.

    Citation Envoyé par Bob78280 Voir le message
    Tu ne peux pas fermer le fichier à distance, mais tu peux déconnecter les utilisateurs qui ont oubliés de fermer le fichier.
    Le fichier reste ouvert, mais ils ne pourront plus le sauvegarder, à moins de faire un Fichier/Enregistrer sous
    => Ils vont perdre leurs modifications non sauvegardées
    Typiquement le genre de procédure qui déclenche la tournée de bourepif dont je parlais.

    La méthode qui me semble la moins risquée est de vérifier avec la propriété UserStatus quel est l'utilisateur qui est en train d'utiliser le fichier et de lui passer un coup de fil (ou de lui filer un coup de pompe, chacun des goûts) pour lui demander de fermer le fichier.
    https://msdn.microsoft.com/fr-fr/vba...property-excel

Discussions similaires

  1. VBS / fermeture d'un fichier excel
    Par Arnaud91 dans le forum VBScript
    Réponses: 0
    Dernier message: 20/10/2009, 15h39
  2. Réponses: 2
    Dernier message: 14/08/2008, 21h01
  3. fermeture d'un fichier excel
    Par maverick91 dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/07/2008, 11h44
  4. Réponses: 8
    Dernier message: 20/09/2007, 11h31
  5. execution de code a la fermeture d un fichier excell
    Par levac dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/07/2007, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo