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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <Abel@discussions.microsoft.com> a écrit dans le message de news:0A0AC032-CF74-48D2-A748-8B53AC2D58C1@microsoft.com...
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.
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
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
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" <Abel@discussions.microsoft.com> a écrit dans le message de news: 0A0AC032-CF74-48D2-A748-8B53AC2D58C1@microsoft.com...
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.
| "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
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.
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)