-----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 !
|
.
-----Message d'origine-----
Un exemple ici:
http://dj.joss.free.fr/faq.htm#numFacture
Daniel
"coinche" <coinche@discussions.microsoft.com> a écrit
dans le message de news:
09ce01c3cef0$c1792200$a501280a@phx.gbl...
| 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 !
|
.
-----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 !
|
.
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
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
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
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
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)
anonymous@discussions.microsoft.com 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
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
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+
JLucune 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
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)
anonymous@discussions.microsoft.com 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
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+
JLucune 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
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
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
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
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+
JLucune 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
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)
anonymous@discussions.microsoft.com 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
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+
JLucune 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
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+
JLucune 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
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)
anonymous@discussions.microsoft.com 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
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+
JLucune 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
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+
JLucune 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
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)
anonymous@discussions.microsoft.com 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
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+
JLucune 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