Merci de vous être arrêté ici.
Je m'en suis tenu à ce que montrait la video: Faire un calcul dans un tableau Word.
J'ai aussi pensé à utiliser un TextBox issu de la BO Formulaire.
Mais dans les deux cas, l'actualisation n'est pas automatique dés qu'une valeur utilisée dans la formule est modifiée.
(je voulais éviter de devoir appuyer sur F9 ou de double-cliquez sur le TextBox pour le mettre à jour)
PS: Misange:
j'avais trouver aussi ce lien, c'est justement après sa lecture, que la voie de la macro semble la seule voie pour actualiser des champs sans faire F9 ou sans activer les TextBox.
En tous cas, c'est ce que j'ai déduis en lisant la réponse de m@rina
Les champs Word (pour la plupart) ne se mettent pas à jour tout seuls.
Si le résultat dépend de champs de formulaire, il suffit de cocher l'option "Calculer à la sortie" dans chacun des champs de formulaire.
Sinon, il faut une macro... Encore faut-il lancer la macro.
Bon. Je suis quand même aller faire un tour dans word, pour constater qu'il n'a pratiquement rien comme objet disponible, et qu'il faut, en effet, apparemment tout se farcir.
Alors j'ai inséré un nouveau module de classe, laissé nommé Classe1:
VB:
Option Explicit
Dim WithEvents Word As Application
Private Sub Class_Initialize()
Set Word = Application
End Sub
Private Sub Word_WindowSelectionChange(ByVal Sel As Selection)
MsgBox TypeName(Sel) & ":""" & Selection & """."
End Sub
Et un module ordinaire:
VB:
Option Explicit
Dim LaClasse As Classe1
Sub InitWord()
Set LaClasse = New Classe1
End Sub
Puis exécuté InitWord
Ah voui ! Ça affiche bien le MsgBox quand on sélectionne quelque chose dans la page.
À vous maintenant de chercher si une autre procédure de mon objet baptisé "Word" conviendrait mieux pour ce que vous voulez faire.
Cordialement.
Bon. Je suis quand même aller faire un tour dans word, pour constater qu'il n'a pratiquement rien comme objet disponible, et qu'il faut, en effet, apparemment tout se farcir.
Alors j'ai inséré un nouveau module de classe, laissé nommé Classe1:
VB:
Option Explicit
Dim WithEvents Word As Application
Private Sub Class_Initialize()
Set Word = Application
End Sub
Private Sub Word_WindowSelectionChange(ByVal Sel As Selection)
MsgBox TypeName(Sel) & ":""" & Selection & """."
End Sub
Et un module ordinaire:
VB:
Option Explicit
Dim LaClasse As Classe1
Sub InitWord()
Set LaClasse = New Classe1
End Sub
Puis exécuté InitWord
Ah voui ! Ça affiche bien le MsgBox quand on sélectionne quelque chose dans la page.
À vous maintenant de chercher si une autre procédure de mon objet baptisé "Word" conviendrait mieux pour ce que vous voulez faire.
Cordialement.
Private Sub Word_WindowSelectionChange(ByVal Sel As Selection)
'If Sel.Columns = 2 Then 'syntaxe erronée
'Sel.MoveRight Unit:=wdCell
Sel.Fields.Update
'End If
End Sub
Pour le moment, cela fonctionne si par exemple dans un tableau de 3 colonnes
quand je saisis un nombre en colonne 2, puis j'appuie sur Tab, pour arriver dans la colonne 3 ou il y a un champ du type: {=A2*B2), la mise à jour est automatique.
Je coince pour dire:
Si la colonne de la Selection dans le tableau est égale à 2, alors 'pas ok
on se déplace en colonne 3 'pas ok
puis mise à jour des champs 'ok
Oui, bien sûr, c'est bien dans Word ce désert à peupler.
Mais, pas d'illusion, je n'ai pas trouvé de procédure réagissant à la modification de quelque chose.
Vérifiez plutôt si le tableau dont vous parlez n'est pas un objet incorporé ayant ses propres évènements qu'on peut gérer.
Cordialement.
Quoi, a-t-on l'air de vous oublier ?
Parce qu'on parraît discuter entre nous Stapple (qui se décarcasse), et moi (qui vous ai répondu) ?
mais peut être ai-je mal compris la question
Simplement ta question publiée sur un forum public vit sa vie de question.
(Et ce même si le demandeur à trouver réponse à sa question ou pas ...)
Dranreb:
J'ai fait le test avec un simple tableau (Tableau/Insérer/Tableau/3 colonnes x 4 lignes)
QUANTITE
PRIX
TOTAL
10
20
{=A2*B2}
0
0
J'ai insérer un champ calculé avec CTRL+F9 -> {=A2*B2}
J'ai recopier et modifier (cf mon précédent message) ton module de classe.
Et cela fonctionne comme dit précédemment.
J'ai essayé différentes syntaxes suggérées par VBA
quand on saisit Sel. mais je n'ai pas su trouver laquelle employer ou comment.
PS: Serdar75: j'ai pour habitude de plus joindre de fichier *.xls ou *.doc pour inciter le demandeur a mettre le nez dans le cambouis...
Car tu ne nous a toujours pas fourni de fichier exemple comme suggéré plutôt dans le fil.
Je n'en sais pas plus que toi, vraiment, au contraire parce que toi tu planche sur ce fameux tableau depuis un moment.
Peut être en recréant ce tableau en enregistrant une nouvelle macro, le code engendré donnerait des idées.
Mettre un espion sur Selection aussi. Il y a peut être une propriété qui donne le tableau auquel elle appartient quand c'est le cas…
À +
Private Sub Word_WindowSelectionChange(ByVal Sel As Selection)
If Sel.Information(wdStartOfRangeColumnNumber) = 3 Then
Sel.Fields.Update
End If
End Sub
Cela fonctionne, la seule contrainte reste qu'il faut tabuler deux fois pour avoir la mise à jour.
Merci Dranreb de m'avoir aiguiller sur la bonne voie.
EDITION: Pour les curieux, voici les différents codes
Voir les explications dans le ZIP.
PS: Dans le code fourni, il y a une procédure Document_Open pour initialiser le module de classe.
Private Sub Word_WindowSelectionChange(ByVal Sel As Selection)
If Sel.Information(wdStartOfRangeColumnNumber) = 3 Then
Sel.Fields.Update
End If
End Sub
Cela fonctionne, la seule contrainte reste qu'il faut tabuler deux fois pour avoir la mise à jour.
Merci Dranreb de m'avoir aiguiller sur la bonne voie.
EDITION: Pour les curieux, voici les différents codes
Voir les explications dans le ZIP.
PS: Dans le code fourni, il y a une procédure Document_Open pour initialiser le module de classe.
Pour insérer le code VBA, lire le fichier LisezMOI.txt comme précisé précédemment.
Le document Word doit être enregistré en *.doc ou *.docm pour contenir des macros.
PS1:
Si difficulté, le net regorge de tutoriels expliquant comment importer des modules...
Sans oublier la touche magique F1 dans VBE.
PS2: Qu'est-ce qui n'est pas tout a fait ça?
La question était bien de faire des calculs (avec mise à jour auto) dans un tableau dans un document Word.
C'est ce que fait le code présent dans le zip.
Ton dernier message laisse entendre que tu as testé ma proposition (enrichie de module de classe de Dranreb), donc tu sais comment importer du code VBA dans Word, non ???
Sinon une simple phrase peut suffire:
"J'ai réussi à faire fonctionner le code proposé."
[ironie: mode gentillet]
c'est plus rapide que de faire une video... mais c'est sur que ça flatte moins l'ego [/ironie]
Néanmoins la video permets de voir que tu as copié le code du module de classe dans un module.
Ce qui n'est pas dans les indications présentes dans LisezMOI.txt