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 :

Savoir si quelqu'un veut ouvrir le fichier que j'utilise.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut Savoir si quelqu'un veut ouvrir le fichier que j'utilise.
    Bonjour,

    Je ne sais pas du tout si la chose est possible et réalisable.
    Avec quelques uns de mes collègues nous utilisons un même fichier plutôt souvent.

    Afin d'optimiser le temps d'utilisation de chacun et ne pas avoir à appeler son collègue pour lui demander de quitter le fchier excel dès que l'on aperçoi le message "Fichier en cours d'utilisation".

    J'aimerai faire une macro qui envoi un message dès que quelqu'un essaye d'ouvrir le fichier Excel.
    Ex: "X souhaite ouvrir le fichier excel, voulez vous enregistrer et quitter ?"
    Il peut répondre par oui ou non et s'il ne répond pas sous 1 minutes le fichier s’enregistre et quitte.

    Pensez vous que c'est possible ?

    Merci à vous

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    quelqu'un a une idée ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Je ne pense pas qu'il soit possible d'actionner une macro sur un autre poste. et que le fichier une fois ouvert détecte qu'une autre personne cherche à l'ouvrir

    Mais tu es typiquement dans le cas limite du fichier excel et ca peut etre le bon moment pour basculer sur une base de donnée.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Par contre il est possible d'utiliser une macro qui permettrait la fermeture automatique du fichier après un certain délai d'inutilisation.

    dans le module Thisworkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private sub Workbook_Open() Application.OnTime Now + TimeValue("00:02:00"), "Sortie" (ici 2mn, mais vous mettez la durée que vous souhaitez)
    End sub
    dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sub sortie() ThisWorkbook.Close
    End sub

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par COCONUT2 Voir le message
    Je ne pense pas qu'il soit possible d'actionner une macro sur un autre poste. et que le fichier une fois ouvert détecte qu'une autre personne cherche à l'ouvrir

    Mais tu es typiquement dans le cas limite du fichier excel et ca peut etre le bon moment pour basculer sur une base de donnée.

    Oui c'est vrai seulement le fichier excel est un planning de plusieurs équipes gérés par plusieurs conducteurs.




    Je ne sais pas comment faire. c'est dommage.

    Est-il possible de par exemple:

    faire exécuter une macro toute les minutes qui lit le contenu d'un fichier X.txt

    Que lorsque que quelqu'un ouvre le fichier en lecture seul active une macro(actif uniquement en lecture seule) qui écrit quelque chose dans X.txt

    Comme sa moins d'une minutes après si la macro du ficher en écriture lit dans X.txt quelque chose par ex: Y).
    on affiche un message, "Y souhaite utilisé le fichier voulez vous enregistrer et quitter ? avec oui et non, et oui par défaut avec 1min sans réponse.

    La grande question de ma théori peut-ton faire fonctionner une macro dans un fichier excel en lecture seule ?

    Merci à vous pour vos réponses en tout cas

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Voici peut-être une solution que j'avais trouvé sur le net. Je ne l'ai pas testée, donc je ne sais pas ce qu'elle vaut.
    Je te la transmets telle quelle:

    1 - Lors de l'ouverture du fichier tu récupères et tu stockes le nom de l'user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
     
    Private Function UserName()
      Dim S As String, n As Long, Res As Long
      S = String(200, 0): n = 199: Res = GetUserName(S, n)
      UserName = UCase(Left(S, n - 1))
      Range("A1").Value = UserName 'ensuite tu le range ou tu veux... la A1
    End Function
    2 - Ta macro reconnaît que ton fichier est ouvert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function IsFileOpen(ByVal strFic As String) As Boolean
        'Fonction pour vérifier si le fichier est occupé ou non!
        Dim fic As Integer
        On Error Resume Next
        fic = FreeFile()
        Open strFic For Input Access Read Lock Read Write As fic
        If Err.Number = 0 Then
        IsFileOpen = False
        Close fic
        Else
        IsFileOpen = True
        End If
    End Function
    3 - Lance une commande dos net send pour informer l'user qu'il doit fermer (voir avec les administrateur réseau si cela est autorisé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shell "Command.com / c net send NomDuUser MonMessage
    4 - pour net send tu déclares le nom du user comme un string puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim UserN As String
    Dim MonMsg As String
     
    MonMsg = "As-tu terminé avec ce fichier...?"
    UserN = Range("A1").Value 'La cellule où tu as stocké le nom de l'user
     
    Shell "Command.Com / c Net Send " & UserN & " " & MonMsg
    Ne pas oublier les espaces à la fin de "Net Send" et après UserN sinon ça ne marche pas.
    Voilà, c'est une approche du problème, mais je le repète, je ne l'ai pas testé.

    A+
    René

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    merci beaucoup c'est une bonne idée.

    Par contre es ce que la commande net send fonctionne avec seven ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Je ne sais pas si cela fonctionne avec seven.

    il y a bien NetSend-V&7, mai il faut au préalable installer le client sur les machines (installation facile et autonome)


    http://alfamick.free.fr/includes/Net...ista_Seven.htm

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    je ne sais pas si commande net send peut fonctionner juste en installant ce logiciel avec interface graphique.

    Je vais voir sa.

  10. #10
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Pourquoi ne pas mettre ton fichier en partage sur le réseau ?

    - Outils
    - Partager le classeur
    puis mettre une croix dans partage multi utilisateur.

    Celà marche tres bien et à chaque fois que quelqu'un enregistre, celà enregistre les modifs des autres utilisateurs.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par graphikris Voir le message
    Pourquoi ne pas mettre ton fichier en partage sur le réseau ?

    - Outils
    - Partager le classeur
    puis mettre une croix dans partage multi utilisateur.

    Celà marche tres bien et à chaque fois que quelqu'un enregistre, celà enregistre les modifs des autres utilisateurs.
    Bonjour,

    Désolé de ma réponse tardive, je n'ai pas compris ce que vous avez dit ?
    Il faut aller ou excactement pour avoir le "multi utilisateur" ? sur excel ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par NEC14 Voir le message
    Bonjour,

    Par contre il est possible d'utiliser une macro qui permettrait la fermeture automatique du fichier après un certain délai d'inutilisation.

    dans le module Thisworkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private sub Workbook_Open() Application.OnTime Now + TimeValue("00:02:00"), "Sortie" (ici 2mn, mais vous mettez la durée que vous souhaitez)
    End sub
    dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sub sortie() ThisWorkbook.Close
    End sub
    Bonjour NEC14,

    La commande net send dois être bloqué je pense.
    Donc je vais me rabattre sur ta première solution.
    Par contre je ne vois pas comment ton code sais s'il s'agit d'une inutilisation ?
    Pour moi le fichier va se fermer 2min après son ouverture.
    Je peux me tromper...

  13. #13
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 215
    Points : 523
    Points
    523
    Par défaut
    Bonjour,

    Il ne faut pas aller dans le Vba ( Alt + F11) mais procédes comme ceci (voir miniatures attachées). Dès que c'est bon, previens moi, je supprime le fichier joint afin de gagner de l'espace sur le forum.
    Cordialement

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    Bonjour graphikris,

    je ne vois pas tes miniatures.

    Peux-tu les remettre ?

    Merci

  15. #15
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    Pour utiliser net send il faut que le service "affichage des messages" soit démarré, il y a une alternative en utilisant "msg"
    ex: msg user "mon message"

    taper "msg /?" à l'invite de commande pour les arguments.

    Pour la question des Macros sur un fichier en lecture seule, cela fonctionne parfaitement à condition que les macros soient activée !

  16. #16
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Points : 39
    Points
    39
    Par défaut
    Bonjour Olivier,

    Merci, seulement le fichier excel peut être utilisé par XP pro, windows serveur 2007, Seven pro. et il me semble que msg ne fonctionne pas partout d'après ce que j'ai vu sur le net.

    En lecture seule est-il possible aussi de connaitre le non du pc ou de la personne qui est en train d'utilisé le fichier en écriture ?

  17. #17
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par toniob44 Voir le message
    Bonjour Olivier,

    Merci, seulement le fichier excel peut être utilisé par XP pro, windows serveur 2007, Seven pro. et il me semble que msg ne fonctionne pas partout d'après ce que j'ai vu sur le net.
    a tester
    En lecture seule est-il possible aussi de connaitre le non du pc ou de la personne qui est en train d'utilisé le fichier en écriture ?
    essaye avec ceci
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    Option Explicit
     
     
     
    '===========================================
     
    'http://www.xcelfiles.com/IsFileOpenVBA.htm
     
    '===========================================
     
    Sub TestVBA()
     
    '// Just change the file to test here
     
    Dim strFileToOpen As String
    strFileToOpen = "D:\Document\Mes documents\Classeurfermé_test_DATA.xls"
        If IsFileOpen(strFileToOpen) Then
            MsgBox strFileToOpen & " is already Open" & _
                vbCrLf & "By " & LastUser(strFileToOpen), vbInformation, "File in Use"
        Else
            MsgBox strFileToOpen & " is not open", vbInformation
        End If
    End Sub
     
     
     
    Function IsFileOpen(strFullPathFileName As String) As Boolean
    '// VBA version to check if File is Open
    '// We can use this for ANY FILE not just Excel!
    '// Ivan F Moala
    '// http://www.xcelfiles.com
    Dim hdlFile As Long
        '// Error is generated if you try
        '// opening a File for ReadWrite lock >> MUST BE OPEN!
     
        On Error GoTo FileIsOpen:
        hdlFile = FreeFile
        Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
        IsFileOpen = False
        Close hdlFile
        Exit Function
    FileIsOpen:
        '// Someone has it open!
        IsFileOpen = True
        Close hdlFile
    End Function
     
     
     
    Private Function LastUser(strPath As String) As String
    '// Code by Helen from http://www.visualbasicforum.com/index.php?s=
    '// This routine gets the Username of the File In Use
    '// Credit goes to Helen for code & Mark for the idea
    '// Insomniac for xl97 inStrRev
    '// Amendment 25th June 2004 by IFM
    '// : Name changes will show old setting
    '// : you need to get the Len of the Name stored just before
    '// : the double Padded Nullstrings
    Dim strXl As String
    Dim strFlag1 As String, strFlag2 As String
    Dim i As Integer, j As Integer
    Dim hdlFile As Long
    Dim lNameLen As Byte
     
    strFlag1 = Chr(0) & Chr(0)
    strFlag2 = Chr(32) & Chr(32)
     
    hdlFile = FreeFile
    Open strPath For Binary As #hdlFile
        strXl = Space(LOF(hdlFile))
        Get 1, , strXl
    Close #hdlFile
     
    j = InStr(1, strXl, strFlag2)
     
    #If Not VBA6 Then
        '// Xl97
     
        For i = j - 1 To 1 Step -1
            If Mid(strXl, i, 1) = Chr(0) Then Exit For
        Next
        i = i + 1
    #Else
        '// Xl2000+
        i = InStrRev(strXl, strFlag1, j) + Len(strFlag1)
    #End If
     
     
     
    '// IFM
     
    lNameLen = Asc(Mid(strXl, i - 3, 1))
    LastUser = Mid(strXl, i, lNameLen)
     
    End Function

Discussions similaires

  1. [Traduction] Qt Linguist ne veut pas ouvrir un fichier .ts
    Par djun1 dans le forum Outils
    Réponses: 6
    Dernier message: 21/11/2014, 16h38
  2. Réponses: 11
    Dernier message: 25/10/2007, 18h09
  3. [VB] ouvrir un fichier quelque soit son extension.
    Par gopal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/05/2006, 21h59
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 18h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 16h59

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