OVH Cloud OVH Cloud

Numérotation automatique à partir d'un modèle

9 réponses
Avatar
olivier.lemaitre1
bonjour

Excusez moi de revenir sur un sujet r=E9guli=E8rement visit=E9...
J'ai pu commencer =E0 travailler avec les informations de la FAQ
http://faqword.free.fr/articles.php?lng=3Dfr&pg=3D636
mais je n'arrive pas =E0 faire exactement ce que je veux faire...
J'aimerais que le num=E9ro incr=E9ment=E9 puisse par exemple s'afficher au
milieu d'un texte et en particulier dans un tableau,
Je pensais donc que le num=E9ro incr=E9ment=E9 serait disponible dans un
champ =E0 ins=E9rer mais je ne le retrouve pas.

Si cela peut aider, voici le code de la macro de la FAQ :(avec les N=B0
de lignes en plus pour que vous puissiez vous y r=E9f=E9rer au cas o=F9)

1 Sub AutoNew ()
2 num =3D
ActiveDocument.AttachedTemplate.AutoTextEntries("num=E9ro").Value
3 num =3D num + 1
4 ActiveDocument.AttachedTemplate.AutoTextEntries("num=E9ro").Value =3D
num
5 Selection.TypeText Text:=3D"Bon de commande No " & num
6 num =3D Right("0000" & num, 4)
7 SendKeys "o"
8 ActiveDocument.SaveAs FileName:=3D"Bon de commande" & num & ".doc"
9 End Sub=20


Merci d'avance

Olivier

9 réponses

Avatar
Circé
Bonjour olivier

Tout d'abord, évite de mettre ton adresse mail sur un forum... les
robots n'en ont fait qu'une bouchée ! A toi le SPAM...

Cette macro crée en fait une insertion automatique qui va
automatiquement s'incrémenter.

Donc, pour récupérer ce numéro à n'importe quel endroit de ton
document, il suffit que tu insères l'insertion auto "numéro". Tu peux
prévoir un bouton sur la barre d'outils de ton modèle.

Circé
http://faqword.free.fr


olivier avait annoncé :
bonjour

Excusez moi de revenir sur un sujet régulièrement visité...
J'ai pu commencer à travailler avec les informations de la FAQ
http://faqword.free.fr/articles.php?lng=fr&pgc6
mais je n'arrive pas à faire exactement ce que je veux faire...
J'aimerais que le numéro incrémenté puisse par exemple s'afficher au
milieu d'un texte et en particulier dans un tableau,
Je pensais donc que le numéro incrémenté serait disponible dans un
champ à insérer mais je ne le retrouve pas.

Si cela peut aider, voici le code de la macro de la FAQ :(avec les N°
de lignes en plus pour que vous puissiez vous y référer au cas où)

1 Sub AutoNew ()
2 num > ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value
3 num = num + 1
4 ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value > num
5 Selection.TypeText Text:="Bon de commande No " & num
6 num = Right("0000" & num, 4)
7 SendKeys "o"
8 ActiveDocument.SaveAs FileName:="Bon de commande" & num & ".doc"
9 End Sub


Merci d'avance

Olivier


Avatar
Anacoluthe
Bonjour !

'' nous a écrit ...
Excusez moi de revenir sur un sujet régulièrement visité...
J'ai pu commencer à travailler avec les informations de la FAQ
http://faqword.free.fr/articles.php?lng=fr&pgc6
mais je n'arrive pas à faire exactement ce que je veux faire...
J'aimerais que le numéro incrémenté puisse par exemple s'afficher au
milieu d'un texte et en particulier dans un tableau,
Je pensais donc que le numéro incrémenté serait disponible dans un
champ à insérer mais je ne le retrouve pas.


Circé la magicienne a parfaitement raison mais il est possible
que ça ne soit pas aussi simple qu'elle dit :-)

Cette macro conserve dans le modèle une insertion automatique (IA)
'Numéro' qui est incrémentée à chaque création d'un nouveau
document.

Si vous voulez inscrire le Numéro dans le document, nous
sommes d'accord, il suffit d'insérer l'IA Numéro
par exemple en écrivant Numéro{F3} ou éventuellement avec
un bouton comme a dit Circé. Le numéro du bon de commande
est inséré 'en dur' . Et c'est parfait.

Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle), il faut insérer
dans le modèle là où vous le voulez un _champ_ d'IA :
{ AUTOTEXT "Numéro" } et le mettre à jour à la
fin de sa macro AutoNew (ActiveDocument.Fields.Update)

C'est là que peut survenir un problème : ce champ est
un numéro 'mou' . Imaginons qu'on ouvre à nouveau le bon
de commande n°25 alors qu'on vient de créer le n°78.
À la première mise à jour des champs (à l'impression
par exemple) le bon n°25 va porter le n°78 !
Pour éviter ça il faut 'déchamper' ;-) le champ AUTOTEXT
sitôt après sa mise à jour et le mieux est de le
faire dès cette macro AutoNew avec une commande Unlink

Évidemment c'est un peu moins simple comme ça, mais revenez
si ce n'est pas assez clair.

Anacoluthe
« Il y a trop de mou dans ce qui est dur
et trop de dur dans ce qui est mou. »
- Jean-Pierre CHEVENEMENT

Avatar
Circé
Bonjour anacoluthe,

Effectivement je n'avais pas osé parler du champ AUTOTEXT à cause du
problème que tu évoques.

Si on déchampe, effectivement, il n'y a plus de souci !! ;))

Circé qui existe encore ;)

Anacoluthe a exprimé avec précision :
Bonjour !

'' nous a écrit ...
Excusez moi de revenir sur un sujet régulièrement visité...
J'ai pu commencer à travailler avec les informations de la FAQ
http://faqword.free.fr/articles.php?lng=fr&pgc6
mais je n'arrive pas à faire exactement ce que je veux faire...
J'aimerais que le numéro incrémenté puisse par exemple s'afficher au
milieu d'un texte et en particulier dans un tableau,
Je pensais donc que le numéro incrémenté serait disponible dans un
champ à insérer mais je ne le retrouve pas.


Circé la magicienne a parfaitement raison mais il est possible
que ça ne soit pas aussi simple qu'elle dit :-)

Cette macro conserve dans le modèle une insertion automatique (IA)
'Numéro' qui est incrémentée à chaque création d'un nouveau
document.

Si vous voulez inscrire le Numéro dans le document, nous
sommes d'accord, il suffit d'insérer l'IA Numéro
par exemple en écrivant Numéro{F3} ou éventuellement avec
un bouton comme a dit Circé. Le numéro du bon de commande
est inséré 'en dur' . Et c'est parfait.

Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle), il faut insérer
dans le modèle là où vous le voulez un _champ_ d'IA :
{ AUTOTEXT "Numéro" } et le mettre à jour à la
fin de sa macro AutoNew (ActiveDocument.Fields.Update)

C'est là que peut survenir un problème : ce champ est
un numéro 'mou' . Imaginons qu'on ouvre à nouveau le bon
de commande n°25 alors qu'on vient de créer le n°78.
À la première mise à jour des champs (à l'impression
par exemple) le bon n°25 va porter le n°78 !
Pour éviter ça il faut 'déchamper' ;-) le champ AUTOTEXT
sitôt après sa mise à jour et le mieux est de le
faire dès cette macro AutoNew avec une commande Unlink

Évidemment c'est un peu moins simple comme ça, mais revenez
si ce n'est pas assez clair.

Anacoluthe
« Il y a trop de mou dans ce qui est dur
et trop de dur dans ce qui est mou. »
- Jean-Pierre CHEVENEMENT



Avatar
olivier

Cette macro conserve dans le modèle une insertion automatique (IA)
'Numéro' qui est incrémentée à chaque création d'un nouveau
document.

Si vous voulez inscrire le Numéro dans le document, nous
sommes d'accord, il suffit d'insérer l'IA Numéro
par exemple en écrivant Numéro{F3} ou éventuellement avec
un bouton comme a dit Circé. Le numéro du bon de commande
est inséré 'en dur' . Et c'est parfait.


cette solution pourrait presque aller, enchangeant le nom numéro en un
nouveau nom numérotaperF3 (pour se souvenir de ce qu'il faut faire ;-)
Mais on a le même problème qu'en dessous si on tape F3 après avoir
créé d'autre documents...

Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle),


Tout à fait !!

il faut insérer
dans le modèle là où vous le voulez un _champ_ d'IA :
{ AUTOTEXT "Numéro" } et le mettre à jour à la
fin de sa macro AutoNew (ActiveDocument.Fields.Update)


j'ai rajouté cette ligne au bout de la macro (après la ligne 8) mais
cela me fourni en final ce message:
"Erreur! Signet non défini. "
...
je n'ai donc pas passé le cap pour avoir le problème...

je me pose cependant une question (sans réponse) porquoi ne pourrions
nous pas avoir un champ qui se met à jour seulement lors de la
création d'un document (comme les dates, où il peut y avoir cette
possibilité)

olivier


C'est là que peut survenir un problème : ce champ est
un numéro 'mou' . Imaginons qu'on ouvre à nouveau le bon
de commande n°25 alors qu'on vient de créer le n°78.
À la première mise à jour des champs (à l'impression
par exemple) le bon n°25 va porter le n°78 !
Pour éviter ça il faut 'déchamper' ;-) le champ AUTOTEXT
sitôt après sa mise à jour et le mieux est de le
faire dès cette macro AutoNew avec une commande Unlink

Évidemment c'est un peu moins simple comme ça, mais revenez
si ce n'est pas assez clair.

Anacoluthe



Avatar
olivier

Cette macro conserve dans le modèle une insertion automatique (IA)
'Numéro' qui est incrémentée à chaque création d'un nouveau
document.

Si vous voulez inscrire le Numéro dans le document, nous
sommes d'accord, il suffit d'insérer l'IA Numéro
par exemple en écrivant Numéro{F3} ou éventuellement avec
un bouton comme a dit Circé. Le numéro du bon de commande
est inséré 'en dur' . Et c'est parfait.


cette solution pourrait presque aller, enchangeant le nom numéro en un
nouveau nom numérotaperF3 (pour se souvenir de ce qu'il faut faire ;-)
Mais on a le même problème qu'en dessous si on tape F3 après avoir
créé d'autre documents...

Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle),


Tout à fait !!

il faut insérer
dans le modèle là où vous le voulez un _champ_ d'IA :
{ AUTOTEXT "Numéro" } et le mettre à jour à la
fin de sa macro AutoNew (ActiveDocument.Fields.Update)


j'ai rajouté cette ligne au bout de la macro (après la ligne 8) mais
cela me fourni en final ce message:
"Erreur! Signet non défini. "
...
je n'ai donc pas passé le cap pour avoir le problème...

je me pose cependant une question (sans réponse) porquoi ne pourrions
nous pas avoir un champ qui se met à jour seulement lors de la
création d'un document (comme les dates, où il peut y avoir cette
possibilité)

olivier


C'est là que peut survenir un problème : ce champ est
un numéro 'mou' . Imaginons qu'on ouvre à nouveau le bon
de commande n°25 alors qu'on vient de créer le n°78.
À la première mise à jour des champs (à l'impression
par exemple) le bon n°25 va porter le n°78 !
Pour éviter ça il faut 'déchamper' ;-) le champ AUTOTEXT
sitôt après sa mise à jour et le mieux est de le
faire dès cette macro AutoNew avec une commande Unlink

Évidemment c'est un peu moins simple comme ça, mais revenez
si ce n'est pas assez clair.

Anacoluthe



Avatar
Anacoluthe
Bonjour !

'olivier' nous a écrit ...
Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle),
Tout à fait !!

je me pose cependant une question (sans réponse) porquoi ne pourrions
nous pas avoir un champ qui se met à jour seulement lors de la
création d'un document (comme les dates, où il peut y avoir cette
possibilité)


J'ai modifié un petit peu la macro citée dans la faq.
Cette macro est à placer dans un modèle par exemple
'Bon de commande.dot'
Dans ce modèle placer un champ { AUTOTEXT "numéro" }
aux endroits où doit figurer le numéro du bon de commande.
La macro se charge de créer l'IA si elle n'existe pas.
Il est ainsi facile de réinitialiser la numérotation en
supprimant l'IA 'numéro' dans
Outils / Modèles et compléments / Organiser / Insertion auto
La macro se charge de mettre à jour le numéro et de
déchamper (remplacer le champ par son texte) l'IA dans
chaque nouveau document créé avec ce modèle.
C'est mieux comme ça ?


' -----------------------------------------------------
Sub AutoNew()
' Utilisation d'une Insertion automatique 'Numéro'
' incrémentée à chaque création d'un document

Dim Num As Integer
Dim oIA As AutoTextEntry
Dim oChamp As Field

' Lire le Numéro
With ActiveDocument.AttachedTemplate
For Each oIA In .AutoTextEntries
If oIA.Name = "numéro" Then Num = Val(oIA.Value) + 1
Next oIA

' Si Numéro n'existe pas le créer dans le modèle
If Num = 0 Then
Num = Abs(Val(InputBox("Entrez un premier numéro", _
"Initialisation du compteur")))
.AutoTextEntries.Add Name:="numéro", _
Range:=Selection.Range
End If

' Enregistrer le numéro dans le modèle
.AutoTextEntries("numéro").Value = Str(Num)
.Save
End With

' Mettre à jour et déchamper les champs AutoText
For Each oChamp In ActiveDocument.Fields
If oChamp.Type = wdFieldAutoText Then
oChamp.Update: oChamp.Unlink
End If
Next oChamp

Set oIA = Nothing
Set oChamp = Nothing
End Sub
' -----------------------------------------------------

Anacoluthe
« Bonjour chez vous, numéro 6 »
- Patrick Mc GOOHAN


Avatar
olivier
Bonjour Anacoluthe

Qu'ai-je fait ?
J'ai créé un modèle avec le champ numéro comme AUTOTEXT
J'ai fait une insertion auto pour créer numéro
j'ai collé la macro dans le VB

j'ai lancé un nouveau document
à la place du champ, il a écrit "Erreur! Signet non défini."
et m'a ouvert une fenetre pour me demander un numéro (normal puisque
je n'en avais pas donné au départ)
je donne un Numéro..
et j'essaye de mettre à jour le champ, rien à faire
je rouvre une nouveau document :
même message mais il ne me demande pas de rentrer un num (normal
puisque je l'ai déjà fait)

je suis chez moi en W97... est ce que cela change quelque chose ?

merci encore

Olivier

Bonjour !

'olivier' nous a écrit ...
Mais si vous entendez que Numéro soit /déjà/ présent dans le
nouveau document (c'est le but du modèle),
Tout à fait !!

je me pose cependant une question (sans réponse) porquoi ne pourrions
nous pas avoir un champ qui se met à jour seulement lors de la
création d'un document (comme les dates, où il peut y avoir cette
possibilité)


J'ai modifié un petit peu la macro citée dans la faq.
Cette macro est à placer dans un modèle par exemple
'Bon de commande.dot'
Dans ce modèle placer un champ { AUTOTEXT "numéro" }
aux endroits où doit figurer le numéro du bon de commande.
La macro se charge de créer l'IA si elle n'existe pas.
Il est ainsi facile de réinitialiser la numérotation en
supprimant l'IA 'numéro' dans
Outils / Modèles et compléments / Organiser / Insertion auto
La macro se charge de mettre à jour le numéro et de
déchamper (remplacer le champ par son texte) l'IA dans
chaque nouveau document créé avec ce modèle.
C'est mieux comme ça ?


' -----------------------------------------------------
Sub AutoNew()
' Utilisation d'une Insertion automatique 'Numéro'
' incrémentée à chaque création d'un document

Dim Num As Integer
Dim oIA As AutoTextEntry
Dim oChamp As Field

' Lire le Numéro
With ActiveDocument.AttachedTemplate
For Each oIA In .AutoTextEntries
If oIA.Name = "numéro" Then Num = Val(oIA.Value) + 1
Next oIA

' Si Numéro n'existe pas le créer dans le modèle
If Num = 0 Then
Num = Abs(Val(InputBox("Entrez un premier numéro", _
"Initialisation du compteur")))
.AutoTextEntries.Add Name:="numéro", _
Range:=Selection.Range
End If

' Enregistrer le numéro dans le modèle
.AutoTextEntries("numéro").Value = Str(Num)
.Save
End With

' Mettre à jour et déchamper les champs AutoText
For Each oChamp In ActiveDocument.Fields
If oChamp.Type = wdFieldAutoText Then
oChamp.Update: oChamp.Unlink
End If
Next oChamp

Set oIA = Nothing
Set oChamp = Nothing
End Sub
' -----------------------------------------------------

Anacoluthe
« Bonjour chez vous, numéro 6 »
- Patrick Mc GOOHAN




Avatar
olivier
Bonjour Anacoluthe

je viens de reéssayer au travail avec un autre word... j'ai deux
nouvelles unes bonne et une mauvaise.
je commence par la mauvaise :
cela ne marche pas
la bonne
cela marche si je ne mets pas les guillemets autour de numéro après
la commande AUTOTEXT
(je réessairai donc chez moi pour W97)

c'est génial.

merci encore
éventuellement une question subsidiaire : est-il possible de saborder
la macro à la fin pour éviter qu'elle ne reste dans le nouveau
document.
(ne pas perdre du temps sur cette question)

OLivier
Avatar
Anacoluthe
Bonjour !

'olivier' nous a écrit ...
je viens de reéssayer au travail avec un autre word... j'ai deux
nouvelles unes bonne et une mauvaise.
je commence par la mauvaise :
cela ne marche pas
la bonne
cela marche si je ne mets pas les guillemets autour de numéro après
la commande AUTOTEXT
(je réessairai donc chez moi pour W97)
c'est génial.
merci encore
éventuellement une question subsidiaire : est-il possible de saborder
la macro à la fin pour éviter qu'elle ne reste dans le nouveau
document.
(ne pas perdre du temps sur cette question)


Arrghh merci de comprendre que sur ce forum Word, si vous ne
précisez pas votre version, vous êtes supposé utiliser la
dernière (nous en sommes à la version 11 avec WD2003 )

Oui ça change pour WD97 : à partir de WD2000 les noms des champs
sont passés en angliche pour tout le monde.

L'erreur 'signet non défini' vient de ce que vous avez écrit
dans WD97 { AUTOTEXT "numéro" }
au lieu de { INSERTIONAUTO "numéro" }
Si vous passez de WD97 à WD2003 ou l'inverse la traduction sera
automatique mais il faut que la première expression entrée soit
reconnue par la version Word utilisée.

Vous pouvez écrire numéro ou "numéro" mais il est conseillé
d'avoir les guillemets faciles avec les champs Word.

Inutile de vouloir 'saborder' la macro : elle reste et restera
seulement dans votre modèle de document. Tous vos documents
créés avec ce modèle ne contiennent /aucune/ macro !!!
Ouvrez un tel document sur un autre poste n'exploitant pas
ce modèle : impossible de voir la macro qui a servi à le faire.

Content de voir que vous avancez :-)

Anacoluthe
« Bonjour chez vous, numéro 6 »
- Patrick Mc GOOHAN