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

Usine à gaz

XLDnaute Barbatruc
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...

fanch55

XLDnaute Barbatruc
Salut Lionel,
Ma foi, rien n'interdit de copier/dupliquer ( donc glisser/déposer ) un fichier Excel.
Les seules actions interdites, c'est le déplacement ou suppression .
Tu as cependant plusieurs possibilités :
impliquer tes commerciaux et les sensibiliser à plus de professionnalisme ...
ou si tu veux vraiment faire de l'assistanat, inclure ces codes dans Thisworkbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    SetAttr ThisWorkbook.Path & "\" & ThisWorkbook.Name, vbNormal
End Sub

Private Sub Workbook_Open()
    SetAttr ThisWorkbook.Path & "\" & ThisWorkbook.Name, vbHidden
End Sub

Si le classeur est ouvert, il sera caché dans l'explorateur, donc pas de glisser/déposer.
Si le classeur est fermé, il sera visible dans l'explorateur...
 

Usine à gaz

XLDnaute Barbatruc
Bonsoir fanch55 :)

Merci pour ce retour SUPER et MAGIQUE :)
2 lignes de code léger et n'alourdissent pas mes "usines à gaz lol
Génial ... je te remercie.

"impliquer tes commerciaux et les sensibiliser à plus de professionnalisme"
Mais nous sommes toutes et tous sujets à erreurs ou oublis.
"si tu veux vraiment faire de l'assistanat"
Je dirais plutôt prévoir toutes erreurs de clics ou de manip.
N'est-ce pas déjà ce que font les logiciels ?

Super merci à toi, nous pourront transférer nos classeurs en sécurité,
lionel :)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour @fanch55, le Forum,
Bon dimanche à toutes et à tous :)
@ fanch55 : S.O.S

Si le classeur est sur le bureau, pas de souci, ça fonctionne.

Mais gros souci en testant les codes sur un fichier qui n'est pas sur le bureau.
Le fichier est dans un dossier et là, plus moyen de le faire réapparaître.

Tu aurais la solution ?
lionel :)
 

fanch55

XLDnaute Barbatruc
Bizarre:
j'ai testé avec un classeur dans un dossier "local" ( de toute façon, le bureau est également un dossier ) .
Tout fonctionne correctement.
Sur un dossier "réseau", c'est assez aléatoire, il faut rafraichir l'explorateur ( parfois même sur un dossier local) .

J'ai regardé sur le net, c'est un pb assez récurent avec l'explorateur .
Il faut trouver une autre solution, je m'y attèle ..

Le fichier est dans un dossier et là, plus moyen de le faire réapparaître.
Faire afficher les fichiers masqués dans les options des dossiers dans l'explorateur pour dépanner
 

Usine à gaz

XLDnaute Barbatruc
Re :)
J'ai trouvé ce lien :
qui me semble intéressant.

et peut-être aussi celui-là :

J'essaie de comprendre lol :)
 

fanch55

XLDnaute Barbatruc
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
    
    Application.DisplayAlerts = False
        ThisWorkbook.SaveAs Classeur_Temp
        Kill Classeur_Source
    Application.DisplayAlerts = True
    
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
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

Solution 2 : le classeur est déplacé à l'ouverture dans le dossier temp et replacé dans le dossier d'origine à la fermeture
Code:
Private Sub Workbook_Open()
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)
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
re fanch55
Encore à toi d'être là :)

J'ai choisi (évident pour moi lol) ta solution 2 qui semble fonctionner nickel :);)
L'intérêt du code est que :
- nous avons souvent plusieurs classeurs ouverts en même temps,
- d'où l'oubli quelques fois de fermer "tous" les classeurs avant transmission
.

1 truc me turlupine :
1 - Si j'ouvre plusieurs classeurs, il m'affiche :
1659874009453.png

Ca provient certainement : le classeur est renommé au déplacement
Le renommer est obligé ?
lionel :)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
"C'est que tu as des fichiers ayant le même nom dans des dossiers différents ."
Exact : comme suis un malade de la sauvegarde, sans compter les sauvegardes "hors ordi", j'ai plusieurs disques sur l'ordi qui contiennent un dossier avec les mêmes classeurs.

Question :
- il ne déplace que le fichier s'il est sur le bureau (et pas ceux des autres dossiers où qu'ils soient ?
et/ou
- il ne déplace que le fichier du dossier ouvert (et pas celui du bureau, ni ceux des autres dossiers où qu'ils soient ?

Après tests, il semble bien que NON alors nickel

lionel
:)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour lionel , @fanch55
il m'est difficile d'admettre que l'on puisse déplacer dans un autre dossier un fichier excel ouvert
dangereux ça


d'ailleurs le message d'erreur parle de lui même
tu ouvre un classeur qui est dans "C:\mondossier1"
tu le replace dans "C:\mondossier2"
sauf que comme il est ouvert le thisworkbook.path devrait te donner le path d'origine et non le 2d

mais bon si ça marche pourquoi pas 🤔
 

patricktoulon

XLDnaute Barbatruc
maintenant sans toucher a son chemin il y a une solution simple
très simple même!!;)

dans le module thisworbook
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SetAttr ThisWorkbook.FullName, vbNormal
End Sub

Private Sub Workbook_Open()
SetAttr ThisWorkbook.FullName, vbHidden
End Sub

vous l'avez compris pendant l'ouverture on change son attribut (normal/caché)

démonstration
demo.gif


c'est magic!! tellement c'est simple 🤣

essaye donc de glisser un fichier invisible dans skype toi 🤣
;)
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 291
Membres
111 092
dernier inscrit
ThomasU3