Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Word - Probleme macro et protection formulaire

4 réponses
Avatar
benco
bonsoir j'ai fait un formualire (type facture, devis) qui se numerote
automatiquement et crée une copie. Ce numero se met dans l'en tete de page.

Le probleme c'est que sur cet imprimé, il y a des champs (case à cocher et
texte), afin de les rendre valident, je dois mettre la protection du
formulaire. Mais si je mets cette protection, ma macro ne fonctionne plus!!!!

Si quelqu'un pouvait me dire, si je n'ai pas pris la meilleur des methodes ?
si il a deja concu un imprimé de ce type ? me dire ce que je dois faire pour
eviter mon probleme ? j'aurais bien mis ce numero ailleurs mais impossible de
le positionner exactement là où je veux !! je ne sais pas comment faire
(connais pas le code) pour donner des coordonnés, sous Word avecVBA, à ce
numero pour qu'il se mette au bon endroit.

Voici mon code :
Code:
num = ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value
num = num + 1
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value = num
Selection.TypeText Text:="N° " & num & /2006
num = Right("0000" & num, 4)
SendKeys "o"
ActiveDocument.SaveAs FileName:="N" & num & ".doc"
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

4 réponses

Avatar
Anacoluthe
Bonjour !

'benco' nous a écrit ...
bonsoir j'ai fait un formualire (type facture, devis) qui se numerote
automatiquement et crée une copie. Ce numero se met dans l'en tete de page.
Le probleme c'est que sur cet imprimé, il y a des champs (case à cocher et
texte), afin de les rendre valident, je dois mettre la protection du
formulaire. Mais si je mets cette protection, ma macro ne fonctionne plus!!!!


Les macros, automatiques ou non, fonctionnent très bien
dans un formulaire protégé. Là n'est pas le problème.

Mais votre macro ne peut pas vouloir écrire dans la partie /protégée/
du document !!! Il suffit dans ce cas de lever la protection le temps de
modifier le document :
ActiveDocument.Unprotect ' je déprotège le document
..... ici l'écriture du N° automatique dans le document
' et je reprotège le document :
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

Concernant l'emplacement du numéro, le plus simple est d'aller le mettre
dans un signet.

Anacoluthe
« On se protège des autres au lieu de se protéger de soi-même. »
- Michel RANDOM

Avatar
benco
bonsoir,

c'est bon ma numerotation s'effectue correctement par contre elle se met sur
les 2 pages, je cherche donc à ne l'avoir que sur la premiere feuille. Si
quelqu'un connait le code, merci


par ailleurs, à chaque ouverture, il crée un ".doc", qui permet d'etre une
sauvegarde, mais si en cas d'erreur apres ouverture, je decide de supprimer
le ".doc", et que je rouvre de nouveau le modele, la numerotation ne tient
pas compte de la suppression et continue la numerotation +1. Il y a donc un
trou dans les numeros !! si quelqu'un connait un truc ? merci




bonsoir j'ai fait un formualire (type facture, devis) qui se numerote
automatiquement et crée une copie. Ce numero se met dans l'en tete de page.

Le probleme c'est que sur cet imprimé, il y a des champs (case à cocher et
texte), afin de les rendre valident, je dois mettre la protection du
formulaire. Mais si je mets cette protection, ma macro ne fonctionne plus!!!!

Si quelqu'un pouvait me dire, si je n'ai pas pris la meilleur des methodes ?
si il a deja concu un imprimé de ce type ? me dire ce que je dois faire pour
eviter mon probleme ? j'aurais bien mis ce numero ailleurs mais impossible de
le positionner exactement là où je veux !! je ne sais pas comment faire
(connais pas le code) pour donner des coordonnés, sous Word avecVBA, à ce
numero pour qu'il se mette au bon endroit.

Voici mon code :
Code:
num = ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value
num = num + 1
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value = num
Selection.TypeText Text:="N° " & num & /2006
num = Right("0000" & num, 4)
SendKeys "o"
ActiveDocument.SaveAs FileName:="N" & num & ".doc"
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument




Avatar
Geo

par ailleurs, à chaque ouverture, il crée un ".doc", qui permet d'etre une
sauvegarde, mais si en cas d'erreur apres ouverture, je decide de supprimer
le ".doc", et que je rouvre de nouveau le modele, la numerotation ne tient
pas compte de la suppression et continue la numerotation +1. Il y a donc un
trou dans les numeros !! si quelqu'un connait un truc ? merci


Corriger l'insertion automatique à la main.
Ça me parait le plus simple.

--
A+

Avatar
benco
bonjour, j'y suis presque, mais j'ai un debigage sur la derniere ligne de
code, il me met " Erreur d'exe 4641 L'instruction ToolsProtectDocument est
actuellement désactivée"

voici mon code

Private Sub CommandButton1_ Click

num = ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value
num = num + 1

ActiveDocument.Unprotect
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
ActiveDocument.AttachedTemplate.AutoTextEntries("numéro").Value = num
Selection.TypeText Text:="N° " & num & /2006
num = Right("0000" & num, 4)
SendKeys "o"
ActiveDocument.SaveAs FileName:="N" & num & ".doc"
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True 'meme
avec False ça ne marche pas

End Sub



Bonjour !

'benco' nous a écrit ...
bonsoir j'ai fait un formualire (type facture, devis) qui se numerote
automatiquement et crée une copie. Ce numero se met dans l'en tete de page.
Le probleme c'est que sur cet imprimé, il y a des champs (case à cocher et
texte), afin de les rendre valident, je dois mettre la protection du
formulaire. Mais si je mets cette protection, ma macro ne fonctionne plus!!!!


Les macros, automatiques ou non, fonctionnent très bien
dans un formulaire protégé. Là n'est pas le problème.

Mais votre macro ne peut pas vouloir écrire dans la partie /protégée/
du document !!! Il suffit dans ce cas de lever la protection le temps de
modifier le document :
ActiveDocument.Unprotect ' je déprotège le document
...... ici l'écriture du N° automatique dans le document
' et je reprotège le document :
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

Concernant l'emplacement du numéro, le plus simple est d'aller le mettre
dans un signet.

Anacoluthe
« On se protège des autres au lieu de se protéger de soi-même. »
- Michel RANDOM