OVH Cloud OVH Cloud

date d'ouverture fichier

26 réponses
Avatar
magic-dd
Bonjour

comment recuperer la date d'ouverture du classeur Excel meme si celui ci n'=
est pas enregistr=E9

exemple

j'ouvre un classeur sur le reseau, la date du jour s'inscrit dans une cellu=
le, je n'enregistre pas mon classeur mais la date reste celle inscrite

10 réponses

1 2 3
Avatar
magic-dd
MichD

voilà , dans chacun de mes classeurs disposé sur un reseau j'ai mis dan s le wkbook open l'appel de la macro complementaire

les fichiers ont tous le meme nom et la surveillance de la cellule B2 se fa it sur la meme feuille de chaque fichier

en fait, j'ai remarqué que si l'on enregistre le classeur sans pour autan t avoir rien modifié, la mise à jour de la date se fait

donc l'objet de ma quest ion etait

si on modifie la cellule B2 de chaque classeur contennat dans le WKBook ope n l'appel de la complemetnaire, alors on inscrit la date de modification si non on laisse celle deja inscrite

merci de ton aide

Le samedi 3 août 2013 01:24:52 UTC+2, MichD a écrit :
Ta question n'est pas claire!



Si je comprends ta question, tu veux vérifier le

contenu de la cellule B2 d'un autre classeur que celui

où tu as défini la procédure "Workbook_Open".



Ce classeur2, est-il toujours le même? Porte-t-il un nom

précis? Le nombre de classeurs ouverts dans ton application

est-il toujours le même?



Je t'ai donné un fichier de macros complémentaires... si tu utilises

l'événement "workbook_Open" dans le thisWorkbook, tu vas toujours

être à la merci de l'usager s'il accepte ou non les macros dès l'ou verture.



Tu dois préciser davantage ce que tu désires effectuer.





MichD

---------------------------------------------------------------
Avatar
MichD
Essaie ceci, j'ai modifié le fichier de la macro complémentaire

http://cjoint.com/?CHfoBxqclRn

La procédure dans ce fichier utilise le nom de la propriété "Name"
de l'objet "Feuille" dans le classeur. Dans l'arborescence des
objets du projetVBA du fichier, la liste des feuilles s'affiche de
cette façon :

Feuil1(Feuil1)
Feuil2(Feuil2)

Le premier Feuil1 c'est ce qui est utilisé dans la ligne de code suivante
Set sh = Worksheets(.VBComponents("Feuil1").Properties("Index"))

(Feuil1) représente le nom de l'onglet de la feuille où se retrouve
la cellule B2. Selon ton environnement, tu peux modifier ce nom.
La procédure suppose que ce nom est le même pour tous les fichiers.

Ce nom (propriété name) n'est pas altéré même si l'usager change
le nom de l'onglet de la feuille de calcul.

Attention de te méprendre sur la désignation du nom de l'objet "Feuille".

MichD
---------------------------------------------------------------
Avatar
magic-dd
Bonsoir MichD

merci beaucoup pour cette modif

je ne comprends pas tout (comme souvent)

je vais regarder à tete reposée.

encore un grand merci pour ton indefectible aide.

cdlt

Le lundi 5 août 2013 14:35:23 UTC+2, MichD a écrit :
Essaie ceci, j'ai modifié le fichier de la macro complémentaire



http://cjoint.com/?CHfoBxqclRn



La procédure dans ce fichier utilise le nom de la propriété "Name"

de l'objet "Feuille" dans le classeur. Dans l'arborescence des

objets du projetVBA du fichier, la liste des feuilles s'affiche de

cette façon :



Feuil1(Feuil1)

Feuil2(Feuil2)



Le premier Feuil1 c'est ce qui est utilisé dans la ligne de code suivan te

Set sh = Worksheets(.VBComponents("Feuil1").Properties("Index"))



(Feuil1) représente le nom de l'onglet de la feuille où se retrouve

la cellule B2. Selon ton environnement, tu peux modifier ce nom.

La procédure suppose que ce nom est le même pour tous les fichiers.



Ce nom (propriété name) n'est pas altéré même si l'usager chang e

le nom de l'onglet de la feuille de calcul.



Attention de te méprendre sur la désignation du nom de l'objet "Feuil le".



MichD

---------------------------------------------------------------
Avatar
magic-dd
Pourrais tu m'envoyer un fichier exemple qui pourrait fonctionner avec ta complementaire car la je seche

dans le nom des feuilles, onglet, propriete

merci par avance
Avatar
MichD
Voici le fichier : http://cjoint.com/?CHfv4hS1AR5

Regarde les explications dans le module de la feuil1.

Si tu observes des choses qui ne fonctionnent pas comme tu le
voudrais, tu dois m'expliquer ce qui ne va pas le plus précisément
possible!


MichD
---------------------------------------------------------------
Avatar
magic-dd
Bonjour MichD

j'ai regardé tard dans la soirée ton fichier

en effet je crois m'etre mal expliqué

je vais donc reprendre le plus explicitement possible

je possede 30 classeurs excel qui ont tous au moins une feuille appelée c ommentaire

dans cette feuille commentaire , en cellule B2 du texte ecris par mon inter locuteur

chaque mois, je veux recuperer la date de modification du commentaire

or avec ta premiere solution , meme si le commentaire ne changeait pas, la date d'enregistrement était elle prise en compte

avec ton 2eme exemple, il prend une date en B2 et fait un comparatif avec l a date du dernier enregistrement

il est important pour moi de prendre en compte la date de modification de l a cellule B2 de la feuille commentaire si et seulement si celui ci a ét é modifié.

la date et le environ"(username") seront positionnés en A50 et B50 de cet te meme feuille commentaire

je te joins un fichier exemple

je ne sais pas quoi y inscrire dans le thisworkbook pour faire appel à la macro complementaire

merci encore de t'impliquer dans ce qui est pour moi insurmontable

bonne journée

http://cjoint.com/?CHglje3vyIL

Le lundi 5 août 2013 21:59:57 UTC+2, MichD a écrit :
Voici le fichier : http://cjoint.com/?CHfv4hS1AR5



Regarde les explications dans le module de la feuil1.



Si tu observes des choses qui ne fonctionnent pas comme tu le

voudrais, tu dois m'expliquer ce qui ne va pas le plus précisément

possible!





MichD

---------------------------------------------------------------
Avatar
MichD
Voici une nouvelle copie du fichier de macros complémentaires :
http://cjoint.com/?CHgo4Twie9I

Ce fichier traite tous les classeurs contenant une feuille nommée
"commentaires".

Si durant la session de travail, l'usager modifie la cellule B2 de la
feuille
commentaire, la date + l'heure du changement sera enregistrée dans un
"NOM (NAME) dudit fichier. Ce nom n'est pas visible par l'usager, mais
accessible par VBA. Je t'ai déjà donné la ligne de code!

Lorsque B2 de la feuille commentaire est modifié, le fichier s'enregistrera
automatiquement.

Tout le code du module de classe est expliqué.

Tu peux ouvrir autant de fichiers que tu désires, ils seront tous traités.
Aucun code n'est à ajouter aux classeurs ouverts si ce n'est que pour
trouver la valeur du nom masqué "LaDate"

MichD
---------------------------------------------------------------
Avatar
MichD
Et si tu veux extraire la date de la dernière modification
de la cellule B2 du fichier actif (affiché à l'écran), tu peux
mettre cette macro dans ton classeur de macros personnelles.
Cela laissera totalement libres tous tes classeurs de la moindre
ligne de code.

Si rien ne se passe lors de l'exécution, le fichier ne contient
pas un Name LaDate et par conséquent, le contenu de B2
n'a pas été modifié ou le fichier ne contient pas une feuille
"Commentaires".

'------------------------------------------
Sub Date_Dernière_Modification_B2()
Dim X As Variant
On Error Resume Next
X = Evaluate("LaDate")
If IsError(X) Then
Err.Clear
Else
MsgBox Format(CDbl(Evaluate("LaDate")), "DD MMM YYYY H:MM:SS")
End If
End Sub
'------------------------------------------


MichD
---------------------------------------------------------------
Avatar
MichD
Dans le module de classe, je viens de me rendre
compte qu'il y a une petite coquille. Remplace
le code actuel par celui-ci :

J'ai omis dans le classeur précédent, ce petit test :
If Not IsEmpty(.Range("C" & X)) Then '<<<<< Ligne ajoutée


'----------------------------------------
Private Sub AppXl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

Dim NomClasseur As String, X As Variant

With ThisWorkbook ' (classeur de la macro complémentaire)
With .Worksheets("Feuil1")
'Extraire le nom du classeur
NomClasseur = Wb.Name
'Identifie la ligne où est contenu de nom du classeur
X = Application.Match(NomClasseur, .Range("A:A"), 0)
'teste si le nom du classeur a été trouvé
If IsNumeric(X) Then
'Si .Range("C" & x ) est vide, c'est sûr qu'il
'n'y a eu aucune changement
If Not IsEmpty(.Range("C" & X)) Then '<<<<< Ligne ajoutée
'Vérifie si depuis l'ouverture du fichier la valeur
'de la cellue B2 a été modifié
If .Range("C" & X) <> .Range("B" & X) Then
'Si oui, on enregistre la date de fermeture du fichier
'en créant un nom (Name) LaDate , contenant la date +
l'heure
Wb.Names.Add "LaDate", Now(), False
'Afin de s'assurer de conserver cette donnée, le fichier
'est enregistré automatiquement.
Wb.Save
End If
End If
End If
End With
End With
End Sub
'----------------------------------------

MichD
---------------------------------------------------------------
Avatar
MichD
Une dernière remarque :

Afin que les usagers ne puissent pas modifier le nom de
la feuille "Commentaires", il serait bon que tu protèges
le classeur!

MichD
---------------------------------------------------------------
1 2 3