ticrain
Messages postés178Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention 2 janvier 2015
-
7 mai 2007 à 15:13
cs_MPi -
11 mai 2007 à 11:52
Bonjours à tous!
Voila je programme en VBA excel, je voudrai que mon programme incremente un compteur à chaque fois qu'il y'a un fichier d'enregistré. Je voudrai incrémenter mon compteur par rapport au nom de mon fichier, si par exemple j'ai un fichier qui s'apelle "monfichier.doc" et qui a eu 10 enregistrement sur se même fichier je voudrai incrémenter de 1 mon compteur. Sachant que mon compteur est une image ou je fait apparaitre des fotos ("1,2,3,4,5,6....) avec l'instruction :
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 mai 2007 à 15:32
Salut
Pas très clair.
"qui a eu 10 enregistrement sur se même fichier " =? "et dont les données ont été réécrites 10 fois"
Mais il faudrait qu'on sache si c'est toi qui gère l'écriture des données.
Si non, on n'en sait pas assez.
Si oui, il te suffit de créer une variable par fichier dans ton programme, définie par exemple en Public dans un module afin que cette variable puisse être lue et modifiée de n'importe où dans ton programme.
Je te conseille d'indexer les deux, le nom du fichier et le compteur sous forme d'un Tableau.
Un simple Type est très pratique :
Public Type typeMesFichiers
sNomFichier As String
lCompteur As Long
End Type
Public aMesFichiers(1000) As typeMesFichiers
et quand tu as besoin de lire ou écrire une donnée :
aMesFichiers(0).sNomFichier = "C:\Mes documents\toto.doc"
aMesFichiers(0).lCompteur = 1
Tes fichiers sont maintenant représentés par un simple index numérique (de zéro à 1000 dans cet exemple)
Alors, ma boule cristal me suggère la question suivante :
"Oui, mais je voudrais récupérer le contenu de ces compteurs entre deux lancements de mon application."
Il faudra donc que tu stockes quelque part une liste des fichiers et le compteur associé.
Tu peux le faire simplement en écrivant un fichier texte (Open Print #, Close) que tu pourrais appeler (injustement) monApplication.INI.
Quand tu sauvegarderas cette liste, il te suffira d'une boucle pour lister chacun des aMesFichiers(x) d'index 0 à 1000
A voir : Création de tableau à dimension variable (Redim)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 8 mai 2007 à 07:43
Salut,
+ simple ? Peut-être..
Si effectivement c'est TA procédure dans Excel qui provoque l'enregistrement d'un doc Word, alors c'est donc simple, choisis une cellule pour stocker l'incrémentation (par exemple IV1) :
Sub TaProcedureEnregistrement()
Dim iCompteur As Integer
ticrain
Messages postés178Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention 2 janvier 2015 9 mai 2007 à 10:04
Mon programme VBA ouvre des fichiers excel et des fichiers Word. Dans le temps ces fichiers subiront des modifications. Imaginons que j'ouvre un fichier word que je modifie certain truc pour le mettre à jour j'enregistre ensuite les modifications apportées à mon document word, et la mon programme devrait "detecter" l'enregistrement et incrementer le compteur. C'est la detection d'un enregistrement de fichier qui me pose probleme.
Merci de m'aider mortalino
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 9 mai 2007 à 10:29
Ne serait-il pas possible qu'a chaque sauvegarde de fichier, une variable soit incrémentée par Word via une procédure évenementielle et qui pourrait etre lue par Access ?
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 9 mai 2007 à 14:31
Comme je le disais, je pense pas que ca serait compliqué de faire une table avec tes documents avec un champ Nb_modifications dont la valeur serait incrémenté à chaque modifications mais je ne sais pas si c'est le mieux et si ca fonctionnerait dans ton cas (je sais pas combien tu as de fichiers)
ticrain
Messages postés178Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention 2 janvier 2015 9 mai 2007 à 14:39
Je dois avoir en tout, une centaine de fichiers (word et excel confondus). Je pense pas que tu es vraiment cerné mon problème, mais je te remrcie de m'aider, en faite oublions le compteur pour l'instant, quand tu quitte un fichier word par exemple ou tu as fait des modifications une boite de dialogue s'ouvre te demandant si tu veux enregistré, si tu fait oui mon programme VBA doit le detecter et ensuite incrementer mon compteur pour dire qu'un fichier à été modifié. C'est se que tu avais compris?
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 9 mai 2007 à 15:09
PErso, je viens de regarder dans word, je vois pas comment faire une procédure évenementielle déjà donc, c'est mal parti. Maintenant, de ton coté, si tu sais le faire, bah tu crée une procédure sur la fermeture de document et s'il y a modifs, tu incrémente la valeur dans la base.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 9 mai 2007 à 15:40
Bon, je sais pas si ca va te plaire mais j'ai trouver une procédure évenementielle pour excel qui lorsque tu sauvegardes, et que tu confirme, affiche un msgbox. Tu pourrais donc la modifier pour que cette procédure écrive dans une base de données.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim msg As VbMsgBoxResult
msg = MsgBox("Do you really want to save the workbook?", vbYesNo)
If msg = vbYes Then
MsgBox "Enregistrement dans la base de données"
Else
Cancel = True
End If
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 9 mai 2007 à 16:10
Salut,
oui je suis là
En fait, je pense avoir compris ton problème.
T'as un Fichier Excel (appelons le XL), avec, tu crées des fichiers Word (appelons le WD).
Un utilisateur x ouvreWD, fait des modifications, enregistre WD, et le ferme.
Toi, avec XL, tu veux savoir combien de modifs ont été enregistrés sur WD.
Ais-je bien compris ?
Je t'avoue que ça risque de ne pas être simple. Je regarde 2 3 trucs et te tiens au courant !
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 9 mai 2007 à 16:37
Si oui à ma question précédante, essaie ce code :
Private Sub ProprietesDoc(sDoc As String)
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim Propriete As Object
On Local Error Resume Next
wdApp.Visible = False
Set wdDoc = wdApp.Documents.Open(sDoc)
For Each Propriete In wdDoc.BuiltinDocumentProperties
On Error Resume Next
If Propriete.Name = "Revision number" Then
Select Case Propriete.Value
Case 1, 2: MsgBox "Pas encore modifié"
Case Else: MsgBox "Fichier enregistré " & Propriete.Value \ 2 & " fois"
End Select
Exit For
End If
Next
wdDoc.Close False
wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing
End Sub
Sub test()
Call ProprietesDoc("C:\Documents and Settings\mortalino\Bureau\test.doc")
End Sub
ticrain
Messages postés178Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention 2 janvier 2015 11 mai 2007 à 09:16
Tu as saisis à 75% mon problème Mortalino juste deux truc:
1 : C'est le nombre de fichiers modifiés qui m'intéresse et non le nombre de modicfications dans un document.
2 : Depuis mon programme VBA j'ouvre aussi bvien des XL que des WD.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 11 mai 2007 à 09:28
Et bien par exemple, la méthode que je t'ai donné fonctionne alors pour excel, il faut juste que tu remplace la ligne par une écriture dans la base Access. Par contre, si tu veux faire ca par Access, ca serait plus complexe.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim msg As VbMsgBoxResult
msg = MsgBox("Do you really want to save the workbook?", vbYesNo)
If msg = vbYes Then
MsgBox "Enregistrement dans la base de données"
Else
Cancel = True
End If
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 11 mai 2007 à 09:39
Pour Word, l'evenement équivalent est DocumentBeforeSave.
Le probleme avec les méthodes que je t'ai donné est que si l'utilisateur appui 10 fois de suite sur save, tu aurais 10 incrémentations en principes (ce qui n'est pas super).
Je vais aussi voir s'il est possible de faire ca à partir de Access.