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 :

Message fichier en maintenance


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Message fichier en maintenance
    Bonjour à toutes et à tous,

    J'ai un fichier Excel qui sert à tout le service. Il m'arrive de temps à autre de faire quelques mise à jour dans ce fichier.
    Est-il possible de mettre un message du genre "Fichier en maintenance" lorsqu'un utilisateur essaie de l'ouvrir pendant que je l'utilise ?
    Le fichier est en réseau.
    Merci par avance pour votre participation

  2. #2
    Nouveau membre du Club
    Bonjour Vba14,

    Puis-je te rediriger vers le post suivant : https://www.developpez.net/forums/d2...seule-utilise/

    Il te suffit de remplacer la création/envoie de mail par un Msgbox d'alerte si c'est ton nom/identifiant qui est détecté.

    Zeabon

  3. #3
    Membre habitué
    Bonjour Zeabon,

    Merci pour ta réponse, je suis allé voir dans la direction que tu m'a indiqué et c'est en droite ligne avec ce que je recherche.
    Je vais regarder le code et l'appliquer à mon fichier.
    Encore merci

  4. #4
    Expert confirmé
    Citation Envoyé par Vba14 Voir le message

    Est-il possible de mettre un message du genre "Fichier en maintenance" lorsqu'un utilisateur essaie de l'ouvrir pendant que je l'utilise ?
    Bonjour,

    Normalement de base quand un fichier est déjà utilisé le second utilisateur à un message d'avertissement et ne peux l'ouvrir qu'en lecteur seule.

    Une proposition sans VBA serait de créer un onglet contenant juste ce message, quand tu as fini de bosser tu masque l'onglet, et quand tu bosses tu affiche l'onglet ET sauvegarde avec cet onglet actif, comme ça quand qqn essaye d'ouvrir le fichier ce sera cet onglet avec le message qui sera ouvert en premier.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Membre habitué
    Bonjour halaster08,

    Merci pour ta réponse. Cela suppose que l'utilisateur ait accès au fichier non ?
    Normalement ce n'est pas possible de l'ouvrir quand il est déjà utilisé (sauf de l'ouvrir en copie seule).
    Après réflexion et échange avec mon supérieur, l'idéal serait d'interdire l'ouverture et la copie du fichier lorsqu'il est déjà utilisé.
    Parce que malheureusement c'est ce qui se passe, certains l'ouvrent en lecture et se l'enregistre pour eux-mêmes, au risque de ne pas avoir les mises à jours...

  6. #6
    Nouveau membre du Club
    Bonjour à tous,

    Le plus simple, je pense, c'est de faire un test à l'ouverture qui, lorsqu'il détecte la lecture seule, ferme le workbooks.

    Un truc du genre :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Workbook_Open()
    If Workbooks(Thisworkbook).ReadOnly = True then 
        Workbooks(Thisworkbook).Close SaveChanges:=False
    End if
    End Sub


    Et si tu voulais dire que tu souhaitais que cela marche que lorsque tu fias ta maintenance, alors tu rajoute la détection de qui est en modification du premier fil avant de fermer.

    Zeabon

  7. #7
    Expert éminent
    Salut,

    Dans ce cas tester, dans l'évènement Open du classeur, la propriété booléenne

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ThisWorkbbook.ReadOnly


    Si vrai, alors message et fermeture du classeur sans sauvegarde.

    D'autre part, il y a moyen de tester le chemin complet du classeur, en shuntant le lecteur de connexion ("Z\...") éventuel.
    Je tiens ce code à disposition.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    Membre habitué
    Merci pour toutes vos réponses.
    Je vais essayer de mettre tout ça en application et faire des essais sur un fichier lambda avant tout.
    Encore mille mercis

  9. #9
    Membre expérimenté
    Hello,

    Vu cette information "l'idéal serait d'interdire l'ouverture et la copie du fichier lorsqu'il est déjà utilisé."
    Je dirais que la seule manière de procéder et éviter la copie le temps des manip, serait de déplacer le fichier Excel dans un dossier ou les autres utilisateurs n'auront pas accès, faire les modifs, et le remettre ensuite.

    Bav,
    MFoxy
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  10. #10
    Membre habitué
    Bonsoir mfoxy,

    Merci pour votre réponse.
    C'est ce que je fais actuellement, mais les collègues viennent me voir pour me demander "où est le fichier ?". C'est pour cette raison que je cherche une solution pour leur signaler que le fichier est indisponible car en maintenance par moi.

  11. #11
    Expert éminent
    Bonsoir,

    Pour ma part, je suis organisé de la sorte
    - Un navigateur mis à la disposition des collaborateurs et pointant vers tout tye de cible (Ppt, Excel, Internet, Pdf, Répertoire...)
    - Pour un fichier Excel
    A l'ouverture du classeur (évènement Open), test double sur
    - mode d'accès (propriété ReadOnly du classeur)
    - classeur utilisé = classeur officiel
    Si le résultat n'est pas celui attendu, alors message + fermeture sans sauvegarde

    Pour le 2ème item (classeur utilisé = classeur officiel), j'utilise une fonction booléenne, elle même utilisant le chemin complet (hors connecteur réseau Z:\....) de l'applicatif utilisé

    1 - Chemin complet

    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
    Private Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" _
     (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
     Option Compare Text
     
    Public Function cheminlong(ByVal PathName As String) As String
     
    'fonction donnée par GAYOT sur forum, discussion ouverte par MG
    'http://www.developpez.net/forums/d1025923/logiciels/microsoft-office/excel/macros-vba-excel/recherche-repertoire-libelle-integral/
     
    'comment récupérer le chemin intégral du fichier si connection lecteur réseau
    'tuto :
    'http://access.developpez.com/sources/?page=reseau#GetUNC
     
    Const MAX_UNC_LENGTH  As Integer = 512
    Dim strUNCPath As String
    Dim strTempUNCName As String
    Dim lngReturnErrorCode  As Long
     
      strTempUNCName = String(MAX_UNC_LENGTH, 0)
      lngReturnErrorCode = WNetGetConnection(Left(PathName, 2), strTempUNCName, _
        MAX_UNC_LENGTH)
     
      If lngReturnErrorCode = 0 Then
         strTempUNCName = Trim(Left(strTempUNCName, InStr(strTempUNCName, vbNullChar) - 1))
         strUNCPath = strTempUNCName & Mid(PathName, 3)
      End If
     
    cheminlong = strUNCPath
     
    End Function


    2 - fonction

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function monfullname() As String
     
    Dim fnm As String
     
    fnm = ThisWorkbook.FullName
    monfullname = IIf(Len(cheminlong(fnm)) = 0, fnm, cheminlong(fnm))
     
    End Function


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function fichier_valide() As Boolean
     
    Dim maréf_théo As String
     
    maréf_théo = "lechemin officiel de l'applicatif"
     
    'fonction "monfullname" développée ci-dessus
     
    fichier_valide = (monfullname = maréf_théo)
     
    End Function


    Bien sûr l'éditeur VBA est blindé.
    (Maintes discussions sur le sujet...)

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


###raw>template_hook.ano_emploi###