Sélection d'un tableau Word [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 10-11-2005 à 07:14:59
Le code suivant va pouvoir sélectionner le deuxième tableau du document actif et imprimer la selection.
ActiveDocument.Tables(2).Select
ActiveDocument.PrintOut Range:=wdPrintSelection, Copies:=1
Marsh Posté le 21-11-2005 à 09:05:22
Merci pour la réponse mais cette macro va imprimer tout le tableau. Comment faire si je ne eux imprimer qu'une partie (comment intégrer mon critère de sélection selon lequel je veux que telle ou telle ligne soit imprimée), le critèe se trouvant dans une colonne.
Marsh Posté le 22-11-2005 à 22:54:14
Je ne pense pas que l'on puisse selectionner plusieurs lignes différentes dans Word à la différence d'excel. Je te propose un code perfectible pour contouner le problème qui consiste à masquer (en fait incomplètement) les lignes à ne pas imprimer et les rétablir à l'identique après impression.
Sub ImprimerTableau() 'soit 1 tableau > 17 lignes que l'on veut imprimer sauf les lignes 2,5, 8, 12, 15, 17
Dim i
Dim MaLigne As Variant
Dim Ligne()
MaLigne = Array(2, 5, 8, 12, 15, 17) 'numéro de ligne à masquer
ReDim Ligne(UBound(MaLigne) + 1, 2)
For i = 0 To UBound(MaLigne)
Ligne(i + 1, 0) = MaLigne(i) 'remplir le tableau
Next i
For i = 1 To UBound(MaLigne) + 1
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Select 'Selectionne la ligne du tableau et ramène la police à 1 (0 = erreur)
Ligne(i, 1) = Selection.Font.Size
Selection.Font.Size = 1
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).HeightRule = wdRowHeightAtLeast
Ligne(i, 2) = ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Height 'hauteur de ligne à masquer
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Height = 0 ' masque la ligne dans la limite de la taille de la police
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Borders(wdBorderBottom).Visible = False 'masque la bordure inférieure toujours visible
Next i
ActiveDocument.Tables(2).Select
ActiveDocument.PrintOut Range:=wdPrintSelection, Copies:=1
For i = 1 To UBound(MaLigne) + 1
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Height = Ligne(i, 2) 'restituer la hauteur des lignes masquées
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Select 'restituer la taille de la police
Selection.Font.Size = Ligne(i, 1)
ActiveDocument.Tables(2).Rows(Ligne(i, 0)).Borders(wdBorderBottom).Visible = True 'rétabli la bordure inférieure si elle existe
Next i
End Sub
Marsh Posté le 23-11-2005 à 09:34:54
Merci beaucoup. J'avais pensé à masquer les lignes mais en passant par l'enregistreur.Ma macro était très longue et ne fonctionnait pas à tous les coups.
Marsh Posté le 12-12-2005 à 08:29:22
Pour les personnes éventuellement intéréssées, j'ai créé un code permettant de sélectionner les lignes qu'on veut et qu'on veut imprimer sous réserve que les lignes que l'on souhaite sélectionner se suivent mais avec pour intérêt de faire toujours apparaître la ligne d'en-tête. J'ai pris pour exemple un tableau de 10 lignes dont la ligne d'en-tête (la ligne 1). Ce code peut être amélioré (je suis un débutant en VBA).
Selection.Tables(1).Rows(4).Select 'Sélectionner la ligne 4
Selection.MoveDown Unit:=wdLine, Count:=6, Extend:=wdExtend 'Sélectionner les lignes 5 à 9
With Selection.Font
.Hidden = True ' Masquer les lignes 4 à 9
End With
ActiveDocument.PrintOut Copies:=1
Selection.Tables(1).Rows(2).Select 'Sélectionner la ligne 2
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend 'Sélectionner la ligne 3
With Selection.Font
.Hidden = True ' Masquer les lignes 2 à 3
End With
Selection.Tables(1).Rows(4).Select 'Sélectionner la ligne 4
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend 'Sélectionner la ligne 5
With Selection.Font
.Hidden = False ' Démasquer les lignes 4 à 5
ActiveDocument.PrintOut Copies:=1
.Hidden = True ' Masquer les lignes 4 à 5
End With
Selection.Tables(1).Rows(6).Select 'Sélectionner la ligne 6
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend 'Sélectionner la ligne 7
With Selection.Font
.Hidden = False ' Démasquer les lignes 6 à 7
ActiveDocument.PrintOut Copies:=1
.Hidden = True ' Masquer les lignes 6 à 7
End With
Selection.Tables(1).Rows(8).Select 'Sélectionner la ligne 8
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend 'Sélectionner la ligne 9
With Selection.Font
.Hidden = False ' Démasquer les lignes 8 à 9
End With
ActiveDocument.PrintOut Copies:=1
Marsh Posté le 09-11-2005 à 09:19:21
Bonjour à tous,
Je souhaite créer une macro qui me permette de sélectionner un tableau sur Word 97 avec un nombre de colonnes que je connais (ce nombre est fixe et défini) mais avec un nombre de lignes variable. Je souhaite en outre imprimer le tableau. Quelle macro dois-je utiliser.
Par ailleurs, j'aimerai savoir si on peut toujours sur Word sélectionner uniquement certaines lignes en plus de la première ligne (ma ligne d'en-tête autrement dit), le critèe de sélection étant dans une colonne? Sur EXcel, il n' y a pas de problème sauf que pour l'impression c'est fastidieux car il faut aller à chaque fois dans Fichier/Imprimer. Donc s'il y a plusieurs critères, c'est long.
Quelqu'un peut-il m'aider pour tout ça. Merci d'avance.
Message édité par TAM136 le 19-03-2006 à 16:52:21