Rechercher : dans
Par :

Macro Excel : incrémenter des numéros

Dernière réponse le 27 oct 2005 à 22:58:13 flobat, le 9 oct 2005 à 21:02:36 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Macro Excel : incrémenter des numéros » dans :
Exécuter une macro VoirExécuter une macro Excel et Calc proposent plusieurs façons d’exécuter une macro : en la sélectionnant dans une liste, dans la boîte de dialogue Macro ; par un raccourci clavier ; en l’attachant à un bouton de la barre d’outils ; ...

1

Armojax, le 9 oct 2005 à 21:17:58

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).

Répondre à Armojax

3

flobat, le 10 oct 2005 à 11:29:41

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+

Répondre à flobat

10

flobat, le 19 oct 2005 à 22:44:43

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.

Répondre à flobat

11

Armojax, le 20 oct 2005 à 13:46:48

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.

Répondre à Armojax

12

flobat, le 20 oct 2005 à 22:03:09

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.

Répondre à flobat

13

Armojax, le 21 oct 2005 à 11:17:40

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

Répondre à Armojax

14

flobat, le 23 oct 2005 à 21:08:28

Bonsoir Armojax,

Excuse-moi pour ma réponse tardive, je n'étais pas disponible ce week-end.
Merci pour ta solution. Je n'ai pas tout compris, ç'est un peu compliqué pour moi.
J'ai quand même fait un essai. J'ai créé un fichier IncrementFacture, mais lorsque je le nomme dans la macro (Filename), j'ai un message d'erreur : fichier introuvable.
Que faut-il faire ?
J'ai noté dans Filename : C:\Documents and Settings\Famille\IncrementFacture.xls
Merci encore pour ton aide.

A+

Répondre à flobat

15

Armojax, le 24 oct 2005 à 09:24:25

Bonjour flobat,

Effectivement, j'ai donné le fonctionnement en vitesse de croisière, mais pas la façon d'initialiser le système !
Il faut que tu te crées un petit classeur "IncrémentFacture.xls", qui contiendra seulement (en cellule A1 de la feuille Feuil1, si on ne veut pas modifier la macro), le numéro de facture que tu veux avoir lors de la prochaine ouverture de ton travail.

Il y a 2 macros : la première sauvegarde dans IncrémentFacture le numéro de facture à chaque fois q'on fait un Enregistrer ou un Enregistrer sous... La seconde va y chercher la numéro de facture lors de chaque ouverture.

Bonne semaine.
Ajx.

Répondre à Armojax

16

flobat, le 25 oct 2005 à 20:19:26

Salut Armojax,

Mille merci pour ton aide, ça fonctionne.
C'est un peu long et fastidieux, mais le plus important est le résultat. Je n'ai encore pas tout compris le sens exact des mots, mais j'essaie petit à petit.
Où trouve-tu toutes ces macros ? Y'a t-il un site spécial ?

A+

Répondre à flobat

17

Armojax, le 26 oct 2005 à 10:35:33

Salut flobat,

Bon, hébé tant mieux si ça fait ce que tu veux.
En général, on écrit soi-même les macros dont on a besoin. Il est rare de trouver pile poil la macro qui va correspondre au problème du moment, et il y a du plaisir à se fabriquer ses propres outils.

Pour Excel, Word, Access... VBA est pratique, parce que directement intégré. Pour apprendre, tous les moyens sont bons : commencer par l'enregistreur de macros, trouver un bon bouquin ou quelqu'un qui sait, et fouiller dans des sites nombreux sur le sujet. En voici quelques uns trouvés avec Google :

http://www.commentcamarche.net/faq/sujet-631-%5BVisual-Basic­%5D-Liens-utiles
http://www.excelabo.net/
http://xcell05.free.fr/
http://ericrenaud.free.fr/
http://vlohr.free.fr/veriti/index.php
http://vb.developpez.com/

En dehors de Microsoft Office, il vaut mieux utiliser un autre langage que VB, qui n'est plus franchement d'actualité (php, delphi...).

Répondre à Armojax

18

 flobat, le 27 oct 2005 à 22:58:13

Salut Armojax,

Merci pour tes conseils, j'irais visiter les sites que tu m'as recommandés dès que j'aurais un peu de temps libre.
En tout cas, c'est très interessant et j'ai déjà appris beaucoup en communicant avec toi.

A+ lorsque j'aurais un autre problème de macros.

Répondre à flobat

2

Sergio, le 10 oct 2005 à 09:49:07

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

Répondre à Sergio

4

flobat, le 10 oct 2005 à 11:31:55

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.

Répondre à flobat

6

Sergio, le 10 oct 2005 à 17:31:25

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

Répondre à Sergio

7

flobat, le 10 oct 2005 à 21:05:40

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

Répondre à flobat

8

Sergio, le 11 oct 2005 à 09:30:34

Bonjour Flobat,

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

Cordialement

Sergio

Répondre à Sergio

9

flobat, le 11 oct 2005 à 14:42:25

Bonjour Sergio,

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

A+

Répondre à flobat

5

random, le 10 oct 2005 à 11:50:02

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 elle est pas belle, la vie ?

Répondre à random
Collection CommentÇaMarche.net