Insérer saut de pages selon critères d'une seconde feuille

bonjour , je souhaite faire une macro pour insérer en feuil1 des sauts de page (critère colonne A) selon les critères de la feuil2 en colonne A.

image

en feuil 2 les critères possibles (dans l'exemple seulement 2)

image

Donc le résultat dans ce cas serait saut de page sous la dernière valeur 450 et saut de page sous la dernière valeur 480.

J'y suis depuis un moment et n'y arrive pas..

12test-yoda.xlsm (23.76 Ko)

merci d'avance pour votre aide

cdt

en bossant un peu , un début de piste , mais pour une valeur sans boucler sur la liste critères de la feuil2.

Sub test2()
Dim derlg As Long, i As Long

ActiveSheet.ResetAllPageBreaks

With Sheets("Feuil1") 
derlg = .Range("A" & .Rows.Count).End(xlUp).Row 'remplacer A par colonne concernée
For i = derlg To 1 Step -1
    If .Range("A" & i) = "430" Then Exit For

Next i
MsgBox .Range("A" & i).Row

 ActiveSheet.Rows(i + 1).PageBreak = _
                xlPageBreakManual
End With
End Sub

Si quelqu'un peut m'aider, merci d'avance

Bonjour,

Essaie avec ce code :

Sub Insert_SdP()
Dim Cel As Range, Plg As Range
Dim Lig As Long
With Sheets("liste critères saut de page")
    Set Plg = .Range("A1").Resize(Application.CountA(.Columns(1))) 'détermine les cellules de l'onglet 2 à balayer
End With
With Sheets("Feuil1")
    .ResetAllPageBreaks 'on supprime tous les sauts de page
    For Each Cel In Plg 'on balaie
        Lig = Application.Match(Cel.Value, .Columns(1), 0) + Application.CountIf(.Columns(1), Cel.Value)
            'Application.Match donne le numéro de ligne de la valeur
            'Application.Countif donne le nombre de ce numéro
            'La somme des deux donne le numéro de ligne pour le SdP
        .HPageBreaks.Add before:=.Cells(Lig, "K")
        .VPageBreaks.Add before:=.Cells(Lig, "K")
    Next Cel
End With
End Sub

Bonne journée

bonjour , merci cela fonctionne.

mais comme beaucoup j'ai zappé un paramètre dans ma demande..

j'ai une erreur de type si je mets en Feuil2 des

image

données sous cette forme.

Encore désolé car j'essaie de faire des fichiers et demandes clair , mais parfois ....ça ne l'est pas.

merci d'avance

7test-yoda-5.xlsm (23.13 Ko)

Re-,

J'avais aussi oublié de le préciser, mais mon code supposait un tri préalable de la colonne A de l'onglet devant recevoir les sauts de page...

Dans ton dernier exemple, tu peux m'expliquer le pourquoi du comment?

On fait comment, pour le 450, donc dispatché sur plusieurs pages???

image

merci Cousinhub ,

oui le trie sera fait, c'est moi qui est ajouter lors de ce dernier exemple pardon.

merci d'avance ...et de ta patience ;)

Re-,

Donc cela fonctionne, si le tri est fait?

non , ci joint

image
11test-yoda-5.xlsm (23.13 Ko)

Effectivement...

Maintenant, si tu enlèves le dernier "a" de la cellule A12 (J01E4203a), ou si tu le rajoutes dans la cellule A3 du 2ème onglet (J01E4203), ça fonctionne bien mieux...

Pour éviter toute future mauvaise saisie, on va "brider" un peu :

Sub Insert_SdP()
Dim Cel As Range, Plg As Range
Dim Lig 'As Long
With Sheets("liste critères saut de page")
    Set Plg = .Range("A1").Resize(Application.CountA(.Columns(1))) 'détermine les cellules de l'onglet 2 à balayer
End With
With Sheets("Feuil1")
    .ResetAllPageBreaks 'on supprime tous les sauts de page
    For Each Cel In Plg 'on balaie
        If Not IsError(Application.Match(Cel.Value, .Columns(1), 0)) Then 'Si la valeur existe bien....
            Lig = Application.Match(Cel.Value, .Columns(1), 0) + Application.CountIf(.Columns(1), Cel.Value)
                'Application.Match donne le numéro de ligne de la valeur
                'Application.Countif donne le nombre de ce numéro
                'La somme des deux donne le numéro de ligne pour le SdP
            .HPageBreaks.Add before:=.Cells(Lig, "K")
            .VPageBreaks.Add before:=.Cells(Lig, "K")
        End If
    Next Cel
End With
End Sub

Bonne journée

C'est super !!!! merci

Il me viens une idée , voir même une vision! (je sais ça fait peur !!)

peut être pourrait on avec Application.Match ajouter une notion len pour ne prendre que les 8 premiers caractères pour le cas où cette adresse serait manquante comme cela si la XXXXXX/C serait manquante cela insert le saut de page à la XXXXXX/B.

mais si ce n'est pas possible et galère je ferai une macro avant celle ci

merci

Re-,

Euh, n'en fais pas non plus de ce post une pelote de fils... (Avec des idées à la seconde...)

Ainsi :

Sub Insert_SdP()
Dim Cel As Range, Plg As Range
Dim Lig 'As Long
With Sheets("liste critères saut de page")
    Set Plg = .Range("A1").Resize(Application.CountA(.Columns(1))) 'détermine les cellules de l'onglet 2 à balayer
End With
With Sheets("Feuil1")
    .ResetAllPageBreaks 'on supprime tous les sauts de page
    For Each Cel In Plg 'on balaie
        If Not IsError(Application.Match(Cel.Value, .Columns(1), 0)) Then 'Si la valeur existe bien....
            Lig = Application.Match(Cel.Value, .Columns(1), 0) + Application.CountIf(.Columns(1), Cel.Value)
                'Application.Match donne le numéro de ligne de la valeur
                'Application.Countif donne le nombre de ce numéro
                'La somme des deux donne le numéro de ligne pour le SdP
            .HPageBreaks.Add before:=.Cells(Lig, "K")
            .VPageBreaks.Add before:=.Cells(Lig, "K")
        Else
            On Error Resume Next
                Lig = .Columns("A:A").Find(Left(Cel.Value, 8), , , LookAt:=xlPart).Row
                If Lig > 0 Then
                    .HPageBreaks.Add before:=.Cells(Lig, "K")
                    .VPageBreaks.Add before:=.Cells(Lig, "K")
                End If
            On Error GoTo 0
        End If
    Next Cel
End With
End Sub

Bien que je n'aime pas utiliser la solution de facilité "On Error Resume Next"...

c'est super , pour info les sauts de page se mettent avant la valeur et non après.

Pas gênant au pire , je peux adapter les données si nécessaire.

saut de page apres

image

alors que le critère est

image
Rechercher des sujets similaires à "inserer saut pages criteres seconde feuille"