Numéro de facture automatique

naufa

XLDnaute Nouveau
Bonjour à tous,

je cherche à mettre en place un numéro de facture qui s'incrémente de façon automatique, j'ai trouvé un code sur un site (http://dj.joss.free.fr/faq.htm#numFacture) mais n'y connaissant pas grand chose en macro je ne sais pas comment utiliser ce code...

voici le code en question:

A l'ouverture d'un classeur basé sur le modèle ('Fact1.xls'), la cellule 'numFact'
est incrémentée et le classeur est réenregistré comme modèle 'Fact.xlt', écrasant le
précédent et sauvegardant ainsi le nouveau numéro.

A la fermeture, si le classeur 'Fact1.xls' n'a pas été enregistré, on considère que
le numéro de facture n'a pas servi. Le modèle est réouvert et la cellule 'numFact'
est décrémentée pour proposer à la création du prochain classeur basé sur le modèle
un numéro de facture 'cohérent' avec les précédentes factures enregistrées.


Code:
Private Sub Workbook_Open()
If ActiveWorkbook.Path = '' Then
[numFact] = [numFact] + 1
ActiveWorkbook.Saved = True
ActiveWorkbook.SaveCopyAs(Application.TemplatesPath & 'Fact.xlt')
End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemXlt = Application.TemplatesPath & 'Fact.xlt'
If ActiveWorkbook.Path = '' Then
Set wbk = Workbooks.Open(chemXlt)
With wbk.ActiveSheet
.Range('NumFact') = .Range('NumFact') - 1
End With
wbk.Close True
End If
End Sub

merci d'avance de votre aide
 

lio

XLDnaute Occasionnel
Bonjour naufa, le forum,

Ouvre un classeur excel,
Tape Alt F11, puis tu double clic dans la feuille ThisWorkbook et le tu copie ce code .

Dans ta feuille excel nome une cellule numFact et attribue lui un N°.
Attention, je suis débutant moi aussi. Si me je me suis trompé les 'pros' me corrigeront. :p

Salutations.
 

lio

XLDnaute Occasionnel
Re,

Je te joins un fichier téléchargé sur ce site. (l'auteur se reconnaitra !).

Si tu veux voir le code qui est dans VBA. ( Désactive les macros à l'ouverture).

Je t'aiderais en fonction de mes faibles connaissances si il y problème.

@ + [file name=numero.zip size=8983]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/numero.zip[/file]
 

Pièces jointes

  • numero.zip
    8.8 KB · Affichages: 160

naufa

XLDnaute Nouveau
Bonjour lio,

merci de ton aide, j'ai qq p'tites questions ;)
Je dois mettre le nom NumFact dans la 'Zone Nom' tt à gauche, c'est bien cela? :eek:

dans le code il est fait référence à Fact.xlt ce fichier je dois le créer ou bien se crée t'il de manière automatique?

merci d'avance
 

lio

XLDnaute Occasionnel
Re,
En fait, je décortique ( avec toi) le fichier que je t'ai joins.

Code à placer dans cette feuille après avoir fait Alt F11
Private Sub Workbook_Open()
DerBon, NomModele,... sont des variables que l'utilisateur défini
Dim DerBon, NomModele, Decomp1, Decomp2, NouveauBon
Cette ligne sert (selon l'aide en tapant sur F1) a exécuter ta macro plus rapidement
Application.ScreenUpdating = False
Ici, on définit la 1ere variable: c'est lorsque le classeur s'ouvre
NomModele = ActiveWorkbook.Name
2ème variable et 3ème variable (non déclarée la 3ème): dans la feuille ' Liste numéros ...', on sélectionne la dernière ligne de la colonne A.
DerBon = Sheets('Liste numéros bons de cde').Range('a1').End(xlDown)
Dl = Sheets('Liste numéros bons de cde').Range('a1').End(xlDown).Row
4ème variable: en gros on extrait le n° en partant de la gauche du dernier n° de commande ( du type 0007)dans une variable. Note le 4 correspond a une quantité d'octé (fonction length)
Decomp1 = Left(DerBon, 4)
Ici, on ajoute 1 a ta variable qui vient d'être définit
Decomp1 = Decomp1 + 1
4ème variable:en gros on extrait le n° en partant de la droite du dernier n° de commande ( du type 2005 F)dans une variable.
Decomp2 = Right(DerBon, Len(DerBon) - 4)
5 ème variable: Ici, on 'fabrique' le nouveau bon de commande (son format): tu aura compris qu'on compile en fait de deux n°. Pour info les quatre zéro, c'est pour ajuster le format)
NouveauBon = Format(Decomp1, '0000') & Decomp2
Ici, on donne la valeur numérique a cette variable
Sheets('Liste numéros bons de cde').Range('a' & Dl + 1) = NouveauBon
Ici, on sélectionne la feuille 'BdC vierge'
Sheets('Bon de commande vierge').Select
Ici, on lui demande gentillement (lol) de placer le nouveau n° dans la cellule d1
Range('d1') = NouveauBon
Ici, de faire une copie maintenant quelle est à jour
Sheets('Bon de commande vierge').Copy
Ici, on enregistre le classeur ( voir la 1ère variable !)
Workbooks(NomModele).Save
Ici, on reprend une vitesse de macro normale. Attention, à ne pas oublié ( voir l'aide VBA)
Application.ScreenUpdating = True
Ici, on ferme ce classeur
Workbooks(NomModele).Close
Fin du projet
End Sub

Je essayais de te décrire au maximum les procédures. Si un 'habitué ' passe par là et s'il peut faire les corrections ... ça serait qu'un +, car pour t'aider, j'ai zappé sur F1(aide en francais, ne ;) ).

Note: tu peux faire plus simple avec un bon de commande d'un seul tenant type 00072005. Je ne sais pas comment ce filou arrive à masquer la feuille 'Liste numéros bons de cde'. Question à suivre...

Salut
 

naufa

XLDnaute Nouveau
Bonjour lio et bonjour à tous,

merci de ton aide, mais je crois qu'on ne parlait pas du même code :silly: je parlais de celui que j'ai mis entre code (qui pour l'instant ne marche pas.

mais je vais essayer aussi avec celui que tu m'as fourni ;)

@+ et merci encore

Message édité par: naufa, à: 18/11/2005 11:28
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 088 010
Membres
103 699
dernier inscrit
samSam31