Voir aussi
Date et heure de modification d'un fichier
Comment récupérer en VBA la date et l'heure de modification d'un fichier ?
nf="Toto.Txt"
DateModifFichier = FileDateTime(nf)
Jacques Boisgontier,
Ajouté ou modifié le 16/03/2008 (N°1981)
Mettre un copyright sur un classeur excel
Y a-t-il un moyen de laisser une trace non modifiable de l'auteur d'un fichier Excel ?
Ce n'est pas simple et loin s'en faut, mais c'est faisable par exemple, en écrivant dans
le fichier un message codé à l'aide d'une clé basée sur un système de
hachage; clé que l'on peut écrire dans une propriété privée créée à l'aide
de CustomDocumentProperties. Cette clé peut être relue ultérieurement avec
la même fonction pour vérifier que ce ce fichier est bien le fichier
initial. Cela revient à avoir un fichier marqué de son sceau de manière
invisible et indélébile.

Une fonction de hachage peut être définie comme étant une fonction qui prend
une série binaire de donnée d'entrées de longueur arbitraire et qui produit
à la sortie une série de données binaire de longueur déterminée. La valeur
de sortie est ce que l'on nomme la valeur de hachage. Idéalement, pour
qu'une fonction de hachage produise une valeur de hachage équivalent à n
bits, la probabilité qu'une série de données choisie aléatoirement produise
une valeur de hachage de valeur n bits est de 2n. Il est mathématiquement
infaisable de trouver deux données d'entrée qui produisent la même valeur de
hachage et à partir d'une valeur de hachage donnée, il est mathématiquement
infaisable de trouver une valeur de donnée d'entrée qui produise la même
valeur de hachage. Les fonctions de hachage sont habituellement connues
publiquement et n'utilisent pas de Clé Secrète, elles sont utilisées pour
protéger l'intégrité des données et sont appellées Codes de Détection de
Modification (MDC). Un des Codes de Détection de Modification le plus
utilisé est le Secure Hash Algorithm (SHA) dont le plus connu est le
SHA-256 publié par l'Institut National des Standards Américain et de la
Technologie (NIST).
Michel Pierron,
Ajouté ou modifié le 19/02/2006 (N°1735)
Extraire le nom d'un fichier depuis son chemin complet
Comment extraire "zaza.xls" et "zaza" du chemin "F:\mondossier\monsousdossier\zaza.xls"
Pour récupérer "zaza.xls" :

Dim I As Integer
For I = Len(NomFic) To 1 Step -1
If Mid$(NomFic, I, 1) = "\" Then Exit For
Next
NomCourt = Mid$(NomFic, I + 1)


Pour récupérer "zaza" à partir de "zaza.xls"
SansExtension= Left(AvecExtension, Len(AvecExtension) - 4)
Laurent Longre,
Ajouté ou modifié le 14/03/2005 (N°1543)
Poids d'un fichier
Comment connaître la taille (le poids) d'un classeur excel par VBA ?
Sub Taille()
Dim Fichier As String
Fichier = "c:\excel\à voir.xls"
With CreateObject("Scripting.FileSystemObject")
MsgBox .GetFile(Fichier).Size / 1024 & " Ko."
End With
End Sub
Denis Michon,
Ajouté ou modifié le 30/05/2004 (N°1430)
Propriétés d'un classeur
Comment afficher dans un classeur le chemin du fichier, le nom de l'onglet...
Attention toutes les formules doivent être sur la même ligne !

1. Chemin d'accès complet :
=CELLULE("filename";A1)
C:\!DocFlo\disci3\xl\exemples\[fc-manipfichiers.xls]propriétés

2. Répertoire :
=GAUCHE(CELLULE("filename";A1);TROUVE("[";CELLULE("filename"
A1))-2)
C:\!DocFlo\excelabo\xl\exemples

3. Nom du classeur seul :
=STXT(CELLULE("filename";A1);TROUVE("[";CELLULE("filename";A
))+1;SOMME(TROUVE({"[";"]"};
CELLULE("filename";A1))*{-1;1})-1)
fc-manipfichiers.xls

4. Nom de la feuille
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A
))+1;32)
propriétés

5. Répertoire + classeur :
=SUBSTITUE(GAUCHE(CELLULE("filename";A1);TROUVE("]";
CELLULE("filename";A1))-1);"[";"")
C:\!DocFlo\disci3\xl\exemples\fc-manipfichiers.xls

6. Nom du classeur et de la feuille :
=STXT(CELLULE("filename";A1);TROUVE("[";CELLULE("filename";A
));300)
[fc-manipfichiers.xls]propriétés

Cette astuce est illustrée dans ce classeur exemple :
fc-manipfichiers (téléchargé 10998 fois)
Laurent Longre, (N°717)
Numéroter les versions d'un classeur
J'aimerais pouvoir numéroter les différentes versions de mes macros complémentaires.
Chaque document a 30 propriétés, définies ou non.
Tous ces propriétés sont accessibles à partir de l'explorateur :
un clic droit sur le fichier et item du menu "propriété".

Voici Une procédure pour faire une liste de ces procédures dans
ton classeur:

Sub ListeProprieteDuClasseur()
rw = 1
IndexPropriété = 1
Worksheets(1).Activate
For Each p In ActiveWorkbook.BuiltinDocumentProperties
Cells(rw, 1).Offset(0, 1).Value = p.Name
Cells(rw, 1).Value = IndexPropriété
rw = rw + 1
IndexPropriété = IndexPropriété + 1
Next
End Sub

ceci te donnera l'index et l'intitulé de chacune des propriétés
le chiffre 8 représente "Revision number" du document. Tu peux donc l'utiliser
en te créant une fonction personnalisée :

Public Function PDerVersion()

PDerVersion = ActiveWorkbook.BuiltinDocumentProperties(8).Value

End Function

Dans ta feuille : saisis la formule : =PDerVersion().
Classeur de démo : fc-manipfichiers

Cette astuce est illustrée dans ce classeur exemple :
fc-manipfichiers (téléchargé 10998 fois)
Denis Michon, (N°716)
Mettre des mots clefs sur un classeur
Je souhaiterais modifier les mots clés enregistrés dans les propriétés d'un classeur via un routine VBA pour permettre une recherche ultérieure par mots clés.
ThisWorkbook.BuiltinDocumentProperties(4) = MesMostCles

MesMotsCles étant une chaîne de caractères.
Pierre Fauconnier, (N°715)
Mac ou PC ?
Comment peut-on savoir par VBA si le classeur est ouvert sur un mac ou sur un PC ?
Tu peux savoir si tu es sur PC ou sur Mac en utilisant la propriété
OperatingSystem de l'objet Application. Selon l'aide :

"Cette propriété renvoie le nom et le numéro de version du système
d'exploitation en cours, par exemple « Windows (32 bits) 4.00 » ou « Macintosh
7.00 ». Type de données String en lecture seule."
Frédéric Sigonneau, (N°714)
Les dates caractéristiques d'un classeur
Comment indiquer les dates de création et de modification d'un classeur
Il y a plusieurs possibilités. Certaines sont peu fiables (comme GetDateModif ).
Ce qui fonctionne :

A mettre dans le module thisworkbook :
Private Sub Workbook_Open()
Sheets(1).[A1] = "Date de création : le " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(11), _
"dd/mm/yyyy")
Sheets(1).[A2] = "Dernier enregistrement : le " _
& Format(ActiveWorkbook.BuiltinDocumentProperties(12), _
"dd/mm/yyyy hh:mm")
End Sub

Pour afficher de façon encore plus sure la date de modif :
Toujours dans le module this workbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets(1).Range("A22").Value = "Date de dernière modification : " & Now
End Sub

et un classeur de démo à télécharger pour voir le résultat.

Cette astuce est illustrée dans ce classeur exemple :
fc-manipfichiers (téléchargé 10998 fois)
ChrisV, Frédéric Sigonneau, Denis Michon, (N°713)
Afficher la date de modification d'un classeur
Je voudrais afficher dans un classeur la date de la dernière modification effectuée dans un classeur mais que la simple ouverture/fermeture de celui-ci ne modifie pas cette information.
A mettre dans le module thisworkbook:

Dim modif As Boolean
**********

Private Sub Workbook_Open()
modif = False
End Sub
**********
Private Sub
Workbook_BeforeClose(Cancel As Boolean)
If modif = True Then

Sheets("trucchouette").Range("D1").Value = "Dernière modif le " & Format(Date, _
"dd/mm/yyyy") & " " & Format(Time, "hh:mm") 'c'est là que la date de modif s'affiche
End If
End Sub
**********
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
modif = True
End Sub
**********
Jean-Paul Sabatier, Popi, Flo Cabon, (N°712)
Date de mise à jour des liaisons d'un classeur
J'ai des classeurs liés et je voudrais savoir la date de mise à jour des sources à la mise à jour des liaisons j'afficherai un petit msg "Dernière maj le 31/8/2001"
Sub RechercheLiaisons()
Liaisons = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(Liaisons) Then
For n = 1 To UBound(Liaisons)
msg = msg & " La liaison " & Liaisons(n) & " à été mise à jour le : " &
FileDateTime(Liaisons(n)) & vbCr
Next n
MsgBox msg, vbOKOnly, "Etat des liaisons du classeur"
End If
End Sub
Benead, (N°711)