VBA Tester un fichier modifié avant utilisation

Résolu
SamGuelis - 6 déc. 2012 à 23:30
 SamGuelis - 16 déc. 2012 à 00:12
Bonsoir
J'essaie de coder en VBA le traitement suivant:
J'ai un fichier Excel F1 dans lequel j'utilise des données venant d'un autre fichier Excel F2 que je lis sans l'ouvir, comme base de données. Je ne veux récupérer les données de F2 vers F1 que si F2 a été modifié. Comment coder cela dans F1?
Merci pour votre aide

SamGuelis

12 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 déc. 2012 à 15:37
Voici une manière de voir la date de la dernière modification d'une feuille. Ensuite à toi de voir une macro à lancer en cas de modification.

Dans un module:

Global gIsModified As Boolean  ' Variable globale qui contiendra vrai en cas de modification
Function GetDateModif() As Date
GetDateModif = ActiveWorkbook.BuiltinDocumentProperties("Last save time")
End Function
Sub auto_close()   ' fonction appelée automatique lors de la fermeture du classeur
If gIsModified Then
    Range("feuil1!a1") = GetDateModif()'a modifier suivant la feuille
End If
End Sub
Sub auto_open() ' fonction appelée lors de l'ouverture du classeur
gIsModified = False  ' init. var. globale
End Sub



Dans la feuille que tu veux surveiller:

Private Sub Worksheet_Change(ByVal Target As Range)
gIsModified = True
End Sub


et enfin dans ThisWorkbook:

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
auto_close
End Sub
Private Sub Workbook_Open()
auto_open
End Sub


@+ Le Pivert
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 déc. 2012 à 23:33
Bonjour,
A quoi reconnais-tu (ou acceptes-tu de considérer) que F2 a été modifié ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 déc. 2012 à 23:47
Je te poses cette question car la fonction filedatetime te retourne la date de la dernière modification (que tu pourrais comparer avec une cellule mise à jour de F1), mais n'est pas fiable. Car cette date est modifiée, même sans la moindre réelle modification, si le classeur F2 est ouvert, puis "enregistré sous" le même nom et au même endroit.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 déc. 2012 à 09:47
Bonjour,
Regarde ceci:

http://frederic.sigonneau.free.fr/code/Fichiers/ProprietePerso.txt

N'est valable que pour voir si le classeur a été ouvert!

@+ Le Pivert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hi ucfoutu, Le Pivert
En fait c'était justement là le principal point. Qu'est-ce que je pouvais avoir comme marqueur pour montrer que mon fichier F2 avait été mis à jour et que ces mises à jour n'était pas en core prise en compte par F1. Je vais exploiter ces infos tester les suggestions et voir ce qu'il vaut mieux utiliser.
SamGuelis
0
Bonjour,
Dans le classeur où se trouve la feuille à surveiller j'ai testé la réponse et c'est OK. Néanmoins dans le classeur F1 qui surveille la feuille de l'autre(F2) peut-on accéder à la variable globale qui signale que la feuille X de F1 a été modifiée?

SamGuelis
0
oups!! je voulais dir la que la feuille X de (F1) F2 a été modifiée?



SamGuelis
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 déc. 2012 à 11:50
0
Bonjour

J'ai essayé le code préconisé par le Pivert sur (http://frederic.sigonneau.free.fr/code/Ado/OLEDonneesClasseurFerme.txt
) et j'ai un souci: après être sorti de l'application Excel, en ayant dans le code, fermé le classeur ouvert en consultation, je ne peux plus ouvrir ce classeur en double cliquant dessus dans l'explorateur Windows. C'est comme s'il était vérouillé. Je n'ai pas de message me disant qu'il est vérouillé. SI je veux l'ouvrir je suis obligé de me délogger et relogger ensuite. J'ai dû louper quelque chose dansle code, car cela ne fonctionne pas tout à fait comme prévu. Merci pour votre aide.


SamGuelis
0
REctification; même en rebootant le PC je n'arrive plus afficher ce classeur sous Excel en double cliquant dessus. LA fenêtre Excel reste désespérément vide. help
SamGuelis
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
12 déc. 2012 à 14:51
Etant absent ce matin, je n'ai pas pu te répondre. Tout d'abord je ne comprends pas car ce code fonctionne très bien. 

Pour ouvrir ton classeur essaie de le faire par code:
Tu ouvres un nouveau classeur avec un button dans un UserForm avec ce code:

Private Sub CommandButton2_Click()
Workbooks.Open ("cheminclasseur\monclasseur.xls")
End Sub


Ensuite voici code que je t'ai indiqué qui fonctionne chez moi:

Sub test()
Dim Chemin$, NomFich$
Dim classeur As Workbook
Dim base As Range
  
  Chemin = "chemin du classeur"'ici tu mets le chemin sans le nom du classeur et terminé par\
  NomFich = "Monclasseur.xls"'ici le nom seul du classeur
  Set classeur = GetObject(Chemin & NomFich)
  Set base = classeur.Sheets(1).Range("a1")
  MsgBox base.Value
  'on vérifie que le classeur est bien ouvert
  Workbooks(NomFich).Windows(1).Visible = True
  'ou
  'classeur.Windows(1).Visible = True
  'MsgBox "coucou"
  'on le ferme
  Workbooks(NomFich).Close False
  'ou
  'classeur.Close False
End Sub


J'espère que cela fonctionnera comme cela. A l'avenir fait des essais avec des classeurs test c'est plus prudent pour voir si cela fonctionne.

@+ Le Pivert
0
Bonsoir,
je n'explique pas ce qui s'est passé. Mais j'ai recommencé avec un autre fichier Excel et cela fonctionne très bien merci. J'ai donc effacé le fichier.

SamGuelis
0
Rejoignez-nous