Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Numéro Facture automatique ?

839 views
Skip to first unread message

Bruno Bonnet

unread,
Apr 17, 2000, 3:00:00 AM4/17/00
to
Bonjour à tous et à toutes,

Je voudrais savoir s'il existait une macro, permettant defaire afficher
directement un numéro de facture, lorsque l'on crée une nouvelle facture
dans un tableau de facturation.

Georges Lucas

unread,
Apr 18, 2000, 3:00:00 AM4/18/00
to
Bonjour,

Il n'existe pas de fonctionnalité toute faite dans Excel pour ce faire ,
mais il est toujours possible de développer une petite macro pour ajouter
automatiquement ces numeros , malheuresement je ne l'ai pas encore créée.(Je
pense que cette macro est à la portée de beaucoup).

Bonne journée

Georges Lucas
Bruno Bonnet <bru...@free.fr> a écrit dans le message :
M5KK4.221$ln.9...@nnrp2.proxad.net...

Sabatier

unread,
Apr 18, 2000, 3:00:00 AM4/18/00
to
bonjour bruno
ces bandes d'ingrats ne pensant qu'à régler le problème du plug-in de ce
non moins ingrat de laurent, je vais, moi, modeste grappilleur de macros
beaujolaises, tenter de t'aider
j'imagine que tu as un fichier "facture.xls" (ou autre nom) reprenant
les éléments fixes de celle-ci
dans ce fichier, tu sélectionnes la cellule où tu souhaites voir
apparaître le n° de ta facture et tu fais Insertion/Nom/Définir et tu
tapes dans le cartouche "Noms dans le classeur" numeroFacture (par
exemple) et tu fais OK
imaginons ensuite que tu veuilles que le premier n° de ta facture soit
100001 (ça fait plus sérieux que 1 tout seul!)
tu tapes dans ta cellule baptisée "numerofacture" le nombre 100001
ensuite tu ouvres le VBE en faisant Alt+F11
dans la fenêtre de gauche tu dois avoir VBAproject(facture.xls) (ou
autre nom de ton fichier)
tu double cliques sur ThisWorkbook et dans le module qui apparaît dans
la partie gauche du VBE tu colles (ou écris) lles lignes ci-dessous

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
Range("numerofacture") = Range("numerofacture") + 1
End Sub

tu reviens à ton fichier excel, tu enregistres et tu fermes
et à partir de là chaque fois que tu ouvriras ton fichier "facture.xls"
tu verras le nombre augmenté d'une unité
il te suffira une fois ta facture rédigée de faire un "enregistre sous"
dans la mesure où tu conserves un fichier pour chaque facture
fus-je assez clair?
j'espère
cordialement
jps (du gouleyant beaujolais)

PS d'autres plus fortiches te donneront surement d'autres systèmes

Sabatier

unread,
Apr 18, 2000, 3:00:00 AM4/18/00
to
ne te fatigue pas georges j'ai fait ma petite céline Brien juste après
ton message que je découvre mais, si tu n'y vois pas d'inconvénient, je
garderai les mercis pour moi seul ; par contre, je t'offrirai un p'tit
coup de beaujolais

cordialement
jps (du gouleyant beaujolais)

Georges Lucas wrote:
>
> Bonjour,
>
> Il n'existe pas de fonctionnalité toute faite dans Excel pour ce faire ,
> mais il est toujours possible de développer une petite macro pour ajouter
> automatiquement ces numeros , malheuresement je ne l'ai pas encore créée.(Je
> pense que cette macro est à la portée de beaucoup).
>
> Bonne journée
>
> Georges Lucas
> Bruno Bonnet <bru...@free.fr> a écrit dans le message :
> M5KK4.221$ln.9...@nnrp2.proxad.net...

Céline Brien

unread,
Apr 18, 2000, 3:00:00 AM4/18/00
to
Bonjour,
Je m'adresse à tous, plus ou moins fortiches...
J'ai créé le classeur et la macro.
Si j'enregistre en tant que fichier Excel et utilise toujours le même
fichier, le nombre s'incrémente d'une fois à l'autre.
Si j'enregistre le classeur en tant que modèle, ce que je préfère, le nombre
ne s'incrémente pas lorsque j'utilise le modèle.
Une solution ?
Céline Brien
Formatrice en bureautique

"Sabatier" <jps...@club-internet.fr> a écrit dans le message news:
38FC2DBD...@club-internet.fr...

> cordialement
> jps (du gouleyant beaujolais)
>

> PS d'autres plus fortiches te donneront surement d'autres systèmes
>
> Bruno Bonnet wrote:
> >

Eric Jeanne

unread,
Apr 18, 2000, 3:00:00 AM4/18/00
to
Céline,

Je n'arrive pas à reproduire le problème.
Ni en ouvrant le classeur en tant que modèle, ni en créant un classeur
normal à partir du modèle, tant à la mimine que par macro... Autrment dit,
la cellule numerofacture s'incrémente bien à chaque fois. Quid ?

Eric Jeanne
Céline Brien <bri...@intlaurentides.qc.ca> a écrit dans le message :
udDHvcWq$GA....@cppssbbsa02.microsoft.com...

Sabatier

unread,
Apr 19, 2000, 3:00:00 AM4/19/00
to
eric
l'association que j'ai faite avec céline m'oblige à te dire qu'elle a
raison et que de ce fait tu as tort (sauf si tous les deux errons dans
les brouillards de l'incompréhension et du parc des laurentides réunis)
si tu fais un modèle, il s'ouvrira à chaque fois avec le même numéro
essaie que, comme on dit en auvergne et tu verras
c'est pour cela que je disais qu'il faut créer un fichier .xls avec les
macros (donc la cellule s'incrémentera à chaque ouverture puisqu'il sera
enregistré à la fermeture) mais faire un "enregistrer sous" de la
facture une fois celle-ci faite
hélas ce système ne permet pas un non-enregistrement de la facture pour
impression seulement par exemple)

cordialement
jps (du gouleyant beaujolais)

Eric Jeanne

unread,
Apr 19, 2000, 3:00:00 AM4/19/00
to
C'est tellement évident que je n'avais pas compris ça comme ça. Je pensais
que la cellule ne se mettait pas à jour à l'ouverture du modèle. Mais bien
évidemment si on n'enregitre pas le modèle en tant que tel et qu'on le
réouvre après, on repart avec la valeur initiale. Idem avec un classeur xls
d'ailleurs. Il faudrait donc pour persévérer dans cette voie ouvrir le
modèle en tant que modèle et non générer un classeur xls : mais alors on
perd l'intérêt d'un modèle. L'autre voie serait peut-être d'enregistrer le
classeur xls d'une part (si on veut) et d'écraser le modèle avec un nouveau
modèle après incrémentation de numérofacture.

--
Eric Jeanne
Sabatier <jps...@club-internet.fr> a écrit dans le message :
38FCEA27...@club-internet.fr...

Laurent Longre

unread,
Apr 19, 2000, 3:00:00 AM4/19/00
to

Ca fait un peu "bricolage", mais il est possible d'incrémenter le
compteur dans le modèle à chaque création d'un nouveau classeur et de
l'enregistrer ensuite.

Par exemple, dans le module ThisWorkbook du classeur modèle XLT (ici,
Facture.xlt):

Const Modèle As String = "Facture.xlt"

Private Sub Workbook_Open()
On Error GoTo Erreur
If Me.Path <> "" Then Exit Sub
Application.ScreenUpdating = False
With Workbooks.Open(Application.TemplatesPath _
& "\" & Modèle, Editable:=True)
With .Names("Numéro").RefersToRange
.Value = .Value + 1
End With
.Close True
End With
Exit Sub
Erreur:
MsgBox Err.Description, vbExclamation
End Sub

Dans cet exemple, la constante "Modèle" contient le nom du modèle, qui
doit se trouver dans le répertoire par défaut des modèles. La cellule
contenant le numéro de la facture dans le modèle a comme nom "Numéro".
Le numéro n'est incrémenté qu'à la création d'une nouvelle facture, non
pas quand celle-ci est réouverte par la suite.

Laurent

Eric Jeanne a écrit :

Frédéric Sigonneau

unread,
Apr 19, 2000, 3:00:00 AM4/19/00
to
"Céline Brien" a écrit :

> Si j'enregistre le classeur en tant que modèle, ce que je préfère, le nombre
> ne s'incrémente pas lorsque j'utilise le modèle.
> Une solution ?

En modifiant, dans le classeur modèle (.xlt), les procédures
Workbook_Open et Workbook_BeforeClose comme ci-dessous, ça devrait
fonctionner. Le modèle conserve l'incrémentation lorsque la facture est
enregistrée, mais revient au numéro précédent si la facture est fermée
sans être enregistrée. Seuls les numéros effectivement utilisés pour des
factures enregistrées sont utilisés.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

chemXlt = Application.TemplatesPath & "testFact.xlt"
If ActiveWorkbook.Path = "" Then
Set wbk = Workbooks.Open(chemXlt)
With wbk.ActiveSheet
.Range("NumFact") = .Range("NumFact") - 1
End With
wbk.Save
wbk.Close
End If
End Sub

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

FS
--
Frédéric Sigonneau
Gestions de temps : http://perso.wanadoo.fr/frederic.sigonneau
Time managements : http://perso.wanadoo.fr/frederic.sigonneau/index2.htm


Céline Brien

unread,
Apr 19, 2000, 3:00:00 AM4/19/00
to
Bonjour Frédéric,
Votre solution fonctionne très bien sur mon poste de travail.
Je vais la tester en réseau.
J'ai hâte de vérifier ce qui se passe si une personne ouvre le modèle alors
qu'une autre personne l'utilise déjà.
Je crois que si les utilisateurs enregistrent dès l'ouverture du modèle, il
n'y aura pas de problème.
Le deuxième utilisateur aura un numéro incrémenté par rapport au premier.
À suivre...
Merci beaucoup,

Céline Brien
Formatrice en bureautique

"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message
news: 38FD7981...@wanadoo.fr...

Céline Brien

unread,
Apr 26, 2000, 3:00:00 AM4/26/00
to
Bonjour Frédéric,
J'ai finalement pu tester le modèle en réseau.
Il s'agit d'un bon de commande et non d'une facture.
Nous avons inséré le numéro 2000 dans la cellule nommée du modèle.
Le résultat fut vraiment bizarre !
Voici l'histoire telle que vécue...
Un premier utilisateur ouvre le modèle, le numéro s'incrémente, il devient
2001, il enregistre son classeur et le ferme.
Le même utilisateur ouvre de nouveau le modèle, le numéro s'incrémente, il
devient 2002, il enregistre son classeur et le ferme.
Un deuxième utilisateur, à partir d'un autre poste, ouvre le modèle pour la
première fois, il retrouve le numéro de départ 2000 !!!!!
Le premier utilisateur ouvre de nouveau le modèle, le numéro s'incrémente,
il devient 2003 !
Le tout s'est bien terminé, ma cliente ayant finalement décidé d'enregistrer
un modèle par utilisateur et d'ajouter les initiales des utilisateurs à
gauche de la cellule nommée.
Exemple : MP- 2000.
Elle était contente de pouvoir ainsi associer chaque bon de commande à son
créateur.
J'ai tout de même une question !
Où s'enregistre le numéro incrémenté ???
Salutations,

Frédéric Sigonneau

unread,
Apr 27, 2000, 3:00:00 AM4/27/00
to
Salut à toi Céline,

Tant mieux si tout se termine bien.
Je n'avais pas pensé à une utilisation en réseau et, malgré ma première
réaction, je vois en relisant ma procédure que ça ne pouvait pas
marcher.
Admettons que le modèle s'appelle "testFact.xlt". Sa cellule nommée
"numFact" contient "2000".
La procédure Workbook_Open provoque la création d'une copie du modèle
(testFact1). Ce classeur est sans extension parce que non enregistré.
Son chemin est vide. D'où le test
--> If ActiveWorkbook.Path = "" Then
qui vérifie qu'on ne rouvre pas un fichier déjà enregistré (qui ne doit
donc pas changer de numéro).
Ensuite la cellule de ce classeur testFact1 qui contient le numéro est
incrémentée
--> [numFact] = [numFact] + 1
numFact est maintenant égal à 2001 et le classeur numFact1 est marqué
comme enregistré
--> ActiveWorkbook.Saved = True
Ceci évite que, si on referme numFact1 à ce stade pour une raison
quelconque, Excel ne demande si on veut enregistrer les changements (ça
agace inutilement l'utilisateur qui ne comprend pas pourquoi alors qu'il
n'a rien fait dans le classeur).
Enfin ce classeur numFact1 est enregistré comme modèle
--> ActiveWorkbook.SaveCopyAs _
(Application.TemplatesPath &"testFact.xlt")
Cette ligne répond à ta question et donne l'explication de ta
mésaventure.
numFact1 (qui contient le numéro 2001) est enregistré comme modèle sous
le nom de "numFact.xlt". Ce nouveau modèle (avec numéro 2001) remplace
purement et simplement le précédent (qui contenait 2000).
C'est donc en fait le modèle lui-même qui conserve les numéros au fur et
à mesure de leur incrémentation.
Par ailleurs, "Application.TemplatesPath" renvoie le chemin *local* du
dossier des modèles. Ton premier utilisateur ouvrait donc au départ le
modèle réseau (2000) et cette ouverture renvoyait un modèle incrémenté
(2001) dans le dossier modèle de son propre disque dur. Lequel
continuait bien à s'incrémenter, mais pour lui seul.
La solution aurait été je pense (je n'ai pas de moyen de le vérifier et
c'est trop tard maintenant :), de remplacer dans les 2 procédures
"Application.TemplatesPath" par "Application.NetworkTemplatesPath", qui
d'après l'aide "Renvoie le chemin d'accès réseau où les modèles sont
stockés."

Cordialement
FS

"Céline Brien" a écrit :

Céline Brien

unread,
Apr 27, 2000, 3:00:00 AM4/27/00
to
Bonjour Frédéric,
Merci beaucoup de toutes ces explications très très claires.
En prévision du jour où un client voudra un seul modèle pour tous les
utilisateurs, je vais réécrire la macro et la tester de nouveau.
À suivre,

Céline Brien
Formatrice en bureautique

"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message

news: 3908935C...@wanadoo.fr...

0 new messages