OVH Cloud OVH Cloud

[vba] tableau taille/position

4 réponses
Avatar
Oliv'
Bonjour
J'ai des documents à l'origine en HTML (Email ) dans lesquels se trouvent
des tableaux
j'aimerais vérifier que ceux-ci ne soient pas plus larges que la page, afin
de mettre en paysage ou réduire ou convertir en image les tableaux selon .

Le problème c'est lorsque les colonnes d'un même tableau ont une taille
différente

Voici mon code

Sub red_tab()
' rappel conversion 1 cm =28.35 points
ActiveWindow.View.Type = wdPrintView
For Each tableau In ActiveDocument.Tables
tableau.Select
total = 0
On Error GoTo col_fus ' pour gérer les tableau avec des cellules fusionnées

For Each col In tableau.Columns
total = col.Width + total
Next col
GoTo result
col_fus:
'je fais du coup une copie de la première ligne
'que je fusionne mais le première ligne n'est pas
'forcèment la plus large

tableau.Rows(1).Select
toto = Selection.Cells(1).Row
Selection.Copy
Selection.PasteAppendTable
Selection.SplitTable
Selection.MoveUp Unit:=wdLine, Count:=1

Selection.Cells(1).Row.Cells.Merge
total = Selection.Columns.PreferredWidth
Selection.Cells(1).Row.Delete

result:
MsgBox total & " soit en cm :" & total / 28.35

Next
End Sub

Comment faire ? y a t'il une propriété position droite du tableau ?


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4 réponses

Avatar
Anacoluthe
Bonjour !

'Oliv'' nous a écrit ...
j'aimerais vérifier que ceux-ci ne soient pas plus larges que la page, afin
de mettre en paysage ou réduire ou convertir en image les tableaux selon .


Je pense qu'il faut balayer ligne par ligne chaque tableau,
faire la somme des largeurs des colonnes et conserver le maximum.
Faut ajouter une boucle et un test sur la variable 'Total'

Anacoluthe
« Tous les tableaux devraient être de la même taille et de la même
couleur de sorte qu'ils seraient interchangeables et que personne
n'aurait le sentiment d'en avoir un bon ou un mauvais. »
- Andy WARHOL

Avatar
Oliv'
Anacoluthe que je salut a écrit dans
%
Bonjour !

'Oliv'' nous a écrit ...
j'aimerais vérifier que ceux-ci ne soient pas plus larges que la
page, afin de mettre en paysage ou réduire ou convertir en image les
tableaux selon .


Je pense qu'il faut balayer ligne par ligne chaque tableau,
faire la somme des largeurs des colonnes et conserver le maximum.
Faut ajouter une boucle et un test sur la variable 'Total'

Anacoluthe


Merci Anacoluthe pour cette piste.
J'ai modifié ma procédure comme ci-dessous, mais je m'aperçoit que je me
leurre si je pense solutionner ainsi ce problème ;-((

En effet le tableau peut ne pas être plus large en taille que la largeur de
la page, mais il peut très bien être positionné en tout ou partie en dehors
de la page !!!
Donc c'est bien la position de la bordure du tableau qu'il convient de
vérifier!!
Mais comment ?
#######################################

Sub red_tab()
' rappel conversion 1 cm (.35 points
ActiveWindow.View.Type = wdPrintView
MsgBox ActiveDocument.Tables.Count & " tableaux"
Max_total_page = 0

For Each tableau In ActiveDocument.Tables
Max_total_tableau = 0
tableau.Select

'On Error GoTo col_fus ' pour gérer les tableau avec des cellules fusionnées
MsgBox tableau.Rows.Count & " lignes dans ce tableau"
For Each ligne In tableau.Rows
total_ligne = 0
ligne.Select
MsgBox ligne.Cells.Count & " Cellules dans cette ligne"

For Each cellule In ligne.Cells
cellule.Select
total_ligne = cellule.Width + total_ligne
Next cellule

If total_ligne > Max_total_tableau Then Max_total_tableau = total_ligne
Next ligne
MsgBox total_ligne / 28.35 & " " & Max_total_tableau / 28.35
If Max_total_tableau > Max_total_page Then Max_total_page =
Max_total_tableau

Next tableau
MsgBox Max_total_page / 28.35 & " " & Max_total_tableau / 28.35
End Sub
#######################################

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Avatar
Oliv'
Oliv' <(supprimerceci) que je salut a écrit
dans
Anacoluthe que je salut a écrit dans
%
Bonjour !

'Oliv'' nous a écrit ...
j'aimerais vérifier que ceux-ci ne soient pas plus larges que la
page, afin de mettre en paysage ou réduire ou convertir en image les
tableaux selon .


Je pense qu'il faut balayer ligne par ligne chaque tableau,
faire la somme des largeurs des colonnes et conserver le maximum.
Faut ajouter une boucle et un test sur la variable 'Total'

Anacoluthe


Merci Anacoluthe pour cette piste.
J'ai modifié ma procédure comme ci-dessous, mais je m'aperçoit que je
me leurre si je pense solutionner ainsi ce problème ;-((

En effet le tableau peut ne pas être plus large en taille que la
largeur de la page, mais il peut très bien être positionné en tout ou
partie en dehors de la page !!!
Donc c'est bien la position de la bordure du tableau qu'il convient de
vérifier!!
Mais comment ?
#######################################

Sub red_tab()
' rappel conversion 1 cm (.35 points
ActiveWindow.View.Type = wdPrintView
MsgBox ActiveDocument.Tables.Count & " tableaux"
Max_total_page = 0

For Each tableau In ActiveDocument.Tables
Max_total_tableau = 0
tableau.Select

'On Error GoTo col_fus ' pour gérer les tableau avec des cellules
fusionnées MsgBox tableau.Rows.Count & " lignes dans ce tableau"
For Each ligne In tableau.Rows
total_ligne = 0
ligne.Select
MsgBox ligne.Cells.Count & " Cellules dans cette ligne"

For Each cellule In ligne.Cells
cellule.Select
total_ligne = cellule.Width + total_ligne
Next cellule

If total_ligne > Max_total_tableau Then Max_total_tableau > total_ligne Next ligne
MsgBox total_ligne / 28.35 & " " & Max_total_tableau / 28.35
If Max_total_tableau > Max_total_page Then Max_total_page > Max_total_tableau

Next tableau
MsgBox Max_total_page / 28.35 & " " & Max_total_tableau / 28.35
End Sub
#######################################


Il semble qu'il faille comparer la largeur de l'ensemble des colonnes de
chaque ligne + la position gauche du tableau par rapport aux marges
(ActiveDocument.Tables.Rows.LeftIndent) avec la largeur de la page moins les
marges
Activedocument.pagesetup.PageWidth -
Activedocument.pagesetup.LeftMargin -Activedocument.pagesetup.RightMargin

Qu'en pensez-vous ?

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Avatar
Oliv'
Le pb
j'aimerais vérifier que ceux-ci ne soient pas plus larges que la
page, afin de mettre en paysage ou réduire ou convertir en image
les tableaux selon .
Ma solution après cogitation fumante ;-)))





Sub red_tab()
' rappel conversion 1 cm (.35 points
ActiveWindow.View.Type = wdPrintView
Max_total_page = 0
For Each tableau In ActiveDocument.Tables
Max_total_tableau = 0
tableau.Select
'On Error GoTo col_fus ' pour gérer les tableau avec des cellules fusionnées
For Each ligne In tableau.Rows
total_ligne = 0
ligne.Select
For Each cellule In ligne.Cells
cellule.Select
total_ligne = cellule.Width + total_ligne + ligne.LeftIndent
largeur = Selection.PageSetup.PageWidth - Selection.PageSetup.LeftMargin -
Selection.PageSetup.RightMargin
If largeur < total_ligne Then MsgBox "attention en dehors"
Next cellule
If total_ligne > Max_total_tableau Then Max_total_tableau = total_ligne
Next ligne
If Max_total_tableau > Max_total_page Then Max_total_page =
Max_total_tableau
Next tableau
End Sub

Je reste attentif à vos remarques
Merci d'avoir suivi

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~