Microsoft 365 Saut de ligne pour impression VBA

Harlem_2021

XLDnaute Nouveau
Bonjour le Forum ^^

En cherchant sur pas mal de forum, j'ai réussi à trouver une macro qui reprend ma problématique. En l'adaptant, je me rends compte qu'il me manque des lignes de collage et je n'arrive pas à comprendre d'où le problème provient.
Je vous explique, les données mis sur l'onglet Impression proviennent du TCD2 en Feuil2.
En occurrence il colle les données de la colonne D et E selon les critères liés aux colonnes A,B et C indiqué sur la macro
Tant que la valeur en colonne A est identique, il copie colle les données colonne D et E des lignes correspondante. Si c'est différent, alors il passe à une autre page d'impression.
Si toujours sur la même page d'impression (selon colonne A) Et si B est identique à B-1 et C est différente de C-1, alors il colle en sautant à chaque fois une ligne
si B est identique à B-1 et C est identique de C-1, alors il colle à la suite à chaque fois une ligne sans sauter des lignes.
Je me suis rendu compte qu'il y avait un problème quand il traite les données n°6 de la colonne A. Je suis censé sur l'onglet Impression avoir 16 valeurs et je n'en vois que 11.

Je vous ai mis en PJ le fichier avec la macro que j'ai essayé d'adapté avec un onglet du résultat souhaité. Sur cet onglet souhaité, vous avec bien 16 valeurs et pour les lignes 25 et 26, les lignes ne sont pas sautées et collées à la suite car sur la colonne B et C du TCD, les numérotation sont identiques.

J'espère que mon problème a bien été expliqué et vous remercie par avance de votre aide.

Harlem
 

Pièces jointes

  • Impression.xlsm
    40.1 KB · Affichages: 17

Harlem_2021

XLDnaute Nouveau
Bonjour le forum

En triturant la macro, je suis arrivé à trouver ce que je souhaitais mais pas totalement.

C'est juste au niveau de la présentation, cela ne correspond pas à ce que je voudrait réellement, il y a trop d'espacement de saut de ligne entre ce que je souhaite faire. Quelqu'un aurait une idée pour que cela fasse qu'un saut de ligne à la fois si B et C ne sont pas identique ?

Sinon pour ceux qui veulent la macro :
VB:
Option Explicit

Sub Bonne_impression_Test()
Dim Première_Ligne As Integer, Dernière_Ligne As Integer, i As Integer, j As Integer
Dim Compteur_1 As Integer, Compteur_2 As Integer
   
Application.ScreenUpdating = False

Worksheets("Feuil2").Activate
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh

With Worksheets("Feuil2")
    .Range("A2").Activate
   
Retour:

    For i = 5 To 100
    Worksheets("Impression").Range("A" & i & ":L" & i + 5 & " , L" & i & ":L" & i + 5).ClearContents
    Next i

    Première_Ligne = ActiveCell.Row
   
    If ActiveCell = "Total général" Then Exit Sub
    If ActiveCell = "(vide)" Then GoTo On_ne_traite_pas_si_vide
   
    Do Until ActiveCell.Offset(1, 0) <> ActiveCell
        ActiveCell.Offset(1, 0).Activate
    Loop
   
    Dernière_Ligne = ActiveCell.Row
   
    Worksheets("Impression").Range("A5") = Worksheets("Feuil2").Range("D" & Première_Ligne) 'N°OF
    Worksheets("Impression").Range("B5") = Worksheets("Feuil2").Range("E" & Première_Ligne) 'Masse

   
    Compteur_1 = 5
         For i = Première_Ligne + 1 To Dernière_Ligne
       
Application.ScreenUpdating = False
        If .Range("B" & i) = .Range("B" & i - 1) And .Range("C" & i) <> .Range("C" & i - 1) Then
            Compteur_2 = Compteur_2 + 2
        ElseIf .Range("B" & i) = .Range("B" & i - 1) And .Range("C" & i) = .Range("C" & i - 1) Then
            Compteur_2 = Compteur_2 + 1
           
        Else
            Compteur_1 = Compteur_1 + 8
            Compteur_2 = 0
        End If
           
           
Application.ScreenUpdating = False
        Worksheets("Impression").Range("A" & Compteur_1 + Compteur_2) = Worksheets("Feuil2").Range("D" & i)
        Worksheets("Impression").Range("B" & Compteur_1 + Compteur_2) = Worksheets("Feuil2").Range("E" & i)
           
Application.ScreenUpdating = False
    Next i
   
Application.ScreenUpdating = False
    Worksheets("Impression").PrintPreview
    If MsgBox("Voulez-vous continuer ? ", vbYesNo, "Continuer l'impression") = vbNo Then
    Exit Sub
    End If
Application.ScreenUpdating = False
   
   
On_ne_traite_pas_si_vide:
   
    ActiveCell.Offset(1, 0).Activate
   
    Compteur_1 = -1
    Compteur_2 = 0
    GoTo Retour
Application.ScreenUpdating = False
End With

Worksheets("Impression").Activate
Application.ScreenUpdating = False

End Sub

Merci pour celui ou celle qui m'aiderait pour finaliser cela. ^^

Un truc qui ressemblerait plus à l'onglet Résultat souhaité pour N°6 plutôt que l'onglet Impression.

Et si je ne met pas 8, je ne trouve pas le résultat. Sachant qu'il se peut que j'ai plus de 4 résultats intégrer avec la même valeur que la colonne B.
Code:
        Else
            Compteur_1 = Compteur_1 + 8
            Compteur_2 = 0
        End If
A+

Harlem
 

Pièces jointes

  • Impression.xlsm
    39.9 KB · Affichages: 2

Harlem_2021

XLDnaute Nouveau
Re,

Cela peut marcher si je mets 16 mais il faut que je masque mes lignes vides en laissant une ligne d'espace entre chaque donnée. Mais après je me retrouve avec un autre souci, cela déborde sur 2 pages d'impression alors que je veux qu'une page. Je veux que tout soit contenu sur une seule page.

VB:
        Else
            Compteur_1 = Compteur_1 + 16
            Compteur_2 = 0
        End If

Alors si cela est faisable, traiter les lignes au fur et a mesure et laisser une ligne vide à chaque fois, sauf si B=B-1 et C=C-1, dans ce cas, la donnée suivante est collée à la suite puis redémarre avec un saut de ligne si condition non identique.

Merci par avance le forum

Harlem
 

Discussions similaires

Réponses
7
Affichages
228

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo