[Résolu]Imprimer les lignes de son choix dans un tableau word

Imprimer les lignes de son choix dans un tableau word [Résolu] - Logiciels - Windows & Software

Marsh Posté le 29-07-2006 à 20:19:55    

Bonsoir
 
Voici mon problème. J'ai un tableau sous word. Ce tableau a un nombre de lignes variables et ce nombre est dans tous les cas important. Ce tableau comporte une ligne d'en-tête. Je veux imprimer ce tableau mais morceau par morceau. Chaque morceau du tableau commence toujours par la ligne d'en-tête. Par exemple, je veux imprimer:
lignes 1 à 14
ligne1+lignes 15 à 45
ligne 1+ lignes 46 à 82
etc...
 
Une solution sommaire consiste à masquer les lignes qu'on ne veut pas imprimer. Mais cette méthode est vraiment lourde car il faut sélectionner les lignes à masquer et si ce nombre est élevé, ce n'est pas pratique.
J'avais posté un message sur le forum programmation où j'ai obtenu un code que j'ai simplifié ainsi:
MaLigne = Array(2, 3, 4, 5, 16, 17, 18, 19, 20) '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(1).Rows(Ligne(i, 0)).Select   'Selectionne la ligne du tableau et ramène la police à 1 (0 = erreur)
   With Selection.Font
    .Hidden = True
    End With
    Next i
 
Ce code me permet de masquer les lignes 2,3,4,5,16,17,18,19 et 20 et de pouvoir imprimer les lignes 1+les lignes 6 à 15. Cette méthode est nettement plus pratique puisque je peux masquer les lignes en saisissant leur n° dans mon code et en outre de masquer des lignes disjointes. Ce code fonctionne sur word 97. Mais ce code n'est pas parfait. En effet, si le nombre de lignes à masquer est important, il faut saisir tous les n° dans le code. S'il faut masquer 150 lignes, ça devient vite lourd.
Ma question est donc la suivante. Connaissez-vous une méthode (mise à part un copier/coller sur Excel) qui peut me permettre d'imprimer mon tableau word avec ma ligne d'en-tête+les lignes de mon souhait,sachant que ces lignes se suivent toujours sauf la ligne d'en-tête: amélioration du code (par exemple instruction VBA qui permet de sélectionner les lignes 2 à 5 et de 16 à 20 dans mon exemple et de les masquer) ou autre méthode?
 
Merci


Message édité par TAM136 le 30-08-2006 à 13:24:58
Reply

Marsh Posté le 29-07-2006 à 20:19:55   

Reply

Marsh Posté le 30-07-2006 à 12:56:37    

Bonjour,
 
Je souhaite préciser qu'il s'agit d'imprimer des listes. Il faut comme sur excel figer en quelque sorte la ligne d'en-tête. Sur word, ce n'est pas possible à ma connaissance.

Reply

Marsh Posté le 30-07-2006 à 18:31:13    

Bonsoir,
j'espère que c'est en gros ce que tu veux?
Cordialement
 
Sub imprimeparville()
Dim reserve As String
total = ActiveDocument.Tables(1).Rows.Count
ligneres = 0      
ActiveDocument.Tables(1).Select
Selection.Font.Hidden = False
Selection.HomeKey Unit:=wdRow
ActiveDocument.Tables(1).Rows(2).Cells(1).Select
     
     
Selection.MoveRight Unit:=wdCell, Count:=2
Selection.Select
reserve = Selection.Text
Selection.MoveRight Unit:=wdCell, Count:=-2
 
 
While ligneres < total
    For i = 2 To total
 ActiveDocument.Tables(1).Rows(i).Select
     Selection.HomeKey Unit:=wdRow
     Selection.Select
    Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
     Selection.SelectCell
      Selection.MoveRight Unit:=wdCell, Count:=2
     nouvtext = Selection.Text
     If reserve = nouvtext Then
     ligneres = i
     Else
         Selection.SelectRow
       Selection.Font.Hidden = True
     
    End If
     
     
     
    Next i
 
    ActiveDocument.Tables(1).Select
   'Application.PrintOut FileName:="", Range:=wdPrintCurrentPage, Item:=
    Application.PrintOut FileName:="", Range:=wdPrintSelection, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
        False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
    ActiveDocument.Tables(1).Select
    Selection.Font.Hidden = False
 
    If ligneres < total Then
    Selection.HomeKey Unit:=wdRow
    ActiveDocument.Tables(1).Rows(ligneres + 1).Cells(1).Select
     Selection.MoveRight Unit:=wdCell, Count:=2
     Selection.Select
     reserve = Selection.Text
   Selection.MoveRight Unit:=wdCell, Count:=-2
     End If
 
Wend
 
 MsgBox "coucou"
 
End Sub
 

Reply

Marsh Posté le 30-07-2006 à 19:47:24    

Bonsoir,
 
J'ai fait un test sachant que je n'ai pas d'imprimante.Cette macro me permet de sélectionner les lignes de mon choix dans mon tableau. Je fais le test mardi avec une imprimante afin de savoir si j'ai bien ces lignes sélectionnées qui s'impriment et je te tiens au courant. Merci beaucoup.

Reply

Marsh Posté le 01-08-2006 à 12:36:44    

Bonjour
 
J'ai essayé le code et là voici que j'ai une erreur de compilation. Membre de méthode ou de données introuvable et j'ai .Select qui est souligné en bleu dans la syntaxe:
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
     Selection.SelectCell
 
Est-que c'est lié à la version du soft? JEst-ce que je dois faire quelque chose de particulier dans mon tableau avant de lancer la macro: sélection, placer le curseur à un endroit précis.......? Je cherche.
 
Merci

Reply

Marsh Posté le 01-08-2006 à 13:18:34    

bonjour, as-tu word 10 dans outils références?( dans vb)

Reply

Marsh Posté le 01-08-2006 à 13:20:58    

TAM136 a écrit :

Bonsoir,
 
J'ai fait un test sachant que je n'ai pas d'imprimante.Cette macro me permet de sélectionner les lignes de mon choix dans mon tableau. Je fais le test mardi avec une imprimante afin de savoir si j'ai bien ces lignes sélectionnées qui s'impriment et je te tiens au courant. Merci beaucoup.


Si tu veux tester sans imprimante ou éviter de consommer inutilement du papier, installe PDF Creator sur ta machine -> comme ça tu génèrera uniquement des fichiers que tu pourras vérifier ;)
(au moins pour ta phase de tests).

Reply

Marsh Posté le 01-08-2006 à 13:29:59    

Bonjour
 
Seniorpapou
J'ai Microsoft Word 8.0 Object Library.
 
Merci Wolfman pour le conseil.

Reply

Marsh Posté le 01-08-2006 à 13:36:09    

et chez toi? comme cela fonctionne, (à l'impression près) regardes la version
 
mets en commentaire la ligne:
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend  
 
il se peut que cela fonctionne sans


Message édité par seniorpapou le 01-08-2006 à 13:40:53
Reply

Marsh Posté le 29-08-2006 à 06:35:22    

Salut Senior
 
J'ai trouvé un truc de ce type:
Sub FractionnerTableau()
Set objTable = ActiveDocument.Tables(1)
If objTable.Rows.Count > 2 Then
    objTable.Rows(1).Select
    Selection.Copy
    objTable.Rows(7).Select
       Selection.Paste
    objTable.Rows(7).Select
    Selection.SplitTable
'Fractionner après la 6eme ligne
'J'ai ainsi un 1er tableau de 6 lignes
End If
Set objTable = ActiveDocument.Tables(2)
If objTable.Rows.Count > 2 Then
    objTable.Rows(1).Select
    Selection.Copy
    objTable.Rows(11).Select  
    Selection.Paste
    objTable.Rows(11).Select
    Selection.SplitTable
'J'ai un second tableau,etc...
End If
Set objTable = ActiveDocument.Tables(3)
If objTable.Rows.Count > 2 Then
    objTable.Rows(1).Select
    Selection.Copy
    objTable.Rows(5).Select
      Selection.Paste
    objTable.Rows(5).Select
    Selection.SplitTable
End If
End Sub
 
Le principe est de fractionner le tableau en gardant (en copiant l'en-tête) mais il faut modifier manuellement le code en fonction du nombre de lignes. Qu'est-ce que t'en penses? Merci.

Reply

Marsh Posté le 29-08-2006 à 06:35:22   

Reply

Marsh Posté le 29-08-2006 à 07:40:07    

Bonjour,
POurquoi pas, on peut s'en inspirer si cela correspond à ton idée sur la façon de traîter ton pb.
 
 
Supposons que l'on s'inspire de ce "truc", tu te retrouveras en permanence, sur ton word, avec la ligne d'entète devant chaque groupe. Tu ne pourras passer ta moulinette qu'une fois. Ensuite pour la création d'un nouveau groupe tu devras mettre l'entète par copier coller. Ne pas oublier d'inhiber le "truc" pour éviter à quelqu'un de rajouter un deuxième titre (un peu n'importe où)
 
 
 Par quoi chaque groupe se différencie-t-il d'un autre? Est-ce toujours regroupé par ce que tu as appelé "ville"?
Décris nous la manip que tu veux effectuer : par exemple
 
Aujourd'hui j'ouvre mon word et je veux imprimer tous les groupes (un par page)
Aujourd'hui j'ouvre mon word et je veux imprimer  les groupes qui me sont demandés : Lyon, Paris, Marseille.
Aujourd'hui j'ouvre mon word et je veux imprimer  les groupes dont la colonne 11 contient "fromage"
 
Tous les groupes existent déja? Si non, la personne qui fait la saisie est-elle en mesure de créer un nouveau groupe au bon endroit? (exemple villes classées par ordres alphabétique ou par nombre d'habitants, ....)
 
Lorsque je rajoute un élément d'un groupe, la personne qui fait la saisie est capable de placer l'information au bon endroit
 
Bonne Journée de labeur


Message édité par seniorpapou le 29-08-2006 à 07:41:43
Reply

Marsh Posté le 29-08-2006 à 20:14:26    

Bonsoir
 
Pour ce qui est de la saisie, il n'y a aucun problème dans la mesure où je suis le seul à la faire. Effectivement, c'est toujours le même principe. Admettons que j'ai les 5 1ères lignes de mon tableau qui contiennent la ville Nantes,en fait les lignes 2,3,4,5,6. La ligne 1 est la ligne d'en-tête. J'ai un premier groupe ou 1er tableau de 6 lignes. J'ai ensuite les lignes 7,8,9 par exemple qui contiennent la ville Bordeaux. Je veux un second tableau de 4 lignes: la ligne d'en-tête+les les lignes 7,8 et 9. La ville est située dans une colonne.
Si je repère visuellement les lgnes et que je reporte le résultat manuellement dans la macro, j'obtiens bien le résultat escompté: ligne d'en-tête récupérée et lignes qui m'intéressent. Il me suffit de copier/coller le code autant de fois que j'ai de groupes, (autrement dit de tableaux) et à entrer les n° des dernières lignes du groupe, par exemple:
 objTable.Rows(11).Select  ou
 objTable.Rows(17).Select  
etc...
 et à changer de façon croissante le n° du tableau:
Set objTable = ActiveDocument.Tables(1) pour tableau 1
Set objTable = ActiveDocument.Tables(2) pour tableau 2
Set objTable = ActiveDocument.Tables(3) pour tableau 3
etc..
 
 
Mais ça reste quand même toujours du rafistolage. Ce que je fais, c'est que j'ajoute une colonne Numérotation pour repérer le n° de la dernière ligne de chaque groupe.

Reply

Marsh Posté le 29-08-2006 à 20:36:10    

Bonsoir,
tu as un tableau existant classé par "ville" et que tu veux fractionner en plusieurs tableaux?

Reply

Marsh Posté le 29-08-2006 à 21:01:52    

Rebonsoir
 
Je veux effectivement le fractionner par villes (par un critère de mon choix).

Reply

Marsh Posté le 29-08-2006 à 21:23:07    

Bonsoir,  
tu as un tableau existant classé par  "un critère de ton choix" et que tu veux fractionner en plusieurs tableaux?
ce critère est le contenu d'une colonne déjà ordonnée? puisque tu envisages de scinder par paquet de lignes?

Reply

Marsh Posté le 30-08-2006 à 10:20:17    

Bonjour,
 
Effectivement, le tableau est trié. Je trie une colonne de mon choix afin de regrouper les villes du même nom et je fractionne mon tableau en autant de villes qu'il y en a. S'il y a 5 villes, je veux 5 tableaux. Quand je dis 5 villes, je parle bien de 5 villes différentes.Par exemple: si j'ai BORDEAUX, BORDEAUX, BORDEAUX, NANTES, NANTES, NICE, NICE, NICE,NICE, NICE,LENS, LENS, LENS, MARSEILLE, MARSEILLE, MARSEILLE, MARSEILLE, MARSEILLE, MARSEILLE, MARSEILLE, je veux 5 tableaux
Tableau 1: BORDEAUX
Tableau 2: NANTES
Tableau 3: NICE
Tableau 4: LENS
Tableau 5: MARSEILLE
 
Je fractionne donc mon tableau à la 1ère ligne du tableau suivant.

Reply

Marsh Posté le 30-08-2006 à 10:33:29    

bonjour,
la colonne peut-elle être différente suivant ton besoin?

Reply

Marsh Posté le 30-08-2006 à 12:15:07    

Bonjour,
essayes ça:
c'est pour ton critère en colonne 3
 
Sub Imprimeparville2()
Dim reserve As String
tbl = 1
Set objTable = ActiveDocument.Tables(tbl)
total = objTable.Rows.Count
While total > 1
 
objTable.Rows(1).Select
    Selection.Copy
 
     
ActiveDocument.Tables(tbl).Select
 
    Selection.HomeKey Unit:=wdRow
    ActiveDocument.Tables(tbl).Rows(2).Cells(1).Select
    Selection.MoveRight Unit:=wdCell, Count:=2
    Selection.Select
    reserve = Selection.Text
    Selection.MoveRight Unit:=wdCell, Count:=2
    Selection.Select
     
 
For i = 2 To total
    ActiveDocument.Tables(tbl).Rows(i).Select
    Selection.HomeKey Unit:=wdRow
    Selection.Select
    Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.SelectCell
     
    Selection.MoveRight Unit:=wdCell, Count:=2
 
    nouvtext = Selection.Text
    If reserve = nouvtext Then
    ligneres = i
    Else
       Selection.SelectRow
       
    Exit For
    End If
 
Next i
If i > total Then Exit Sub
    objTable.Rows(i).Select
    Selection.Paste
    objTable.Rows(i).Select
    Selection.SplitTable
 
 tbl = tbl + 1
Set objTable = ActiveDocument.Tables(tbl)
total = objTable.Rows.Count
Wend
End Sub


Message édité par seniorpapou le 30-08-2006 à 12:33:43
Reply

Marsh Posté le 30-08-2006 à 12:39:54    

Re,
c'est pour choisir la colonne
 
Sub Imprimeparville2()
Dim reserve As String
tbl = 1
 
'changer colonne si besoin ou demander par colonne =inputbox..
 
colonne = 3
decalage = colonne - 1
Set objTable = ActiveDocument.Tables(tbl)
total = objTable.Rows.Count
While total > 1
    ligneres = 0
    objTable.Rows(1).Select
    Selection.Copy
    ActiveDocument.Tables(tbl).Select
    Selection.HomeKey Unit:=wdRow
    ActiveDocument.Tables(tbl).Rows(2).Cells(1).Select
    Selection.MoveRight Unit:=wdCell, Count:=decalage
    Selection.Select
    reserve = Selection.Text
     
     
 
    For i = 2 To total
        ActiveDocument.Tables(tbl).Rows(i).Select
        Selection.HomeKey Unit:=wdRow
        Selection.Select
        Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
        Selection.SelectCell
        Selection.MoveRight Unit:=wdCell, Count:=decalage
        nouvtext = Selection.Text
        If reserve = nouvtext Then
            'ligneres = i
        Else
            Selection.SelectRow
            Exit For
        End If
    Next i
    If i > total Then Exit Sub
    objTable.Rows(i).Select
    Selection.Paste
    objTable.Rows(i).Select
    Selection.SplitTable
    tbl = tbl + 1
    Set objTable = ActiveDocument.Tables(tbl)
    total = objTable.Rows.Count
Wend
End Sub

Reply

Marsh Posté le 30-08-2006 à 12:42:03    

Rebonjour
 
Merci, ça fonctionne mais comment choisir la colonne dans laquelle se trouve le critère?

Reply

Marsh Posté le 30-08-2006 à 12:58:02    

colonne=3 pour colonne 3  
tu peux remplacer colonne =3 par :
colonne = inputbox("quelle colonne ....." )

Reply

Marsh Posté le 30-08-2006 à 13:24:14    

Merci infiniment
 
Par contre, j'ai omis de te signaler que l'instruction Selection.SelectCell ne fonctionne pas. Je l'ai remplacée par Selection.Select et c'est parfait.
 
1000 merci
 
@+

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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