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

[VBA 2000-2003] FitText dans un tableau

23 réponses
Avatar
Lotre
Bonjour,

Je vais tenter d'être clair et précis, ce qui va forcément être un peu
long.

Je suis en train de finaliser un document "un peu compliqué" (pour moi
au moins) avec pas mal de macros. Parmi ces macros, certaines
construisent des tableaux dans le document. Les macros fixent les
dimensions du tableau ( hauteur des lignes et largeur des cellules).
Les cellules sont prévues pour recevoir du texte de taille assez
variable... Mais c'est prévu pour occuper une seule ligne. Cependant,
Il arrive qu'avec la police et la taille fixée au départ, un retour de
ligne augmente la hauteur d'un ligne ce qui met en l'air la mise en
page... Je pourrais choisir un police plus petite pour que cela ne se
produise pas mais ces cas là sont rares et le reste du temps, la
police est "bien adaptée"...

Je pensais que la propriété FitText d'une cellule conviendrait mais
lorsque le texte est cours, il est étiré pour remplir la cellule en
largeur et c'est particulièrement moche.

J'ai donc fait une Sub qui ne met FitText que si "nécessaire" ... la
vérification est pour le moment basée sur le nb de caractères mais ce
paramètre n'est pas très pertinent puisque les caractères sont de
largeur variable. Je suis donc obligé de minorer assez grossièrement
pour que le pb ne se produise pas...


Au départ je pensais tester la hauteur de la ligne pour repérer les pb
mais j'ai constaté que la propriété Height n'est pas impactée par le
changement de hauteur lorsque le texte est "trop long"... de plus cela
ne me dirait pas quelle cellule est à l'origine du changement.

donc ... voilà ma question ?

Comment connaitre concrètement le nombre réel de lignes d'une cellule
?
ou alors
comment détecter la présence d'un saut de ligne dans une cellule ?


Merci d'avance pour vos lumières,
bien cordialement,

HB

3 réponses

1 2 3
Avatar
Lotre
Bonsoir,


J'ai fait deux tableaux identiques sur la page
J'ai remplit le premier

j'ai exécuté :
================================= Sub test()
Dim UN, DEUX As Table
Set UN = ActiveDocument.Tables(1)
Set DEUX = ActiveDocument.Tables(2)
UN.Range.Copy
DEUX.Range.Paste
End Sub
================================ et le second tableau a doublé de taille
Les lignes du premier ont été ajoutées au début du second...
Ce n'est, bien sûr pas l'effet recherché...

J'ai exécuté

ActiveDocument.Tables(1).Select
Selection.Copy
ActiveDocument.Tables(2).Select
Selection.Paste

et cela a le même effet ...

J'ai exécuté

Set A1 = ActiveDocument.Tables(1)
Set A2 = ActiveDocument.Tables(2)
For j = 1 To A1.Columns.Count
For i= 1 To A1.Rows.Count
A2.Cell(i, j).Range.Text = _
A1.Cell(i, j).Range.Text
Next i
Next j

Cela ajoute un retour charriot intempestif
à la fin de chaque cellule
Que j'ai corrigé avec un bidouillage :

For j = 1 To A1.Columns.Count
For i = 1 To A1.Rows.Count
CC = A1.Cell(i, j).Range.Text
L = Len(CC) - 2
A2.Cell(i, j).Range.Text = _
Left(CC, L)
Next i
Next j

mais surtout les "caractères spéciaux" du tableau 1
sont tous perdus et remplacés par "("
Et là franchement c'est plus que très fâcheux car
concrètement les tableaux que j'aurais à manipuler
vont contenir des "caractères spéciaux"...

Comment faire ?????

HB
Avatar
Lotre
Bonsoir,

Je me répond à moi même
mais cela pourra servir à d'autres...

=============================== Set A1 = ActiveDocument.Tables(1)
Set A2 = ActiveDocument.Tables(2)

For j = 1 To A1.Columns.Count
For i = 1 To A1.Rows.Count
A1.Cell(i, j).Range.Copy
A2.Cell(i, j).Range.Paste
Next i
Next j
================================ Ce code simple recopie correctement
le contenu des cellules
sans rien perdre ...

HB


Lotre wrote:
Bonsoir,


J'ai fait deux tableaux identiques sur la page
J'ai remplit le premier

j'ai exécuté :
================================= > Sub test()
Dim UN, DEUX As Table
Set UN = ActiveDocument.Tables(1)
Set DEUX = ActiveDocument.Tables(2)
UN.Range.Copy
DEUX.Range.Paste
End Sub
================================ > et le second tableau a doublé de taille
Les lignes du premier ont été ajoutées au début du second...
Ce n'est, bien sûr pas l'effet recherché...

J'ai exécuté

ActiveDocument.Tables(1).Select
Selection.Copy
ActiveDocument.Tables(2).Select
Selection.Paste

et cela a le même effet ...

J'ai exécuté

Set A1 = ActiveDocument.Tables(1)
Set A2 = ActiveDocument.Tables(2)
For j = 1 To A1.Columns.Count
For i= 1 To A1.Rows.Count
A2.Cell(i, j).Range.Text = _
A1.Cell(i, j).Range.Text
Next i
Next j

Cela ajoute un retour charriot intempestif
à la fin de chaque cellule
Que j'ai corrigé avec un bidouillage :

For j = 1 To A1.Columns.Count
For i = 1 To A1.Rows.Count
CC = A1.Cell(i, j).Range.Text
L = Len(CC) - 2
A2.Cell(i, j).Range.Text = _
Left(CC, L)
Next i
Next j

mais surtout les "caractères spéciaux" du tableau 1
sont tous perdus et remplacés par "("
Et là franchement c'est plus que très fâcheux car
concrètement les tableaux que j'aurais à manipuler
vont contenir des "caractères spéciaux"...

Comment faire ?????

HB


Avatar
Geo
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]



Je me répond à moi même
mais cela pourra servir à d'autres...



Oui, merci.
Cela confirme ce que vous disiez au début de cette conversation, la
manipulation de tableaux est loin d'être évidente.

--
A+
1 2 3