Autres Est-il possible d'interdire ou de bloquer le déplacement d'un fichier Excel non fermé ?

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une belle journée :)

Je créé ce fil pour une question très particulière (Usine à gaz oblige lol) 🤣

Le contexte :
Chaque matin je transmets par Skype, à chacune de mes commerciales, son classeur de prospection avec sa date du jour. Exemple : isiTel_lionel_Global 2022 08 04

Elle fait son job et quand elle a terminé, elle glisse le classeur dans la partie conversation de Skype pour me le transmettre.

Cela me permets de vérifier le classeur (que je peux être amené à modifier).
Le lendemain matin, je transmets le classeur modifié ou non (tjrs par Skype) avec la date du nouveau jour de travail. Exemple : isiTel_lionel_Global 2022 08 05

Chacun sait (du moins, je le sais pour en avoir trop souvent subi les conséquences) que l'on peut glisser un fichier dans Skype ou autre sans l'avoir fermé et Plouf.
Le fichier transmis n'est pas à jour des enregistrements du travail de la journée car :
- non fermé,
- et donc non sauvegardé.

Pour éviter ce grave inconvénient, je me demande depuis longtemps s'il est possible d'interdire ou de bloquer le déplacement d'un fichier Excel non fermé ?
Code Excel ou Windows ... je ne sais pas !

Je fais des recherches périodiques sur le net. Jusqu'à maintenant, je n'ai rien trouvé qui pourrait résoudre ma demande.
D'ailleurs : est-ce possible ? pas sûr du tout !

Si quelqu'un avait une solution, ce serait génial.
Un grand merci à vous,
Amicalement,
lionel :)
 
Solution
Solution 1 : le classeur est renommé à l'ouverture et à la fermeture :
VB:
Private Sub Workbook_Open()
Dim Classeur_Source       As String
Dim Classeur_Temp       As String

    Classeur_Source = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    Classeur_Temp = CreateObject("Scripting.FileSystemObject").GetBaseName(ThisWorkbook.FullName)
    Classeur_Temp = Replace(ThisWorkbook.FullName, Classeur_Temp, Classeur_Temp & "_Utilisé")
    
    ThisWorkbook.CustomDocumentProperties.Add Name:="Source", _
        Type:=msoPropertyTypeString, LinkToContent:=False, Value:=Classeur_Source
    ThisWorkbook.CustomDocumentProperties.Add Name:="Temp", _
        Type:=msoPropertyTypeString, LinkToContent:=False, Value:=Classeur_Temp...

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour patricktoulon :), Bonjour le Forum :)

Merci Patrick de t'être penché sur mon fil :)
La solution que tu proposes (il me semble) a été proposé par fanch55 mais pose souci par moment, voir #post5
- de fanch55 "J'ai regardé sur le net, c'est un pb assez récurent avec l'explorateur."

C'est pourquoi j'ai pris la solution 2 du #post10.
Pour l'instant, après un certain nombre de tests, elle semble très bien fonctionner.
lionel :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
re
bonjour lionel
je n'avais pas vu son post 5
je vois pas les problèmes que ça peut comporter
mais la solution de sauver sous un autre nom ailleurs en prenant soins de mémoriser dans les custompropertie et de le resauver à la fin sous le nom et chemin de départ est bonne
Re-Patrick,
Hé ben : comme c'est un point très sensible, j'ai beaucoup testé et il est arrivé que l'icône de réapparaisse plus même en rafraichissant.
Alors, j'ai du aller dans les options des dossiers :
"Faire afficher les fichiers masqués"
Je l'avais oublié celui-là.
J'ai pu récupérer le classeur à l'affichage.
Mais galère si ça arrive à mes commerciales
:)
 

patricktoulon

XLDnaute Barbatruc
re
ma fois comme il n'y a pas de variable ou quoi que ce soit
même si un plantage vba ailleurs les deux events sont valables avec les deux constantes
après si la structure windows est bancale sur les pc de tes commerciaux , faudrait peut être régler ce problème avant

mais l'idée de @fanch55 est bonne surtout qu'il utilise les custompropertie au lieu de variable donc rien ne se perd 👍
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour @patricktoulon :), Bonjour fanch55, Bonjour le Forum :),

C'est tellement sensible que je suis toujours en test car il ne s'agit pas de perdre le fichier de prospection pour quelque disfonctionnement que ce soit.

Je viens de tester plusieurs fois un plantage d'Excel que j'ai provoqué en quittant "sauvagement" avec le gestionnaire de tâches.

Cela ne semble pas poser de problème car :
- Le classeur réapparait normalement,
- Et ce que j'ai modifié est également sauvegardé,
Je ne comprends pas trop pourquoi ? :rolleyes:
1 - Sauriez-vous m'expliquer pkoi le classeur réapparait quand je sors par le Gestionnaire de tâches ?

2 - Quand Excel plante (sans sortir par le Gestionnaire de tâches) :

Est-ce que ?
- Le classeur réapparaitra normalement ?
- Ce que j'aurai modifié sera sauvegardé ?

- Existe-t-il d'autres types de plantages d'Excel ?

Merci à tous pour les retours,
lionel :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick :)
Je parle de ce code :
VB:
Private Sub Workbook_Open()
'Windows("test explorateur").Visible = false 'masque la feuille
'SetAttr ThisWorkbook.Path & "\" & ThisWorkbook.Name, vbHidden

Dim TempFolder As String
Dim Classeur_Source       As String
Dim Classeur_Temp       As String

    TempFolder = CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2)
    Classeur_Source = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    Classeur_Temp = TempFolder & "\" & ThisWorkbook.Name

    ThisWorkbook.CustomDocumentProperties.Add Name:="Source", _
        Type:=msoPropertyTypeString, LinkToContent:=False, Value:=Classeur_Source
    ThisWorkbook.CustomDocumentProperties.Add Name:="Temp", _
        Type:=msoPropertyTypeString, LinkToContent:=False, Value:=Classeur_Temp

    Application.DisplayAlerts = False
        ThisWorkbook.SaveAs Classeur_Temp
        Kill Classeur_Source
    Application.DisplayAlerts = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Windows("test explorateur").Visible = True 'masque la feuille
'SetAttr ThisWorkbook.Path & "\" & ThisWorkbook.Name, vbNormal

Dim Classeur_Source       As String
Dim Classeur_Temp       As String

    With ThisWorkbook.CustomDocumentProperties("Source")
        Classeur_Source = .Value: .Delete
    End With
    With ThisWorkbook.CustomDocumentProperties("Temp")
        Classeur_Temp = .Value: .Delete
    End With

    Application.DisplayAlerts = False
        ThisWorkbook.SaveAs Classeur_Source
        Kill Classeur_Temp
    Application.DisplayAlerts = True
End Sub
:)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Autrement dit, le code
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Windows("test explorateur").Visible = True 'masque la feuille
'SetAttr ThisWorkbook.Path & "\" & ThisWorkbook.Name, vbNormal

Dim Classeur_Source       As String
Dim Classeur_Temp       As String

    With ThisWorkbook.CustomDocumentProperties("Source")
        Classeur_Source = .Value: .Delete
    End With
    With ThisWorkbook.CustomDocumentProperties("Temp")
        Classeur_Temp = .Value: .Delete
    End With

    Application.DisplayAlerts = False
        ThisWorkbook.SaveAs Classeur_Source
        Kill Classeur_Temp
    Application.DisplayAlerts = True
End Sub
serait exécuté ?
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Patrick :)

Bizarre, je m'enfonce dans la bouillie épaisse ...
Plantage d'Excel que j'ai provoqué en quittant "sauvagement" avec le gestionnaire de tâches.
Résultat sans mettre le msgbox "fermeture!!!"
à la réouverture :

- Le classeur réapparait normalement là où il était,
- Et ce que j'ai modifié est également sauvegardé,
- Pas de Récupération automatique,

Résultat avec le msgbox "fermeture!!!"
- Le classeur réapparait normalement là où il était,
- Et ce que j'ai modifié est également sauvegardé,
- Récupération automatique :
1660498699698.png

Très bizarre pour moi ???
Toutefois, dans les 2 cas, le classeur ne disparait pas et est sauvegardé.
lionel :)
 

fanch55

XLDnaute Barbatruc
Salut Lionel,
Si tu fermes sauvagement Excel ou que tu le tues via le gestionnaire de taches/Processus,

les mécanismes de recovery d'Excel sont exécutés et l'event "Workbook_BeforeClose" sera honoré .
1660552871082.png
Si tu le tues via le gestionnaire de taches/Détails ou que tu éteins violemment le PC,

Le classeur restera dans le dossier temporaire et tu devras le déplacer/rétablir manuellement ...
1660553076188.png
 

Discussions similaires

Statistiques des forums

Discussions
312 190
Messages
2 086 037
Membres
103 105
dernier inscrit
fofana