Macro Excel : incrémenter des numéros

Fermé
flobat - 9 oct. 2005 à 21:02
 flobat - 27 oct. 2005 à 22:58
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.
A voir également:

3 réponses

Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
9 oct. 2005 à 21:17
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
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
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
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528 > flobat
20 oct. 2005 à 13:46
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
flobat > flobat
20 oct. 2005 à 22:03
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
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528 > flobat
21 oct. 2005 à 11:17
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
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
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
Sergio > flobat
10 oct. 2005 à 17:31
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
flobat > Sergio
10 oct. 2005 à 21:05
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
Sergio > flobat
11 oct. 2005 à 09:30
Bonjour Flobat,

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

Cordialement

Sergio
0
flobat > Sergio
11 oct. 2005 à 14:42
Bonjour Sergio,

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

A+
0
random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 155
10 oct. 2005 à 11:50
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