[RESOLU]Sélection d'un tableau Word

Sélection d'un tableau Word [RESOLU] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 09-11-2005 à 09:19:21   

Reply

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

Reply

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.

Reply

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

Reply

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.

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed