Incrémenter un compteur aprés enregistrement

ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Derniè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  :

image1.picture=pictureload("C:\1.jpg)
image1.picture=pictureload("C:\2.jpg)

etc

Merci beaucoup pour votre aide!

25 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
7 mai 2007 à 15:40
ouaaaaaaaaa! j'ai oublié de te dire que je debuté en VBA excel.
J'ai pas trop compris se que tu veux dire ya pas une solution plus simple que ça!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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

Range("IV1").Value = Range("IV1").Value + 1
iCompteur = Range("IV1").Value

' ton code d'enregistrement

'   >>    image1.picture=pictureload("C:\1.jpg)   ??
' PictureLoad n'existe pas, c'est LoadPicture
image1.picture = LoadPicture("C:" & iCompteur & ".jpg")

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Derniè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
0

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

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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 ?
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
9 mai 2007 à 11:30
Mon véritable problème c'est dans ça:

"Sub TaProcedureEnregistrement()" que faut il mettre dans cette procédure pour que l'enregistrement soit detecté par mon programme VBA merci.
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
9 mai 2007 à 13:48
es tu la mortalino?
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
9 mai 2007 à 13:48
es tu la mortalino?
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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)
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Derniè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?
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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.

Je vais regarder un peu pour Excel.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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
   
End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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~
  
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 mai 2007 à 16:15
Quand tu fais propriétés de ton document Word (clique droit sur le fichier), onglet Résumé : est-ce que le numéro de révision apparait ?

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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

~ <small> Mortalino ~ Colorisation automatique </small>

J'ai mis le message box dans la sub, au pire, fais-en une fonction pour avoir un retour sous forme d'entier 

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
11 mai 2007 à 09:11
Désolé de ne pas avoir été la hier, je vais essayer ce que vous m'avais donné je vous tiens au courant.
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Derniè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.

Voila
   
   
0
ticrain Messages postés 178 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 2 janvier 2015
11 mai 2007 à 09:17
Je vais essayer ce que tu m'as donné ca ma l'air intéressant merci NICKO 11
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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
   
End Sub
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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.
0
Rejoignez-nous