VBA Tester un fichier modifié avant utilisation [Résolu]

SamGuelis - 6 déc. 2012 à 23:30 - Dernière réponse :  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
Afficher la suite 

12 réponses

Répondre au sujet
cs_Le Pivert 5072 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 7 déc. 2012 à 15:37
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Le Pivert
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 déc. 2012 à 23:33
0
Utile
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.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 déc. 2012 à 23:47
0
Utile
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.
Commenter la réponse de ucfoutu
cs_Le Pivert 5072 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 7 déc. 2012 à 09:47
0
Utile
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
Commenter la réponse de cs_Le Pivert
0
Utile
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
Commenter la réponse de SamGuelis
0
Utile
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
Commenter la réponse de SamGuelis
0
Utile
oups!! je voulais dir la que la feuille X de (F1) F2 a été modifiée?



SamGuelis
Commenter la réponse de SamGuelis
cs_Le Pivert 5072 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 11 déc. 2012 à 11:50
Commenter la réponse de cs_Le Pivert
0
Utile
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
Commenter la réponse de SamGuelis
0
Utile
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
Commenter la réponse de SamGuelis
cs_Le Pivert 5072 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 26 avril 2018 Dernière intervention - 12 déc. 2012 à 14:51
0
Utile
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
Commenter la réponse de cs_Le Pivert
0
Utile
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
Commenter la réponse de SamGuelis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.