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 !

3 réponses

1 2
Avatar
sabatier
bon, ben , j'avais donc mal lu la présentation de Serpent73 et c'est
sûrement pas
aujourd'hui que je me sens capable de la réétudier malgré les
esseuplications
complémentaires de FS que je remercie au passage...mais on reste bien
d'accord, du moins
je l'espère, qur le fait que ce système ne permettra jamais d'aller
pêcher par macro des
infos dans le modèle, certes incrémenté, ainsi ouvert...
??? (notre pape à tous notera -s'il n'a pas trop la tête dans le seau-
que ces 3 points d'interrogation seront ma nouvelle signature en 2004
puisqu'il a bien voulu m'appeler ainsi le dernier jour de 2003)

Frédéric Sigonneau wrote:

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














Avatar
Frédéric Sigonneau
Bonjour,

Retour après dissipation des brumes festivales...


bon, ben , j'avais donc mal lu la présentation de Serpent73 et c'est
sûrement pas
aujourd'hui que je me sens capable de la réétudier malgré les
esseuplications
complémentaires de FS que je remercie au passage...mais on reste bien
d'accord, du moins
je l'espère, qur le fait que ce système ne permettra jamais d'aller
pêcher par macro des
infos dans le modèle, certes incrémenté, ainsi ouvert...


Les deux procédures dont au sujet desquelles on cause n'ont pas d'autre objet
que de modifier la valeur d'une cellule nommée du modèle. Elles pourraient bien
sûr en profiter pour faire autre chose mais ce n'est pas le cas. Quelles infos
pourraient être "pêchées" alors qu'elles ne devraient pas l'être (si je
comprends correctement votre remarque) ?

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 !

??? (notre pape à tous notera -s'il n'a pas trop la tête dans le seau-
que ces 3 points d'interrogation seront ma nouvelle signature en 2004
puisqu'il a bien voulu m'appeler ainsi le dernier jour de 2003)

Frédéric Sigonneau wrote:

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
















Avatar
sabatier
j'aurais bien répondu mais vous auriez tous pensé que c'était l'autre jean paul, celui du
vatican, qui s'exprimait à cette tribune...je fais référence à l'audibilité de l'expression...

jps

Frédéric Sigonneau wrote:

Bonjour,

Retour après dissipation des brumes festivales...


bon, ben , j'avais donc mal lu la présentation de Serpent73 et c'est
sûrement pas
aujourd'hui que je me sens capable de la réétudier malgré les
esseuplications
complémentaires de FS que je remercie au passage...mais on reste bien
d'accord, du moins
je l'espère, qur le fait que ce système ne permettra jamais d'aller
pêcher par macro des
infos dans le modèle, certes incrémenté, ainsi ouvert...


Les deux procédures dont au sujet desquelles on cause n'ont pas d'autre objet
que de modifier la valeur d'une cellule nommée du modèle. Elles pourraient bien
sûr en profiter pour faire autre chose mais ce n'est pas le cas. Quelles infos
pourraient être "pêchées" alors qu'elles ne devraient pas l'être (si je
comprends correctement votre remarque) ?

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 !

??? (notre pape à tous notera -s'il n'a pas trop la tête dans le seau-
que ces 3 points d'interrogation seront ma nouvelle signature en 2004
puisqu'il a bien voulu m'appeler ainsi le dernier jour de 2003)

Frédéric Sigonneau wrote:

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