OVH Cloud OVH Cloud

Problème avec HPageBreaks

3 réponses
Avatar
Abel
Bonjour à tous,

Je voudrais ajuster automatiquement les sauts de pages d'une feuille excel
grâce à vba. Malheureusement, j'ai un message d'erreur lors de l'exécution de
ma macro :
"Erreur 9: L'indice n'appartitent pas à la sélection"

et je ne vois pas où est mon erreur. Ci-dessous le code qui pose problème:

'liste contient le nom de la feuille excel utilisée et pos() est un tableau
contenant des numéro de lignes de la feuille list
Sub SautDePage(liste As String, pos() As Integer)

Dim numpagebefore As Integer
Dim numpageafter As Integer
Dim i, j As Integer
With ThisWorkbook.Worksheets(liste)
For i = LBound(pos, 1) To UBound(pos, 1)
numpagebefore = NumeroPage(.Range(.Cells(pos(i), 1), .Cells(pos(i),
1)))
numpageafter = NumeroPage(.Range(.Cells(pos(i + 1) - 1, 1),
.Cells(pos(i + 1) - 1, 1)))
If numpageafter <> numpagebefore Then
.Rows(CStr(pos(i))).PageBreak = xlPageBreakManual
End If
Next i
End With
End Sub

'fonction qui renvoie le numéro de la page contenant le rang passée en
argument
Function NumeroPage(Cellule As Range) As Integer

Dim HPB As HPageBreak
Dim Wksht As Worksheet
Dim Col As Integer, Ligne As Long
Dim i As Integer

Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
NumeroPage = 1
For i = 1 To Wksht.HPageBreaks.Count
Set HPB = Wksht.HPageBreaks(i) 'ici que le message d'erreur arrive
If HPB.Location.Row > Ligne Then Exit For
NumeroPage = NumeroPage + 1
Next
End Function

Si quelqu'un a le temps de m'aider, ca serait super.

Merci

3 réponses

Avatar
Laurent
C'est normal que ça plante si tu n'as pas de saut de page (collection HPageBreaks vide)

Sinon, tu ne devrais pas avoir d'erreur...

--
Laurent

"Abel" a écrit dans le message de news:
Bonjour à tous,

Je voudrais ajuster automatiquement les sauts de pages d'une feuille excel
grâce à vba. Malheureusement, j'ai un message d'erreur lors de l'exécution de
ma macro :
"Erreur 9: L'indice n'appartitent pas à la sélection"

et je ne vois pas où est mon erreur. Ci-dessous le code qui pose problème:

'liste contient le nom de la feuille excel utilisée et pos() est un tableau
contenant des numéro de lignes de la feuille list
Sub SautDePage(liste As String, pos() As Integer)

Dim numpagebefore As Integer
Dim numpageafter As Integer
Dim i, j As Integer
With ThisWorkbook.Worksheets(liste)
For i = LBound(pos, 1) To UBound(pos, 1)
numpagebefore = NumeroPage(.Range(.Cells(pos(i), 1), .Cells(pos(i),
1)))
numpageafter = NumeroPage(.Range(.Cells(pos(i + 1) - 1, 1),
.Cells(pos(i + 1) - 1, 1)))
If numpageafter <> numpagebefore Then
.Rows(CStr(pos(i))).PageBreak = xlPageBreakManual
End If
Next i
End With
End Sub

'fonction qui renvoie le numéro de la page contenant le rang passée en
argument
Function NumeroPage(Cellule As Range) As Integer

Dim HPB As HPageBreak
Dim Wksht As Worksheet
Dim Col As Integer, Ligne As Long
Dim i As Integer

Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
NumeroPage = 1
For i = 1 To Wksht.HPageBreaks.Count
Set HPB = Wksht.HPageBreaks(i) 'ici que le message d'erreur arrive
If HPB.Location.Row > Ligne Then Exit For
NumeroPage = NumeroPage + 1
Next
End Function

Si quelqu'un a le temps de m'aider, ca serait super.

Merci



Avatar
michdenis
Bonjour Abel,

| "Erreur 9: L'indice n'appartitent pas à la sélection"
| Set HPB = Wksht.HPageBreaks(i) 'ici que le message d'erreur arrive

Ce message d'erreur survient lorsque l'objet référencé n'existe pas. Dans ton cas, l'indice (i) de la page horizontale n'est pas
présente dans ta feuille.

Si tu expliquais ce que tu tentes de réaliser ... ce serait peut être plus facile !



Salutations!




"Abel" a écrit dans le message de news:
Bonjour à tous,

Je voudrais ajuster automatiquement les sauts de pages d'une feuille excel
grâce à vba. Malheureusement, j'ai un message d'erreur lors de l'exécution de
ma macro :
"Erreur 9: L'indice n'appartitent pas à la sélection"

et je ne vois pas où est mon erreur. Ci-dessous le code qui pose problème:

'liste contient le nom de la feuille excel utilisée et pos() est un tableau
contenant des numéro de lignes de la feuille list
Sub SautDePage(liste As String, pos() As Integer)

Dim numpagebefore As Integer
Dim numpageafter As Integer
Dim i, j As Integer
With ThisWorkbook.Worksheets(liste)
For i = LBound(pos, 1) To UBound(pos, 1)
numpagebefore = NumeroPage(.Range(.Cells(pos(i), 1), .Cells(pos(i),
1)))
numpageafter = NumeroPage(.Range(.Cells(pos(i + 1) - 1, 1),
.Cells(pos(i + 1) - 1, 1)))
If numpageafter <> numpagebefore Then
.Rows(CStr(pos(i))).PageBreak = xlPageBreakManual
End If
Next i
End With
End Sub

'fonction qui renvoie le numéro de la page contenant le rang passée en
argument
Function NumeroPage(Cellule As Range) As Integer

Dim HPB As HPageBreak
Dim Wksht As Worksheet
Dim Col As Integer, Ligne As Long
Dim i As Integer

Set Wksht = Cellule.Worksheet
Ligne = Cellule.Row
Col = Cellule.Column
NumeroPage = 1
For i = 1 To Wksht.HPageBreaks.Count
Set HPB = Wksht.HPageBreaks(i) 'ici que le message d'erreur arrive
If HPB.Location.Row > Ligne Then Exit For
NumeroPage = NumeroPage + 1
Next
End Function

Si quelqu'un a le temps de m'aider, ca serait super.

Merci
Avatar
Abel
C'est bon, j'ai résolu le problème. Il s'agissait d'un bug excel (voir
http://support.microsoft.com/default.aspx?scid=kb;en-us;210663)

Merci quand même à vous deux.