Incrémenter un compteur aprés enregistrement

Signaler
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015
-
 cs_MPi -
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

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!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

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
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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 ?
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

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.
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

es tu la mortalino?
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

es tu la mortalino?
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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)
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

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?
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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~
  
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

Désolé de ne pas avoir été la hier, je vais essayer ce que vous m'avais donné je vous tiens au courant.
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

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
   
   
Messages postés
178
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
2 janvier 2015

Je vais essayer ce que tu m'as donné ca ma l'air intéressant merci NICKO 11
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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.