XL 2013 [RESOLU] VBA pour tri et saut de page

Danyspeed

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin à partir du fichier ci-jour d'effectuer de manière automatiser le tri du tableau par la colonne A (N° du logement) et B (date) et ensuite d'avoir des saut de page à chaque changement d'appartement afin de pouvoir imprimer un appartement par page et ceux pour chaque onglet (ici juste "Electricité" et "Chauffage.."
J'ai effectué de nombreuses recherches sur le sites, et tenté d'adapter au mieux cette VBA que j'avais déjà utilisé auparavant:

Sub SautPageGroupe()
ActiveSheet.ResetAllPageBreaks ' raz
For i = 7 To [A65000].End(xlUp).Row
Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Key2:=Range _
("B6"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
:=False, Orientation:=xlTopToBottom
Range("a6").Select
If Cells(i + 1, 1) <> Cells(i, 1) Then
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Cells(i + 1, 1)
End If
Next

'ActiveSheet.ResetAllPageBreaks ' raz
With ActiveSheet.PageSetup
.PrintArea = "A1:J" & Range("a65536").End(xlUp).Row
.PrintTitleRows = "$3:$6"
.FitToPagesWide = 1
End With
End Sub
Je souhaite l'exécuter sur chaque onglet qui sont réaliser de la même manière pour l'entête.
Cependant elle disfonctionne : Erreur d'exé 1004 La méthode Sort de la classe Range a échoué
J'ai réussi a corrige le problème une première fois, mais le problème revient et aussi pour des autres onglets.

Est-ce que vous pourriez avoir la sympathie d'un jeter un oeil de me dire ce qui ne va pas (ou de corriger la macro)?
Merci par avance.
 

Pièces jointes

  • liste TMA.xls
    109 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Bonsoir.
Essayez comme ça :
VB:
Sub SautPageGroupe()
Dim LO As ListObject, Rng As Range, Cel As Range, Logt
ActiveSheet.ResetAllPageBreaks
Set LO = ActiveSheet.ListObjects(1)
Set Rng = LO.ListColumns(1).DataBodyRange
With LO.Sort
   .SortFields.Clear
   .SortFields.Add Key:=Rng, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .Header = xlYes
   .MatchCase = False
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply
   End With
Logt = Rng(1, 1).Value
For Each Cel In Rng
   If Cel.Value <> Logt Then
      ActiveSheet.HPageBreaks.Add Before:=Cel
      Logt = Cel.Value: End If: Next Cel
With ActiveSheet.PageSetup
   .PrintArea = "A1:J" & Range("a65536").End(xlUp).Row
   .PrintTitleRows = "$3:$6"
   .FitToPagesWide = 1
   End With
End Sub
 

Discussions similaires

Réponses
6
Affichages
235

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16