J'ai "commis laborieusement" (c'est le mot) un document word contenant
plusieurs tableaux dans lesquels cohabitent des champs de formulaire (de type
"nombre" – "texte") renseignés par l'utilisateur, des champs de formulaire
(de type "calcul"), des champs de formules {IF ...}, des signets de texte
"[ref,1]~" récupérant des données externes (format-police-masqué).
Le document est donc protégé et pour mettre à jour la totalité des champs je
souhaiterais utiliser la macro suivante :
Sub autoexec()
ActiveDocument.Unprotect
ActiveDocument.Fields.Update
ActiveDocument.Protect NoReset:=True, Type:= _
wdAllowOnlyFormFields
End Sub
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre"
– "texte") renseignés par l'utilisateur sont réinitialisés à vide.
Mis à part de créer une macro sélectionnant un par un uniquement les champs
nécessitant une mise à jour, n'y aurait-il pas une autre solution ?
(En effet, cette macro fonctionne, mais elle est longue d'exécution et donne
le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pendant que j'y suis, je me permets une autre question.
J'ai téléchargé sur la FAQ la superbe macro "CalculEnLigne" (merci
Anacoluthe).
Est-il envisageable d'utiliser ce code dans un champ de formulaire (type
"nombre") de telle manière que le résultat du calcul renseigné dans ce champ
(ex : 2+5-3*6/2) "prenne la place" de ce même calcul ? (me suis-je bien fait
comprendre, pas si sûr…)
Quand bien même aucune solution ne serait apportée, merci à vous tous
bénévoles éclairés.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Geo
[...]
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre" – "texte") renseignés par l'utilisateur sont réinitialisés à vide. Mis à part de créer une macro sélectionnant un par un uniquement les champs nécessitant une mise à jour, n'y aurait-il pas une autre solution ? (En effet, cette macro fonctionne, mais elle est longue d'exécution et donne le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci : Msgbox "Cliquez sur OK et allez prendre un café" Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou pas.
-- A+
[...]
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre"
– "texte") renseignés par l'utilisateur sont réinitialisés à vide.
Mis à part de créer une macro sélectionnant un par un uniquement les champs
nécessitant une mise à jour, n'y aurait-il pas une autre solution ?
(En effet, cette macro fonctionne, mais elle est longue d'exécution et donne
le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci :
Msgbox "Cliquez sur OK et allez prendre un café"
Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word
le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou
pas.
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre" – "texte") renseignés par l'utilisateur sont réinitialisés à vide. Mis à part de créer une macro sélectionnant un par un uniquement les champs nécessitant une mise à jour, n'y aurait-il pas une autre solution ? (En effet, cette macro fonctionne, mais elle est longue d'exécution et donne le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci : Msgbox "Cliquez sur OK et allez prendre un café" Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou pas.
-- A+
JMM21
Bonjour,
D'abord merci pour votre aide.
J'avais déjà tenté ce code Application.ScreenUpdating = False, mais il a un effet très curieux sur l'affichage (c'est pire). C'est peut-être lié aux codes de ma macro ActiveDocument.FormFields(nom_signet).Select Selection.Fields.Update ou ActiveDocument.Bookmarks(nom_signet).Select Selection.Fields.Update qui s'éxécute une cinquantaine de fois?
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Tant pis
Cordialement
[...]
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre" – "texte") renseignés par l'utilisateur sont réinitialisés à vide. Mis à part de créer une macro sélectionnant un par un uniquement les champs nécessitant une mise à jour, n'y aurait-il pas une autre solution ? (En effet, cette macro fonctionne, mais elle est longue d'exécution et donne le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci : Msgbox "Cliquez sur OK et allez prendre un café" Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou pas.
-- A+
Bonjour,
D'abord merci pour votre aide.
J'avais déjà tenté ce code
Application.ScreenUpdating = False,
mais il a un effet très curieux sur l'affichage (c'est pire).
C'est peut-être lié aux codes de ma macro
ActiveDocument.FormFields(nom_signet).Select
Selection.Fields.Update
ou
ActiveDocument.Bookmarks(nom_signet).Select
Selection.Fields.Update
qui s'éxécute une cinquantaine de fois?
Je n'arrive pas non plus à mettre plusieurs
noms de signet dans le code.
Tant pis
Cordialement
[...]
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre"
– "texte") renseignés par l'utilisateur sont réinitialisés à vide.
Mis à part de créer une macro sélectionnant un par un uniquement les champs
nécessitant une mise à jour, n'y aurait-il pas une autre solution ?
(En effet, cette macro fonctionne, mais elle est longue d'exécution et donne
le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci :
Msgbox "Cliquez sur OK et allez prendre un café"
Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word
le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou
pas.
J'avais déjà tenté ce code Application.ScreenUpdating = False, mais il a un effet très curieux sur l'affichage (c'est pire). C'est peut-être lié aux codes de ma macro ActiveDocument.FormFields(nom_signet).Select Selection.Fields.Update ou ActiveDocument.Bookmarks(nom_signet).Select Selection.Fields.Update qui s'éxécute une cinquantaine de fois?
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Tant pis
Cordialement
[...]
Seulement il y a un gros "hic" : les champs de formulaire (de type "nombre" – "texte") renseignés par l'utilisateur sont réinitialisés à vide. Mis à part de créer une macro sélectionnant un par un uniquement les champs nécessitant une mise à jour, n'y aurait-il pas une autre solution ? (En effet, cette macro fonctionne, mais elle est longue d'exécution et donne le tournis à l'utilisateur qui voit défiler une à une les instructions)
Pour le tournis, ajoutez ceci : Msgbox "Cliquez sur OK et allez prendre un café" Application.ScreenUpdating = False
En plus ça accélère le traitement
On peut même faire plus fort, c'est à dire cacher Word lui-même
Pour le choix des champs à mettre à jour, comment voulez-vous que Word le sache de lui-même ? il faut bien lui dire ceux qu'il faut traiter ou pas.
-- A+
Geo
J'avais déjà tenté ce code Application.ScreenUpdating = False, mais il a un effet très curieux sur l'affichage (c'est pire).
Il est vrai qu'en Word il a l'air moins efficace que dans Excel, il faut penser à remettre True à la fin et éventuellement faire un Refresh.
C'est peut-être lié aux codes de ma macro ActiveDocument.FormFields(nom_signet).Select Selection.Fields.Update
Il vaut mieux éviter la sélection, ça doit limiter l'agitation sur l'écran :
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on peut en avoir autant qu'on veut. A moins que vous vouliez dire traiter plusieurs champs à la fois ? Si plusieurs champs sont dans un paragraphe :: ActiveDocument.Paragraphs(25).Range.Fields.Update Vous pouvez aussi le faire pour une section entière, c'est l'avantage de passer par Range et non sélection, c'est plus souple. On peut même le faire du signet a au signet b, y compris les signets placés entre, mais là si vous voulez un exemple, il faut que je teste.
-- A+
J'avais déjà tenté ce code
Application.ScreenUpdating = False,
mais il a un effet très curieux sur l'affichage (c'est pire).
Il est vrai qu'en Word il a l'air moins efficace que dans Excel, il
faut penser à remettre True à la fin et éventuellement faire un
Refresh.
C'est peut-être lié aux codes de ma macro
ActiveDocument.FormFields(nom_signet).Select
Selection.Fields.Update
Il vaut mieux éviter la sélection, ça doit limiter l'agitation sur
l'écran :
Je n'arrive pas non plus à mettre plusieurs
noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on
peut en avoir autant qu'on veut.
A moins que vous vouliez dire traiter plusieurs champs à la fois ?
Si plusieurs champs sont dans un paragraphe ::
ActiveDocument.Paragraphs(25).Range.Fields.Update
Vous pouvez aussi le faire pour une section entière, c'est l'avantage
de passer par Range et non sélection, c'est plus souple.
On peut même le faire du signet a au signet b, y compris les signets
placés entre, mais là si vous voulez un exemple, il faut que je teste.
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on peut en avoir autant qu'on veut. A moins que vous vouliez dire traiter plusieurs champs à la fois ? Si plusieurs champs sont dans un paragraphe :: ActiveDocument.Paragraphs(25).Range.Fields.Update Vous pouvez aussi le faire pour une section entière, c'est l'avantage de passer par Range et non sélection, c'est plus souple. On peut même le faire du signet a au signet b, y compris les signets placés entre, mais là si vous voulez un exemple, il faut que je teste.
-- A+
JMM21
Merci pour toutes ces précisions. Si j'ai un souci je sais où aller...
Cordialement
J'avais déjà tenté ce code Application.ScreenUpdating = False, mais il a un effet très curieux sur l'affichage (c'est pire).
Il est vrai qu'en Word il a l'air moins efficace que dans Excel, il faut penser à remettre True à la fin et éventuellement faire un Refresh.
C'est peut-être lié aux codes de ma macro ActiveDocument.FormFields(nom_signet).Select Selection.Fields.Update
Il vaut mieux éviter la sélection, ça doit limiter l'agitation sur l'écran :
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on peut en avoir autant qu'on veut. A moins que vous vouliez dire traiter plusieurs champs à la fois ? Si plusieurs champs sont dans un paragraphe :: ActiveDocument.Paragraphs(25).Range.Fields.Update Vous pouvez aussi le faire pour une section entière, c'est l'avantage de passer par Range et non sélection, c'est plus souple. On peut même le faire du signet a au signet b, y compris les signets placés entre, mais là si vous voulez un exemple, il faut que je teste.
-- A+
Merci pour toutes ces précisions.
Si j'ai un souci je sais où aller...
Cordialement
J'avais déjà tenté ce code
Application.ScreenUpdating = False,
mais il a un effet très curieux sur l'affichage (c'est pire).
Il est vrai qu'en Word il a l'air moins efficace que dans Excel, il
faut penser à remettre True à la fin et éventuellement faire un
Refresh.
C'est peut-être lié aux codes de ma macro
ActiveDocument.FormFields(nom_signet).Select
Selection.Fields.Update
Il vaut mieux éviter la sélection, ça doit limiter l'agitation sur
l'écran :
Je n'arrive pas non plus à mettre plusieurs
noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on
peut en avoir autant qu'on veut.
A moins que vous vouliez dire traiter plusieurs champs à la fois ?
Si plusieurs champs sont dans un paragraphe ::
ActiveDocument.Paragraphs(25).Range.Fields.Update
Vous pouvez aussi le faire pour une section entière, c'est l'avantage
de passer par Range et non sélection, c'est plus souple.
On peut même le faire du signet a au signet b, y compris les signets
placés entre, mais là si vous voulez un exemple, il faut que je teste.
Je n'arrive pas non plus à mettre plusieurs noms de signet dans le code.
Je ne vois pas ? Un nom de signet est une variable de type String, on peut en avoir autant qu'on veut. A moins que vous vouliez dire traiter plusieurs champs à la fois ? Si plusieurs champs sont dans un paragraphe :: ActiveDocument.Paragraphs(25).Range.Fields.Update Vous pouvez aussi le faire pour une section entière, c'est l'avantage de passer par Range et non sélection, c'est plus souple. On peut même le faire du signet a au signet b, y compris les signets placés entre, mais là si vous voulez un exemple, il faut que je teste.
-- A+
Geo
Merci pour toutes ces précisions. Si j'ai un souci je sais où aller...
Même sans souci, vous pouvez passer, surtout si c'est "vous" au féminin. La passante du champ sans souci ça ferait joli.
-- A+
Merci pour toutes ces précisions.
Si j'ai un souci je sais où aller...
Même sans souci, vous pouvez passer, surtout si c'est "vous" au
féminin.
La passante du champ sans souci
ça ferait joli.