Macro Excel : incrémenter des numéros

flobat -  
 flobat -
Bonjour,

J'utilise actuellement une macro sous Excel pour incrémenter des numéros :
Private Sub Workbook_BeforeSave(ByValSaveAsUI As Boolean,
Cancel As Boolean)
Range("no_facture").Value = Range("no_facture").Value+1
End Sub
Jusque là, ça fonctionne cad que lorsque j'enregistre le document, le suivant passe directement à l'ancien numéro + 1.

Mais, lorsque j'allume l'ordinateur et que j'ouvre mon document en activant les macros, le numéro revient chaque fois à 1. Comment faire pour la macro prenne en compte les numéros des jours précédents et qu'elle fasse le suivi ?

Merci d'avance pour votre aide.
Configuration: Windows XP

3 réponses

  1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Bonsoir flobat,

    Bizarre, ton truc. Peut-être testes-tu ta macro sans faire de modif dans ton classeur avant de le fermer ? Auquel cas, le classeur se ferme sans sauver quoi que ce soit.

    Utiliser BeforeSave n'est pas forcément judicieux : si tu enregistres de temps à autre ton travail en cours, tu vas à chaque fois incrémenter ton compteur. A toi de voir. Mais BeforeClose est peut-être plus adapté (tout dépend de ton contexte).
    0
    1. flobat
       
      Bonjour Armojax

      et merci pour ta réponse. Mon classeur est toujours modifié lorsque je l'enregistre, et il passe à l'ancien numéro + 1.

      Utiliser la formule BeforeClose te paraît plus judicieux, mais plus laborieuse pour moi parce que mon but est de laisser mon document ouvert la journée et de l'enregistrer à chaque modification.

      Par contre, je ne comprend toujours pas pourquoi le numéro revient à 1 lorsque j'éteins l'ordinateur et que je le rallume le lendemain.

      Merci et A+
      0
    2. flobat
       
      Bonsoir Armojax,

      Je crois que je t'ai répondu un peu trop vite en te disant que la macro BeforeClose ne me convenait pas. Finalement, je voudrais l'essayer, mais j'ai un problème.
      Je ne connais pas trop les macros, et, en remplaçant Save par Close, la macro n'est pas acceptée.
      Peux-tu m'aider et me donner la formule ?
      Merci.
      0
    3. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > flobat
       
      Hello flobat,

      Excuse-moi, je vois seulement maintenant ton message.

      Pour activer Before_Close :

      - Va dans VBA
      - Dans l'Explorateur de Projets, double-clique sur ThisWorkbook La partie droite qui s'affiche est surmontée de deux boites à listes : Général et Déclarations

      - Dans Général, clique sur Workbook, puis...
      - Dans Déclarations clique sur Before_Close

      Et là tu mets le contenu de ta macro.
      0
    4. flobat > flobat
       
      Bonsoir Armojax,

      Je te remercie pour ton aide, j'ai trouvé la macro BeforeClose et je l'ai testée. Elle fonctionne très bien avec Fichier Enregistrer, mais lorsque j'utilise Fichier Enregistrer Sous, mon numéro s'incrémente après fermeture du fichier, mais pas à la réouverture de mon modèle. Je comprend la procédure puisque le modèle lui-même n'est pas enregistré (je lui donne un autre nom).

      Peut-être existe-t-il une autre macro qui puisse me permettre d'utiliser Fichier Enregistrer Sous tout en incrémentant mes numéros ?
      Merci de me donner ton avis.
      0
    5. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > flobat
       
      Hello flobat,

      Le plus simple (?) me semble de stocker à part le numéro de facture.

      Dans l'exemple ci-dessous, j'utilise un petit classeur IncrémentFacture dans lequel je stocke, à la fermeture du classeur, le numéro de facture incrémenté.

      Ensuite, à l'ouverture, on va y chercher le numéro en question.
      De cette façon, quel que soit le fichier qu'on ouvre (le modèle ou bien un enregistrement sous...), on obtient toujours le bon numéro.

      Le code n'est pas condensé. On peut simplifier en donnant des noms, etc.

      Si quelqu'un a mieux, je suis preneur.
      Private Sub Workbook_Open()
      
        Application.ScreenUpdating = False
      
        Dim CeClasseur As Workbook
        Dim SaveNofact As Workbook
        
        Workbooks.Open Filename:="D:\Forums_CCM\IncrémentFacture.xls"
        Set SaveNofact = ActiveWorkbook
        Set CeClasseur = ThisWorkbook
        
        CeClasseur.Sheets("Feuil1").Cells(1, 1).Value = SaveNofact.Sheets("Feuil1").Cells(1, 1).Value
        SaveNofact.Close
      
        Application.ScreenUpdating = True
        
      End Sub
      Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      
        Application.ScreenUpdating = False
      
        Dim CeClasseur As Workbook
        Dim SaveNofact As Workbook
        
        Workbooks.Open Filename:="D:\Forums_CCM\IncrémentFacture.xls"
        Set SaveNofact = ActiveWorkbook
        Set CeClasseur = ThisWorkbook
        
        CeClasseur.Sheets("Feuil1").Cells(1, 1).Value = CeClasseur.Sheets("Feuil1").Cells(1, 1).Value + 1
        SaveNofact.Sheets("Feuil1").Cells(1, 1).Value = CeClasseur.Sheets("Feuil1").Cells(1, 1).Value
        
        SaveNofact.Close True
      
        Application.ScreenUpdating = True
        
      End Sub
      
      0
  2. Sergio
     
    Bonjour,

    As-tu vérifié si tu n'as pas une macro auto_open qui remet la valeur de ta cellule no_facture à 1 ?

    Cordialement

    Sergio
    0
    1. flobat
       
      Bonjour Sergio

      Comment puis-je voir si j'ai une macro auto_open ? Dans VBA ?

      Merci de ta réponse. Je ne suis pas très douée en Macro.

      Flobat.
      0
      1. Sergio > flobat
         
        Re-bonjour,

        Tu peux rechercher dans l'éditeur VBA avec la fonction recherche.

        Sinon pour savoir si le problème vient de là, ouvre ton fichier en appuyant sur la touche "Shift" du clavier. Quand on fait ça et qu'il existe une macro auto_open, celle-ci n'est pas exécutée à l'ouverture du fichier.

        Si en ouvrant ton fichier de cette façon, tu ne retrouve toujours pas le dernier numéro avant enregistrement, c'est que le problème ne vient pas d'une macro auto_open.

        Cordialement

        Sergio
        0
      2. flobat > Sergio
         
        Sergio,

        Merci pour ton aide. En effet, lorsque j'ouvre mon document en appuyant sur la touche "shift", celui-ci s'ouvre au dernier numéro enregistré. Donc le problème vient bien d'une macro auto_open.
        Par contre, je ne la trouve pas, j'ai essayé la fonction Recherche dans VBA, mot inconnu. Est-ce normal ?

        Merci encore.

        Flobat
        0
      3. Sergio > flobat
         
        Bonjour Flobat,

        As-tu coché "Projet en cours" dans la fenêtre de recherche ?

        Cordialement

        Sergio
        0
      4. flobat > Sergio
         
        Bonjour Sergio,

        Ca y'est, je te remercie, j'ai trouvé la macro qui bloquait.
        Merci encore pour ton aide.

        A+
        0
  3. random Messages postés 1612 Statut Membre 155
     
    si tu choisissais ton numéro avec la formule
    suivante max(ici tous les numéros de facture)
    ref par exemple a$1:a200
    tu arriverais à la même chose
    0