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

Boucle VBA dans Word

9 réponses
Avatar
Congélator
Salut =E0 tous,

J'avais d=E9j=E0 pos=E9 la question dans ce forum mais je ne la=20
retrouve plus, ni m=EAme de r=E9pose alors la re-voici...

Dans un document Word (Windows et Office XP), j'ai un=20
tableau avec plusieurs lignes et colonnes. Dans chaque=20
cellules, j'ai mis un signet "nom1" - "prenom1", etc...=20
Lorsque l'utilisateur ouvre le mod=E8le, une form s'affiche=20
et il n'a plus qu'=E0 remplir les champs "tbox_nom" -
"tbox_prenom", etc... qui enverront =E0 la fin les=20
informations aux bons signets. Mon probl=E8me est le=20
suivant :
J'ai cr=E9=E9 un bouton demandant =E0 l'utilisateur s'il y a une=20
autre personne =E0 saisir. Si oui, je n'arrive pas =E0=20
recopier le tableau ET =E0 faire en sorte que les signets=20
deviennent "nom2" - "prenom2" puis "nom3" - "prenom3",=20
etc... Actuellement, il recopie le tableau avec les=20
anciens signets et me recopie donc une nouvelle fois les=20
m=EAme donn=E9es que dans le 1er tableau ("nom1" - "prenom1").=20

Si qqn a une id=E9e, je suis preneur car je m'arrache les=20
cheveux... alors avant qu'on m'appelle Kojak :-))

Merci =E0 tous

C=E9d / Lausanne

9 réponses

Avatar
Anacoluthe
Bonjour !

Un signet sert à marquer un emplacement dans un document.
Il est inutile d'utiliser en VBA des signets pour marquer
les cellules d'un tableau !!! Inutile, compliqué et source
d'erreurs de toutes sortes. Utilisez donc simplement
l'adressage numérique du tableau Tables(x).Cell(i,j) !!!!

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL


'Congélator' nous a écrit ...
J'avais déjà posé la question dans ce forum mais je ne la
retrouve plus, ni même de répose alors la re-voici...
Dans un document Word (Windows et Office XP), j'ai un
tableau avec plusieurs lignes et colonnes. Dans chaque
cellules, j'ai mis un signet "nom1" - "prenom1", etc...
Lorsque l'utilisateur ouvre le modèle, une form s'affiche
et il n'a plus qu'à remplir les champs "tbox_nom" -
"tbox_prenom", etc... qui enverront à la fin les
informations aux bons signets. Mon problème est le
suivant :
J'ai créé un bouton demandant à l'utilisateur s'il y a une
autre personne à saisir. Si oui, je n'arrive pas à
recopier le tableau ET à faire en sorte que les signets
deviennent "nom2" - "prenom2" puis "nom3" - "prenom3",
etc... Actuellement, il recopie le tableau avec les
anciens signets et me recopie donc une nouvelle fois les
même données que dans le 1er tableau ("nom1" - "prenom1").
Si qqn a une idée, je suis preneur car je m'arrache les
cheveux... alors avant qu'on m'appelle Kojak :-))
Merci à tous
Céd / Lausanne


Avatar
Geo
Bonjour Congélator


Salut à tous,

J'avais déjà posé la question dans ce forum mais je ne la
retrouve plus, ni même de répose


Tu sais qu'on peut chercher dans l'historique complet ?
C'est indiqué comment sur la page d'accueil de la faq de la
webmistress marina
(où il y en plein d'autres bonnes choses aussi)
http://faqword.free.fr

--
A+

Avatar
Congelator
Merci Anacoluthe, l'info m'intéresse mais pourrais-tu me
donner un exemple concret pour envoyer, après un clic sur
un bouton, une info dans une cellule bien précise ? p.ex :
envoyer "aa" dans la 2ème colonne / 3ème cellule. J'ai
regardé dans l'aide VBA de Word mais ce n'est pas clair...
pour moi en tout cas.

Merci d'avance

Céd
-----Message d'origine-----
Bonjour !

Un signet sert à marquer un emplacement dans un document.
Il est inutile d'utiliser en VBA des signets pour marquer
les cellules d'un tableau !!! Inutile, compliqué et source
d'erreurs de toutes sortes. Utilisez donc simplement
l'adressage numérique du tableau Tables(x).Cell(i,j) !!!!

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL


'Congélator' nous a écrit ...
J'avais déjà posé la question dans ce forum mais je ne
la


retrouve plus, ni même de répose alors la re-voici...
Dans un document Word (Windows et Office XP), j'ai un
tableau avec plusieurs lignes et colonnes. Dans chaque
cellules, j'ai mis un signet "nom1" - "prenom1", etc...
Lorsque l'utilisateur ouvre le modèle, une form
s'affiche


et il n'a plus qu'à remplir les champs "tbox_nom" -
"tbox_prenom", etc... qui enverront à la fin les
informations aux bons signets. Mon problème est le
suivant :
J'ai créé un bouton demandant à l'utilisateur s'il y a
une


autre personne à saisir. Si oui, je n'arrive pas à
recopier le tableau ET à faire en sorte que les signets
deviennent "nom2" - "prenom2" puis "nom3" - "prenom3",
etc... Actuellement, il recopie le tableau avec les
anciens signets et me recopie donc une nouvelle fois
les


même données que dans le 1er tableau ("nom1" -
"prenom1").


Si qqn a une idée, je suis preneur car je m'arrache les
cheveux... alors avant qu'on m'appelle Kojak :-))
Merci à tous
Céd / Lausanne



.




Avatar
Anacoluthe
Bonjour !

'Congelator' nous a écrit ...
Merci Anacoluthe, l'info m'intéresse mais pourrais-tu me
donner un exemple concret pour envoyer, après un clic sur
un bouton, une info dans une cellule bien précise ? p.ex :
envoyer "aa" dans la 2ème colonne / 3ème cellule.


ActiveDocument.Tables(1).Cell(3,2).Range.Text = "aa"

Ceci place dans la cellule en 3ème ligne, 2ème colonne du
1er tableau du document actif la chaîne "aa" :-)

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL

Avatar
Congelator
SU-PER !!!

Un grand merci pour ton aide, je vais enfin pouvoir
terminer mon projet !

Céd
-----Message d'origine-----
Bonjour !

'Congelator' nous a écrit ...
Merci Anacoluthe, l'info m'intéresse mais pourrais-tu
me


donner un exemple concret pour envoyer, après un clic
sur


un bouton, une info dans une cellule bien précise ?
p.ex :


envoyer "aa" dans la 2ème colonne / 3ème cellule.


ActiveDocument.Tables(1).Cell(3,2).Range.Text = "aa"

Ceci place dans la cellule en 3ème ligne, 2ème colonne du
1er tableau du document actif la chaîne "aa" :-)

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL
.




Avatar
Congelator
Salut Geo,

Merci pour l'info mais c'est la 1ère chose que j'ai faite
et, comme je n'en trouve plus trace, j'ai reposé la
question...

Céd
-----Message d'origine-----
Bonjour Congélator


Salut à tous,

J'avais déjà posé la question dans ce forum mais je ne
la


retrouve plus, ni même de répose


Tu sais qu'on peut chercher dans l'historique complet ?
C'est indiqué comment sur la page d'accueil de la faq de
la

webmistress marina
(où il y en plein d'autres bonnes choses aussi)
http://faqword.free.fr

--
A+


.




Avatar
Congelator
J'ai encore besoin d'un coup de pouce... je suis débutant
en VBA...
Comment faire pour que le programme sache qu'il doit
sélectionner le dernier tableau pour y entrer les infos ?

Je fais le circuit suivant :
-1- saisie dans une form car il y a au moins 1 personne
(donc 1 tableau) puis insertion dans tableau 1
-2- msgbox "encore 1 personne ?"
-3- si oui, colle le tableau type copié au début du code
-4- saisie dans une form "Ajout d'une personne" puis
insertion dans tableau ET C'EST LA QUE CA PLANTE... car
il m'écrit toujours dans le 1 et je ne sais pas comment
faire pour lui dire que c'est dans le nouveau tableau...

Si qqn a une idée, elle est la bienvenue.

Remerciements d'un ex-futur Kojak :o)

Céd

-----Message d'origine-----
Bonjour !

'Congelator' nous a écrit ...
Merci Anacoluthe, l'info m'intéresse mais pourrais-tu
me


donner un exemple concret pour envoyer, après un clic
sur


un bouton, une info dans une cellule bien précise ?
p.ex :


envoyer "aa" dans la 2ème colonne / 3ème cellule.


ActiveDocument.Tables(1).Cell(3,2).Range.Text = "aa"

Ceci place dans la cellule en 3ème ligne, 2ème colonne du
1er tableau du document actif la chaîne "aa" :-)

Anacoluthe
« Pourquoi faire simple quand on peut faire compliqué ? »
- Jacques ROUXEL
.




Avatar
Anacoluthe
Bonjour !

'Congelator' nous a écrit ...
J'ai encore besoin d'un coup de pouce... je suis débutant
en VBA...
Comment faire pour que le programme sache qu'il doit
sélectionner le dernier tableau pour y entrer les infos ?


En principe votre nouveau tableau devrait être un objet
référencé avant d'écrire dedans ce qui vous éviterait de
savoir son numéro d'ordre :

Dim monTableau As Table
Dim FinDoc As Range
Set FinDoc = ActiveDocument.Content
FinDoc.Collapse (wdCollapseEnd)
Set monTableau = ActiveDocument.Tables.Add(FinDoc, 3, 2)
monTableau.Cell(3, 2).Range.Text = "aa"

Ceci dit le dernier tableau du document c'est
ActiveDocument.Tables(ActiveDocument.Tables.Count)

[HS]
C'est Geo qui l'a dit hier. J'avais 'buté' dessus à cause
de l'eau jaune mais il avait raison l'ami Geo car
la collection Tables ne reconnaît pas l'item .Last :-)

Anacoluthe
« Vous voyez d’ici le tableau ! »
- Henri de TOULOUSE-LAUTREC

Avatar
Congelator
Encore une fois MERCI !

ActiveDocument.Tables(ActiveDocument.Tables.Count) c'est
exactement ce qu'il me fallait.

Par contre, "devrait être un objet référencé" n'évoque
rien pour moi... Désolé. Le .dot que je dois réaliser est
un peu complexe : une partie du doc ne change jamais mais
à l'intérieur, je dois pouvoir rajouter 1, 2,...10 noms
(je ne peux pas le savoir à l'avance) et chacun dans un
nouveau tableau. Et ces tableaux ne sont pas à la fin du
document (histoire de simplifier...) mais en plein milieu.

Bref, maintenant il ne me reste plus qu'à faire en sorte
que chaque nouveau tableau vienne APRES l'ancien et
j'aurai résolu mon problème, grâce à l'excellentissime
Anacoluthe. Encore merci !

Céd / Lausanne
-----Message d'origine-----
Bonjour !

'Congelator' nous a écrit ...
J'ai encore besoin d'un coup de pouce... je suis
débutant


en VBA...
Comment faire pour que le programme sache qu'il doit
sélectionner le dernier tableau pour y entrer les
infos ?



En principe votre nouveau tableau devrait être un objet
référencé avant d'écrire dedans ce qui vous éviterait de
savoir son numéro d'ordre :

Dim monTableau As Table
Dim FinDoc As Range
Set FinDoc = ActiveDocument.Content
FinDoc.Collapse (wdCollapseEnd)
Set monTableau = ActiveDocument.Tables.Add(FinDoc, 3, 2)
monTableau.Cell(3, 2).Range.Text = "aa"

Ceci dit le dernier tableau du document c'est
ActiveDocument.Tables(ActiveDocument.Tables.Count)

[HS]
C'est Geo qui l'a dit hier. J'avais 'buté' dessus à cause
de l'eau jaune mais il avait raison l'ami Geo car
la collection Tables ne reconnaît pas l'item .Last :-)

Anacoluthe
« Vous voyez d'ici le tableau ! »
- Henri de TOULOUSE-LAUTREC
.