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.
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...
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
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...
"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:
> >
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...
--
Eric Jeanne
Sabatier <jps...@club-internet.fr> a écrit dans le message :
38FCEA27...@club-internet.fr...
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 :
> 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
"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message
news: 38FD7981...@wanadoo.fr...
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 :
"Frédéric Sigonneau" <frederic....@wanadoo.fr> a écrit dans le message
news: 3908935C...@wanadoo.fr...