OVH Cloud OVH Cloud

numeroter des factures

13 réponses
Avatar
coinche
Bon, voila mon probleme:
Je ne suis pas chez moi et j`essaye depuis plusieurs
jours, pour le boulot de mon oncle, de faire la chose
suivante:

il fait ses factures sous excel. Or il voudrait inserer,
dans l`une des cellules, un systeme de compteur:
a chaque fois q`il ouvrirait une nouvelle facture, elle
se numeroterait toute seule, ce qui lui permettrait de
savoir a combiem il en est.

J`ai essaye des macros, des trucs que j`ai trouve sur
internet, mais je ne suis pas assez bonne pour 1)savoir
si ils fonctionnent 2)les mettre en place sans aucune
aide.

Si vous pouvez m`aider, merci beaucoup !

10 réponses

1 2
Avatar
Daniel.j
Un exemple ici:
http://dj.joss.free.fr/faq.htm#numFacture
Daniel

"coinche" a écrit dans le message de news:
09ce01c3cef0$c1792200$
| Bon, voila mon probleme:
| Je ne suis pas chez moi et j`essaye depuis plusieurs
| jours, pour le boulot de mon oncle, de faire la chose
| suivante:
|
| il fait ses factures sous excel. Or il voudrait inserer,
| dans l`une des cellules, un systeme de compteur:
| a chaque fois q`il ouvrirait une nouvelle facture, elle
| se numeroterait toute seule, ce qui lui permettrait de
| savoir a combiem il en est.
|
| J`ai essaye des macros, des trucs que j`ai trouve sur
| internet, mais je ne suis pas assez bonne pour 1)savoir
| si ils fonctionnent 2)les mettre en place sans aucune
| aide.
|
| Si vous pouvez m`aider, merci beaucoup !
|
Avatar
merci de me repondre.

Je suis en realite deja allee sur ce lien, mais je ne
suis pas assez forte pour tout comprendre.
Notammemt je ne compremds pas cette histoire de formet
XLT par rapport a XLS.
Comment creer une feuille au format .xlt ??

merci !
-----Message d'origine-----
Un exemple ici:
http://dj.joss.free.fr/faq.htm#numFacture
Daniel

"coinche" a écrit
dans le message de news:

09ce01c3cef0$c1792200$
| Bon, voila mon probleme:
| Je ne suis pas chez moi et j`essaye depuis plusieurs
| jours, pour le boulot de mon oncle, de faire la chose
| suivante:
|
| il fait ses factures sous excel. Or il voudrait
inserer,

| dans l`une des cellules, un systeme de compteur:
| a chaque fois q`il ouvrirait une nouvelle facture, elle
| se numeroterait toute seule, ce qui lui permettrait de
| savoir a combiem il en est.
|
| J`ai essaye des macros, des trucs que j`ai trouve sur
| internet, mais je ne suis pas assez bonne pour 1)savoir
| si ils fonctionnent 2)les mettre en place sans aucune
| aide.
|
| Si vous pouvez m`aider, merci beaucoup !
|


.



Avatar
Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.


Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73
Avatar
sabatier
une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne m'abuse
souvent, ces temps-ci), ce système de création de factures présente un
énorme inconvénient que mes connaissances en VBA (maigres, je te
l'accorde) n'ont jamais pu contourner...en effet chaque fois que tu vas
appeler ce modèle Fact.xlt, tu vas ouvrir un document, une première fois
Fact1, une seconde fois Fact2, etc...etc... et si tu dois ensuite aller,
à grands coups de macros, chercher des infos dans ce classeur qui
s'enregistera chaque fois avec un chiffre, donc un nom, diférent, eh
bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73


Avatar
JLuc
Salut sabatier,
Tu n'as pas tord, mais si, a chaque appel, on force l'enregistrement du
fichier avec le nom incluant le numero, cela eviterait de ne plus savoir ou
on en est ?
Je part (non, non, je reste encore un peu;-))) du principe que si on ouvre
un tel fichier, c'est pour creer effectivement une nouvelle facture !
A+
JLuc



une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne
m'abuse souvent, ces temps-ci), ce système de création de factures
présente un énorme inconvénient que mes connaissances en VBA
(maigres, je te l'accorde) n'ont jamais pu contourner...en effet
chaque fois que tu vas appeler ce modèle Fact.xlt, tu vas ouvrir un
document, une première fois Fact1, une seconde fois Fact2,
etc...etc... et si tu dois ensuite aller, à grands coups de macros,
chercher des infos dans ce classeur qui s'enregistera chaque fois
avec un chiffre, donc un nom, diférent, eh bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73




Avatar
sabatier
bonsoir jluc
oui, oui, reste encore un peu...
imagine une seule seconde que tu enregistres ce modèle .xlt en .xls ; tu es
d'accord, semble-t-il avec moi que la facture ainsi enregistrée va être dans un
classeur dont le nom va porter à chaque session excel Fact + un n° qui va, à
chaque ouverture du modèle pendant ladite session, s'incrémenter d'une
unité....are you following me right now? yes? thanks...
1er emm......ent : quand tu attaqueras une autre session d'excel, tu vas
repartir avec Fact1, 2, 3, etc...et donc te retrouver avec des factures au même
nom
2ème emm....ent : tu ne fermes jamais excel mais tu as envie d'aller récupérer
dans tes factures des infos pour des stats quelconques, et ce par macro, oeuf
corse, car tu es un grand bidouilleur de procs devant l'éternel....comment que
tu fais-t-y avec un nom de facture qui change tout le temps?
il doit bien y avoir un truc mais j'avoue qu'il m'échappe....
jps


JLuc wrote:

Salut sabatier,
Tu n'as pas tord, mais si, a chaque appel, on force l'enregistrement du
fichier avec le nom incluant le numero, cela eviterait de ne plus savoir ou
on en est ?
Je part (non, non, je reste encore un peu;-))) du principe que si on ouvre
un tel fichier, c'est pour creer effectivement une nouvelle facture !
A+
JLuc

une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne
m'abuse souvent, ces temps-ci), ce système de création de factures
présente un énorme inconvénient que mes connaissances en VBA
(maigres, je te l'accorde) n'ont jamais pu contourner...en effet
chaque fois que tu vas appeler ce modèle Fact.xlt, tu vas ouvrir un
document, une première fois Fact1, une seconde fois Fact2,
etc...etc... et si tu dois ensuite aller, à grands coups de macros,
chercher des infos dans ce classeur qui s'enregistera chaque fois
avec un chiffre, donc un nom, diférent, eh bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73






Avatar
JLuc
Salut sabatier,
Desole de te repondre si tardivement, mais vu le nombre d'interventions,
j'en suis a me demander si vous n'etes pas (tous ;-))) "scotche" au clavier.
Si je reste pour lire les posts je ne bidouille plus et lycee de versaille.
Franchement, Chapeau Bas a tous les intervenant parce, malgre les fetes
(oui, oui, les voeux c'est pour apres) vous avez une peche d'enfer sur vos
claviers (ou alors parkinson ? ;-)))

oui, oui, reste encore un peu...


merci, c'est sympa

imagine une seule seconde que tu enregistres ce modèle .xlt en .xls ;
tu es d'accord, semble-t-il avec moi que la facture ainsi enregistrée
va être dans un classeur dont le nom va porter à chaque session excel
Fact + un n° qui va, à chaque ouverture du modèle pendant ladite
session, s'incrémenter d'une unité....are you following me right now?


jusque la, je suis d'accord

yes? thanks... 1er emm......ent : quand tu attaqueras une autre
session d'excel, tu vas repartir avec Fact1, 2, 3, etc...et donc te
retrouver avec des factures au même nom


Pourquoi, on ne remet jamais le compteur a zero !! me semble il ?
Donc les numeros continus crescendo

2ème emm....ent : tu ne fermes jamais excel mais tu as envie d'aller
récupérer dans tes factures des infos pour des stats quelconques, et
ce par macro, oeuf corse, car tu es un grand bidouilleur de procs
devant l'éternel....comment que tu fais-t-y avec un nom de facture
qui change tout le temps?
il doit bien y avoir un truc mais j'avoue qu'il m'échappe....


En retestant le numero du compteur sur le modele, tu sais ou tu en est, donc
pour la boucle, it's easy, no ?

jps


En esperant que mes reponses ne sont pas injustifiee (je suis quand meme pas
un pro du dit clavier, je l'ai dis, je bidouille, il faut ecouter je
repeterais pas ;-))) c'est comme ca que je vois la chose.
Si quinquin pense different, je suis toujours ouvert (de 10 à 12 H pour les
conges et 18 à 23 H le reste) aux suggestions

Bon réveillons à tous et que cette nouvelle année vous apporte bonheur,
santé et prosperité (et un nouveau clavier) ;-))
A+
JLuc

Avatar
Frédéric Sigonneau
Bonjour jps,


bonsoir jluc
oui, oui, reste encore un peu...
imagine une seule seconde que tu enregistres ce modèle .xlt en .xls ; tu es
d'accord, semble-t-il avec moi que la facture ainsi enregistrée va être dans un
classeur dont le nom va porter à chaque session excel Fact + un n° qui va, à
chaque ouverture du modèle pendant ladite session, s'incrémenter d'une
unité....are you following me right now? yes? thanks...


Je m'immisce :)
Attention ! Il me semble qu'il y a un peu de confusion là..

1- le modèle (.xlt) s'incrémente à chacune de ses ouvertures, du moins une de
ses cellules nommée numFact s'incrémente, mais seul le modèle a ce comportement.
Les classeurs (donc .xls) créés à partir de ce modèle conserveront ad vitam
aeternam le numéro qui leur a été attribué au moment de leur création (ou plus
exactement de leur enregistrement).

2- le nom donné au classeur qui enregistre une facture a *ou n'a pas* de lien
avec le numéro de cette facture. Le code de ces macros ne s'occupe pas du nom
des classeurs où sont enregistrées les factures, uniquement d'une cellule qui
sert de compteur pour obtenir pour chaque facture un numéro unique.

1er emm......ent : quand tu attaqueras une autre session d'excel, tu vas
repartir avec Fact1, 2, 3, etc...et donc te retrouver avec des factures au même
nom


Ici, nous sommes d'accord. On aura toujours Fact1, Fact2 etc comme on n'a
Classeur1, Classeur2 etc. Mais :

- Fact1 *n'est pas* le nom du classeur ! C'est un nom par défaut, provisoire,
proposé par Excel en attente d'enregistrement. Le "véritable" nom est celui
choisi par l'utilisateur au moment de l'enregistrement (s'il enregistre).

- ces noms provisoires sont indépendants de la valeur de la cellule numFact.
Supposons qu'on enregistre (en partant de 0) 10 factures le 31/12/03. Après ces
enregistrements, le compteur du modèle porte le numéro 10.
Le 2/1/04, on enregistre une nouvelle facture. Le classeur ouvert d'après le
modèle va s'appeler Fact1 mais la cellule numFact aura le numéro 11.

En espérant avoir fait avancer un peu le schmilblick..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

2ème emm....ent : tu ne fermes jamais excel mais tu as envie d'aller récupérer
dans tes factures des infos pour des stats quelconques, et ce par macro, oeuf
corse, car tu es un grand bidouilleur de procs devant l'éternel....comment que
tu fais-t-y avec un nom de facture qui change tout le temps?
il doit bien y avoir un truc mais j'avoue qu'il m'échappe....
jps

JLuc wrote:

Salut sabatier,
Tu n'as pas tord, mais si, a chaque appel, on force l'enregistrement du
fichier avec le nom incluant le numero, cela eviterait de ne plus savoir ou
on en est ?
Je part (non, non, je reste encore un peu;-))) du principe que si on ouvre
un tel fichier, c'est pour creer effectivement une nouvelle facture !
A+
JLuc

une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne
m'abuse souvent, ces temps-ci), ce système de création de factures
présente un énorme inconvénient que mes connaissances en VBA
(maigres, je te l'accorde) n'ont jamais pu contourner...en effet
chaque fois que tu vas appeler ce modèle Fact.xlt, tu vas ouvrir un
document, une première fois Fact1, une seconde fois Fact2,
etc...etc... et si tu dois ensuite aller, à grands coups de macros,
chercher des infos dans ce classeur qui s'enregistera chaque fois
avec un chiffre, donc un nom, diférent, eh bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73








Avatar
sabatier
j'adore quand nous parvenons à faire s'immiscer FS...
lux fiat encore que j'aimerais bien qu'on m'explique comment un modèle (class1, etc)
s'incrémente alors que par définition, ce me semble, le modèle ne connaît de
modifications possibles que lorsqu'il est enregistré....
pour incrémenter un modèle, comme pour lui apportait une modif quelconque, il faut
ouvrir le .xlt et non le tartanpion1....
ou alors je n'ai rien compris depuis tout petit au film des modèles...
jps

Frédéric Sigonneau wrote:

Bonjour jps,


bonsoir jluc
oui, oui, reste encore un peu...
imagine une seule seconde que tu enregistres ce modèle .xlt en .xls ; tu es
d'accord, semble-t-il avec moi que la facture ainsi enregistrée va être dans un
classeur dont le nom va porter à chaque session excel Fact + un n° qui va, à
chaque ouverture du modèle pendant ladite session, s'incrémenter d'une
unité....are you following me right now? yes? thanks...


Je m'immisce :)
Attention ! Il me semble qu'il y a un peu de confusion là..

1- le modèle (.xlt) s'incrémente à chacune de ses ouvertures, du moins une de
ses cellules nommée numFact s'incrémente, mais seul le modèle a ce comportement.
Les classeurs (donc .xls) créés à partir de ce modèle conserveront ad vitam
aeternam le numéro qui leur a été attribué au moment de leur création (ou plus
exactement de leur enregistrement).

2- le nom donné au classeur qui enregistre une facture a *ou n'a pas* de lien
avec le numéro de cette facture. Le code de ces macros ne s'occupe pas du nom
des classeurs où sont enregistrées les factures, uniquement d'une cellule qui
sert de compteur pour obtenir pour chaque facture un numéro unique.

1er emm......ent : quand tu attaqueras une autre session d'excel, tu vas
repartir avec Fact1, 2, 3, etc...et donc te retrouver avec des factures au même
nom


Ici, nous sommes d'accord. On aura toujours Fact1, Fact2 etc comme on n'a
Classeur1, Classeur2 etc. Mais :

- Fact1 *n'est pas* le nom du classeur ! C'est un nom par défaut, provisoire,
proposé par Excel en attente d'enregistrement. Le "véritable" nom est celui
choisi par l'utilisateur au moment de l'enregistrement (s'il enregistre).

- ces noms provisoires sont indépendants de la valeur de la cellule numFact.
Supposons qu'on enregistre (en partant de 0) 10 factures le 31/12/03. Après ces
enregistrements, le compteur du modèle porte le numéro 10.
Le 2/1/04, on enregistre une nouvelle facture. Le classeur ouvert d'après le
modèle va s'appeler Fact1 mais la cellule numFact aura le numéro 11.

En espérant avoir fait avancer un peu le schmilblick..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

2ème emm....ent : tu ne fermes jamais excel mais tu as envie d'aller récupérer
dans tes factures des infos pour des stats quelconques, et ce par macro, oeuf
corse, car tu es un grand bidouilleur de procs devant l'éternel....comment que
tu fais-t-y avec un nom de facture qui change tout le temps?
il doit bien y avoir un truc mais j'avoue qu'il m'échappe....
jps

JLuc wrote:

Salut sabatier,
Tu n'as pas tord, mais si, a chaque appel, on force l'enregistrement du
fichier avec le nom incluant le numero, cela eviterait de ne plus savoir ou
on en est ?
Je part (non, non, je reste encore un peu;-))) du principe que si on ouvre
un tel fichier, c'est pour creer effectivement une nouvelle facture !
A+
JLuc

une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne
m'abuse souvent, ces temps-ci), ce système de création de factures
présente un énorme inconvénient que mes connaissances en VBA
(maigres, je te l'accorde) n'ont jamais pu contourner...en effet
chaque fois que tu vas appeler ce modèle Fact.xlt, tu vas ouvrir un
document, une première fois Fact1, une seconde fois Fact2,
etc...etc... et si tu dois ensuite aller, à grands coups de macros,
chercher des infos dans ce classeur qui s'enregistera chaque fois
avec un chiffre, donc un nom, diférent, eh bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73










Avatar
Frédéric Sigonneau
Re jps,


j'adore quand nous parvenons à faire s'immiscer FS...
lux fiat encore que j'aimerais bien qu'on m'explique comment un modèle (class1, etc)
s'incrémente alors que par définition, ce me semble, le modèle ne connaît de
modifications possibles que lorsqu'il est enregistré....
pour incrémenter un modèle, comme pour lui apportait une modif quelconque, il faut
ouvrir le .xlt et non le tartanpion1....


Bravo ! C'est exactement ce que font les deux procédures proposées : elles
modifient le modèle (Fact.xlt pour continuer sur cet exemple). La première
procédure pour incrémenter numFact (et proposer le numéro immédiatement
supérieur au dernier qui a été utilisé pour une facture enregistrée), la seconde
pour décrémenter numFact si le classeur basé sur le modèle a été fermé sans être
enregistré (pour ne pas avoir de trou dans la numérotation des factures).
Je rappelle que l'idée de ces 2 procédures (la modification directe du modèle)
avait été lancée au départ par Eric Jeanne et que je n'avais fait à l'époque (en
99 ou 2000) que la reprendre au vol..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

ou alors je n'ai rien compris depuis tout petit au film des modèles...
jps

Frédéric Sigonneau wrote:

Bonjour jps,


bonsoir jluc
oui, oui, reste encore un peu...
imagine une seule seconde que tu enregistres ce modèle .xlt en .xls ; tu es
d'accord, semble-t-il avec moi que la facture ainsi enregistrée va être dans un
classeur dont le nom va porter à chaque session excel Fact + un n° qui va, à
chaque ouverture du modèle pendant ladite session, s'incrémenter d'une
unité....are you following me right now? yes? thanks...


Je m'immisce :)
Attention ! Il me semble qu'il y a un peu de confusion là..

1- le modèle (.xlt) s'incrémente à chacune de ses ouvertures, du moins une de
ses cellules nommée numFact s'incrémente, mais seul le modèle a ce comportement.
Les classeurs (donc .xls) créés à partir de ce modèle conserveront ad vitam
aeternam le numéro qui leur a été attribué au moment de leur création (ou plus
exactement de leur enregistrement).

2- le nom donné au classeur qui enregistre une facture a *ou n'a pas* de lien
avec le numéro de cette facture. Le code de ces macros ne s'occupe pas du nom
des classeurs où sont enregistrées les factures, uniquement d'une cellule qui
sert de compteur pour obtenir pour chaque facture un numéro unique.

1er emm......ent : quand tu attaqueras une autre session d'excel, tu vas
repartir avec Fact1, 2, 3, etc...et donc te retrouver avec des factures au même
nom


Ici, nous sommes d'accord. On aura toujours Fact1, Fact2 etc comme on n'a
Classeur1, Classeur2 etc. Mais :

- Fact1 *n'est pas* le nom du classeur ! C'est un nom par défaut, provisoire,
proposé par Excel en attente d'enregistrement. Le "véritable" nom est celui
choisi par l'utilisateur au moment de l'enregistrement (s'il enregistre).

- ces noms provisoires sont indépendants de la valeur de la cellule numFact.
Supposons qu'on enregistre (en partant de 0) 10 factures le 31/12/03. Après ces
enregistrements, le compteur du modèle porte le numéro 10.
Le 2/1/04, on enregistre une nouvelle facture. Le classeur ouvert d'après le
modèle va s'appeler Fact1 mais la cellule numFact aura le numéro 11.

En espérant avoir fait avancer un peu le schmilblick..

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

2ème emm....ent : tu ne fermes jamais excel mais tu as envie d'aller récupérer
dans tes factures des infos pour des stats quelconques, et ce par macro, oeuf
corse, car tu es un grand bidouilleur de procs devant l'éternel....comment que
tu fais-t-y avec un nom de facture qui change tout le temps?
il doit bien y avoir un truc mais j'avoue qu'il m'échappe....
jps

JLuc wrote:

Salut sabatier,
Tu n'as pas tord, mais si, a chaque appel, on force l'enregistrement du
fichier avec le nom incluant le numero, cela eviterait de ne plus savoir ou
on en est ?
Je part (non, non, je reste encore un peu;-))) du principe que si on ouvre
un tel fichier, c'est pour creer effectivement une nouvelle facture !
A+
JLuc

une bien belle démo, boa73, mais, si je ne m'abuse (tiens! je ne
m'abuse souvent, ces temps-ci), ce système de création de factures
présente un énorme inconvénient que mes connaissances en VBA
(maigres, je te l'accorde) n'ont jamais pu contourner...en effet
chaque fois que tu vas appeler ce modèle Fact.xlt, tu vas ouvrir un
document, une première fois Fact1, une seconde fois Fact2,
etc...etc... et si tu dois ensuite aller, à grands coups de macros,
chercher des infos dans ce classeur qui s'enregistera chaque fois
avec un chiffre, donc un nom, diférent, eh bien tu ne peux pas...
je ne sais pas si je me suis bien fait comprendre....
jps (qui a renoncé à ce système et part d'un classeur Fact.xls qu'il
renvoie dans son kibboutz sans l'enregistrer, ce qui fait que ses
factures ne sont que sur le papier)

wrote:

Bonjour,

Voila Ci-dessous une solution qui suppose que ton modèle
("Fact.xlt" dans le code ci-dessous) contienne une
cellule nommée (InsertionNomDéfinir) "numFact", cellule
où s'inscrira le numéro incrémenté.

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.

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

Il faut pour cela que le classeur de base soit nommé
Fact.xlt, qu'il contienne une cellule nommée
numFact, ouvrir l'editeur VBA à l'aide de la combinaison
Alt+F11, de double cliquer sur ThisWorkbook du
projet portant le nom du classeur dans la fenêtre située
en haut à gauche et de copier l'ensemble des
deux procédures, de Private Sub Workbook_Open() au
deuxième End Sub dans la grande fenêtre de droite,
puis d'enregistrer.

Attention
Un fichier .xlt n'est pas destiné à être ouvert par la
procédure "ouvrir",
c'est un modèle, fonctionnant sur le même principe
que "classeur.xlt" qui, lorsqu'on utilise fichier nouveau
donne classeur1.xls.
Si tu procèdes maintenant de cette manière : Fichier /
Nouveau,
tu auras une fenêtre qui te proposera fact en plus de
classeur ;
en choisissant fact, tu ouvriras un fichier nommé
fact1.xls avec une cellule Numfact incrémentée.

Voila j'espère avoir pu t'aider,
Boa73












1 2