VBA - Positionner un saut de page au début d'une cellule fusionnée

Bonjour à tous.

Je travaille actuellement sur quelques lignes de code qui servent à mettre en forme une liste de données pour quelles soient facilement discutable en version imprimable.

Dans mon listing, les données sont triées par ordre alphabétique de la colonne A, et je fusionne toutes les cellules consécutives de la colonne A dont le contenu est identique.

Le problème est que quand je défini ma zone d'impression, certains sauts de page se font au milieu de cellules fusionnées, ce qui gêne la lecture.

Savez vous s'il existe un moyen de paramétrer les sauts de page pour qu'ils se positionnent automatiquement à la fin de la dernière cellule fusionnée qui tient entièrement sur la page, afin que la page suivante démarre sur une cellule fusionnée complète ?

Merci d'avance pour votre aide. :-)
Cordialement,

Onafe57.

Bonjour,

inscrit depuis 7 ans et il faut qu'on réclame un fichier ?

eric

Bonjour.

Certes, mais il est aussi écrit en gros, avant de poster un message "Ne transmettez pas de données personnelles ou confidentielles". Les données présentes dans mon fichier sont en lien avec mon travail, et je ne peux pas me permettre de les mettre en ligne telles quelles.

Alors j'ai tenté un message sans fichier, espérant que quelqu'un aurait une piste à me donner pour résoudre mon problème, avec une description que je pensais relativement complète.

Si le fichier est une condition sine qua non, je vais prendre le temps de modifier mes données pour vous proposer un extrait que j'espère représentatif ...

Cordialement.

Onafe57.

Vu ta description ça ne devrait pas être trop dur.
Ca sera toujours plus proche de la réalité que ce qu'on pourra faire...

Voilà un fichier adapté.

12exemple-saut.zip (238.15 Ko)

Je n'ai gardé que la partie "Mise en page" du code VBA.

Vous verrez dans la feuille, que plusieurs cellules de la colonne A sont fusionnées, c'est quand elles contiennent la même valeur.

Le souci que je souhaite éviter, c'est qu'une cellule fusionnée soit à cheval sur deux pages, comme c'est le cas dans l'exemple proposé.

Je ne sais pas si une solution existe pour repositionner chaque saut de page, si celui ci est situé "au milieu" d'un groupe de cellule fusionnées de la colonne A.

Merci par avance pour votre aide.

Cordialement,

Onafe57.

La collection des sauts de page est complètement buggée et impossible à gérer normalement.
Ca a pris un peu de temps que je trouve un palliatif...

Lancer 'test' dans Module1.
Tu as des fusions qui ne rentrent pas dans une page, là je ne fais pas de miracles

Vue la galère je te conseille de regarder de près un grand nombre d'exemples avant de te dire que tout est ok.
Fais-le moi savoir, ça m'intéresse.
Si tu as un plantage, essaie de le reproduire et fourni le fichier et la manip pour arriver à l'avoir.
eric

33exemple-saut.zip (239.33 Ko)

PS : un fichier sans données suffit puisque les points de repère sont les sauts et les fusions

Hello !

Wow, joli eriiic !

J'ai lancé pas à pas et je crois que je n'arrive même pas à comprendre ce que ça fait réellement.

Si tu as un petit peu de temps pour expliquer, je suis preneur !

merci :)

Salut JoyeuxNoel

Déjà je supprime les anciens sauts manuels qui fausseraient le résultat.
C'est là la galère. ..
Pas moyen de supprimer directement dans un For i= sh.HPageBreaks.Count to 1 step -1, ça plante
J'enregistre donc les index des sauts manuels hz de HPageBreaks dans tmp : If HPB.Type = xlPageBreakManual Then tmp = tmp & "," & i
Je les supprime dans la boucle suivante.

Pour l'ajout c'est plus simple.
A chaque saut automatique (HPB.Type = xlPageBreakAutomatic), si la cellule est fusionnée (If c.MergeCells Then), j'ajoute le saut manuel au début de la fusion (Range(HPB.Location.Address).MergeArea(1).EntireRow.PageBreak = xlPageBreakManual)

A voir ce que ça donne sur d'autres exemples
eric

Merci pour les précisions, c'est plus clair ainsi !

Good night

Bonjour eriiic.

Merci pour cette solution qui fonctionne très bien de mon côté.

Juste une précision que je n'ai pas saisi : comment est appelé le Sub test lorsque je lance mon code ?

Je ne le vois pas apparaitre. Après, j'ai bien vu que test() appelle suppSautPageH pour Feuil1.

En effet, comme tu le soulignes, certains cellules fusionnées posent problème car leur taille est supérieure à la taille d'une page.

Je pensais à une autre solution qui pourrait également m'intéresser, et répondre à ce souci : il est peut être possible, pour les sauts de pages qui sont au milieu d'une fusion, de fusionner les cellules ayant la même valeur sur chacune des pages où elles se situent, en positionnant la dernière cellule de ma fusion sur le prochain saut de page "naturel" ou sur la dernière cellule de la même valeur.

Ci dessous, les lignes de code que j'utilise pour la fusion de mes cellules. J'ai intégré ces lignes dans le fichier en PJ.

' Fusion des mêmes valeurs
    Dim Compare As String
    Dim Début As Integer
    Dim Fin As Integer

    i = 2
    Compare = Cells(i, 1).Value
    Début = i
    Fin = i

    Do Until IsEmpty(Cells(i, 1))
        If Cells(i, 1).Value = Compare Then
            i = i + 1
        Else
            Fin = i - 1
            Application.DisplayAlerts = False
            Range("A" & Début, "A" & Fin).MergeCells = True
            Application.DisplayAlerts = True
            Début = i
            Compare = Cells(i, 1).Value
            i = i + 1
        End If
    Loop

Sais tu comment je pourrais concevoir quelques lignes de codes pour réussir à réaliser ça ? J'avoue, j'ai un peu de mal dans la gestion des sauts de page en VBA, notamment sur comment les retrouver.

Merci encore pour ton aide.

Onafe57

Bonjour,

une semaine pour avoir un retour c'est un peu trop long, plus difficile pour se ré-approprier le sujet.
D'autant plus que je ne sais pas si je l'aurais eu si tu n'avais pas eu de question...
Il va falloir être plus rigoureux dans le suivi de tes topic.
Je verrai ça la semaine prochaine si je n'oublie pas, a-priori ce n'est pas urgent pour toi.
eric

Rechercher des sujets similaires à "vba positionner saut page debut fusionnee"