Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Numéro de Page

5 réponses
Avatar
Olivier BERNARD
Bonjour à tous,

J'ai un soucis pour connaitre le numéro de page d'une cellule. J'utilise une
macro complémentaire MOREFUNC réalisée par Laurent LONGRE.

Ma macro traite toute une liste de cellules dont je cherche à connaitre le
numéro de page dans le but de créer un sommaire. Cette macro s'enchaine pour
autant de document que j'ai à réaliser. Le premier passage se passe bien. A
partir du deuxième document, la macro plante sur l'instruction suivante :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué

Lorsque je passe en déboggage, la variable Cellule est bien alimentée =
"A:B,D:D,O:Y,Z:IV"

Si je fais "Continuer", l'instruction s'exécute correctement et pour tout le
reste du document. Mais le plantage se reproduit au document suivant.

Vos idées pour résoudre mon problème seront les biens venues

Merci d'avance
Olivier

5 réponses

Avatar
MichDenis
Ceci est une fonction de Laurent Longre qui sert à déterminer
à quelle page d'impression appartient une cellule :

'-------------------------------------
Function NUMPAGE(Cellule As Range) As Integer
' LL4Plumes
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Ligne As Long, Col As Integer
With Cellule.Worksheet
If .PageSetup.Order = xlDownThenOver Then
HPC = .HPageBreaks.Count + 1
VPC = 1
Else
VPC = .VPageBreaks.Count + 1
HPC = 1
End If
NUMPAGE = 1
Col = Cellule.Column
For Each VPB In .VPageBreaks
If VPB.Location.Column > Col Then Exit For
NUMPAGE = NUMPAGE + HPC
Next VPB
Ligne = Cellule.Row
For Each HPB In .HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NUMPAGE = NUMPAGE + VPC
Next HPB
End With
End Function
'-------------------------------------



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le message de news:
%
Bonjour à tous,

J'ai un soucis pour connaitre le numéro de page d'une cellule. J'utilise une
macro complémentaire MOREFUNC réalisée par Laurent LONGRE.

Ma macro traite toute une liste de cellules dont je cherche à connaitre le
numéro de page dans le but de créer un sommaire. Cette macro s'enchaine pour
autant de document que j'ai à réaliser. Le premier passage se passe bien. A
partir du deuxième document, la macro plante sur l'instruction suivante :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué

Lorsque je passe en déboggage, la variable Cellule est bien alimentée "A:B,D:D,O:Y,Z:IV"

Si je fais "Continuer", l'instruction s'exécute correctement et pour tout le
reste du document. Mais le plantage se reproduit au document suivant.

Vos idées pour résoudre mon problème seront les biens venues

Merci d'avance
Olivier
Avatar
Olivier BERNARD
J'ai aussi cette macro dans mon code source mais il arrive qu'elle ne
fonctionne pas toujours correctement (c'est pour cela que j'ai cherché une
autre méthode).

Le problème rencontré dans la macro dont vous me donnez le source est que
sur certain poste, il se mélange les pinceaux dans les tableaux HPageBreaks
et VPageBreaks (je ne me souviens plus exactement du message, le problème ne
se pose pas sur tous les postes...). J'ai pu contourner le problème en
ajoutant le code suivant à la fin de la function :

...
'
' Correction du 10/01/2006 : Gestion des erreurs lors de la recherche du
numéro de page d'une cellule
Exit Function
'
' Gestion des Erreurs....
ErrorNuméroPage:
If ActiveWindow.View = xlPageBreakPreview Then
ActiveWindow.View = xlNormalView
NbreError = NbreError + 1
Else
ActiveWindow.View = xlPageBreakPreview
NbreError = NbreError + 1
End If

If NbreError > 2 Then
Message = "Erreur de gestion des sauts de pages..."
Message = Message & Chr(13) & Chr(10) & "OK : Continue."
Message = Message & Chr(13) & Chr(10) & "Annuler : Met fin à la
génération."
Title = "Avertissement"
Rep = MsgBox(Message, 1, Title)
If Rep = 2 Then ' Annuler ==> FIN
End
End If
End If
Resume
' FinNuméroPage:
End Function

Ce bout de code me permet de basculer en mode 'normal' ou 'Aperçu des sauts
de page' et de relancer le calcul du numéro de page sans pour autant
boucler... J'avais constaté que le type d'affichage avait une influence dans
l'exécution de la macro... Mais cela ne marche pas à tous les coups...

Je me suis donc tourné vers la macro complémentaire que je sitais dans mon
premier mail qui ne fonctionne pas lors de la génération du deuxième
document...

Désolé pour cette explication un peu longue mais c'est aussi pour vous ayez
connaissance de toutes les investigations que j'ai pu mettre en oeuvre pour
résoudre mon problème.

Je suis intéressé par toutes vos propositions pouvant déboucher sur le
chemin d'une solution. Je peux envoyer un fichier de test si quelqu'un
aurait un peu de temps pour essayer...

A+
Olivier







"MichDenis" a écrit dans le message de
news:%23Rh$
Ceci est une fonction de Laurent Longre qui sert à déterminer
à quelle page d'impression appartient une cellule :

'-------------------------------------
Function NUMPAGE(Cellule As Range) As Integer
' LL4Plumes
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Ligne As Long, Col As Integer
With Cellule.Worksheet
If .PageSetup.Order = xlDownThenOver Then
HPC = .HPageBreaks.Count + 1
VPC = 1
Else
VPC = .VPageBreaks.Count + 1
HPC = 1
End If
NUMPAGE = 1
Col = Cellule.Column
For Each VPB In .VPageBreaks
If VPB.Location.Column > Col Then Exit For
NUMPAGE = NUMPAGE + HPC
Next VPB
Ligne = Cellule.Row
For Each HPB In .HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NUMPAGE = NUMPAGE + VPC
Next HPB
End With
End Function
'-------------------------------------



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le
message de news:

%
Bonjour à tous,

J'ai un soucis pour connaitre le numéro de page d'une cellule. J'utilise
une

macro complémentaire MOREFUNC réalisée par Laurent LONGRE.

Ma macro traite toute une liste de cellules dont je cherche à connaitre le
numéro de page dans le but de créer un sommaire. Cette macro s'enchaine
pour

autant de document que j'ai à réaliser. Le premier passage se passe bien.
A

partir du deuxième document, la macro plante sur l'instruction suivante :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué

Lorsque je passe en déboggage, la variable Cellule est bien alimentée > "A:B,D:D,O:Y,Z:IV"

Si je fais "Continuer", l'instruction s'exécute correctement et pour tout
le

reste du document. Mais le plantage se reproduit au document suivant.

Vos idées pour résoudre mon problème seront les biens venues

Merci d'avance
Olivier





Avatar
MichDenis
Ok pour la longue explication...mais

Qu'est-ce que tu tentes de réaliser ?
Quels sont les difficultés rencontrées avec la fonction proposée ?
Peux-tu donner un exemple précis de cas où la fonction ne
répond pas à tes besoins ? Et dans ce cas, quelle est la réponse
attendue et quelle est la réponse obtenue ?



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le message de news:


J'ai aussi cette macro dans mon code source mais il arrive qu'elle ne
fonctionne pas toujours correctement (c'est pour cela que j'ai cherché une
autre méthode).

Le problème rencontré dans la macro dont vous me donnez le source est que
sur certain poste, il se mélange les pinceaux dans les tableaux HPageBreaks
et VPageBreaks (je ne me souviens plus exactement du message, le problème ne
se pose pas sur tous les postes...). J'ai pu contourner le problème en
ajoutant le code suivant à la fin de la function :

...
'
' Correction du 10/01/2006 : Gestion des erreurs lors de la recherche du
numéro de page d'une cellule
Exit Function
'
' Gestion des Erreurs....
ErrorNuméroPage:
If ActiveWindow.View = xlPageBreakPreview Then
ActiveWindow.View = xlNormalView
NbreError = NbreError + 1
Else
ActiveWindow.View = xlPageBreakPreview
NbreError = NbreError + 1
End If

If NbreError > 2 Then
Message = "Erreur de gestion des sauts de pages..."
Message = Message & Chr(13) & Chr(10) & "OK : Continue."
Message = Message & Chr(13) & Chr(10) & "Annuler : Met fin à la
génération."
Title = "Avertissement"
Rep = MsgBox(Message, 1, Title)
If Rep = 2 Then ' Annuler ==> FIN
End
End If
End If
Resume
' FinNuméroPage:
End Function

Ce bout de code me permet de basculer en mode 'normal' ou 'Aperçu des sauts
de page' et de relancer le calcul du numéro de page sans pour autant
boucler... J'avais constaté que le type d'affichage avait une influence dans
l'exécution de la macro... Mais cela ne marche pas à tous les coups...

Je me suis donc tourné vers la macro complémentaire que je sitais dans mon
premier mail qui ne fonctionne pas lors de la génération du deuxième
document...

Désolé pour cette explication un peu longue mais c'est aussi pour vous ayez
connaissance de toutes les investigations que j'ai pu mettre en oeuvre pour
résoudre mon problème.

Je suis intéressé par toutes vos propositions pouvant déboucher sur le
chemin d'une solution. Je peux envoyer un fichier de test si quelqu'un
aurait un peu de temps pour essayer...

A+
Olivier







"MichDenis" a écrit dans le message de
news:%23Rh$
Ceci est une fonction de Laurent Longre qui sert à déterminer
à quelle page d'impression appartient une cellule :

'-------------------------------------
Function NUMPAGE(Cellule As Range) As Integer
' LL4Plumes
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Ligne As Long, Col As Integer
With Cellule.Worksheet
If .PageSetup.Order = xlDownThenOver Then
HPC = .HPageBreaks.Count + 1
VPC = 1
Else
VPC = .VPageBreaks.Count + 1
HPC = 1
End If
NUMPAGE = 1
Col = Cellule.Column
For Each VPB In .VPageBreaks
If VPB.Location.Column > Col Then Exit For
NUMPAGE = NUMPAGE + HPC
Next VPB
Ligne = Cellule.Row
For Each HPB In .HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NUMPAGE = NUMPAGE + VPC
Next HPB
End With
End Function
'-------------------------------------



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le
message de news:

%
Bonjour à tous,

J'ai un soucis pour connaitre le numéro de page d'une cellule. J'utilise
une

macro complémentaire MOREFUNC réalisée par Laurent LONGRE.

Ma macro traite toute une liste de cellules dont je cherche à connaitre le
numéro de page dans le but de créer un sommaire. Cette macro s'enchaine
pour

autant de document que j'ai à réaliser. Le premier passage se passe bien.
A

partir du deuxième document, la macro plante sur l'instruction suivante :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué

Lorsque je passe en déboggage, la variable Cellule est bien alimentée > "A:B,D:D,O:Y,Z:IV"

Si je fais "Continuer", l'instruction s'exécute correctement et pour tout
le

reste du document. Mais le plantage se reproduit au document suivant.

Vos idées pour résoudre mon problème seront les biens venues

Merci d'avance
Olivier





Avatar
Olivier BERNARD
Le but est de réaliser en automatique un document regroupant des données
statistiques issues de petits fichiers XLS dont la présentation
peut-être différente pour chacun des tableaux, de gérer les sauts de
pages et de créer une feuille de sommaire indiquant la page de chaque
tableau.

J'ai à faire ce traitement pour 20 sociétés (environ 1H de traitement)
et 70 établissements (1H45 de traitement...). Le plantage est
systématique avec la macro complémentaire, il est aléatoire avec la
macro VBA insérée dans le code.

Je passerais le cas aléatoire car je n'ai pas suffisamment
d'informations sur le détail du plantage. Cela fonctionne sur mon poste
de développement pour la génération de tous les documents mais pas chez
certains clients.

Lorsque je lance la génération des documents sans la gestion des sauts
de pages ni du sommaire, tous les documents sont enchaînés correctement.

Avec la macro complémentaire de calcul des numéros de pages, le premier
document se génère correctement. A partir du deuxième document, la
génération se plante sur le premier tableau traité à l'instruction :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué



Cette instruction n'a rien à voir avec la gestion des sauts de pages,
elle se trouve dans une procédure où je gère la suppression de colonne
indésirables.

Si je fais "Continuer", l'instruction s'exécute correctement et pour
tout le reste du document. Mais le plantage se reproduit au document
suivant.
J'ai essayé de gérer l'erreur en ré-exécutant l'instruction en erreur
mais cela se reproduit sur d'autres instructions...

Il y a quelque chose de modifié par la macro complémentaire dans le
contexte de travail (variable interne, feuille active, classeur actif,
mes compétences approchent ici leurs limites..) qui provoque le plantage
sur certaines instructions.

Mon but est de trouver ce qui a changé entre la génération du premier
document et les suivants pour rétablir une situation comme à la première
génération.

Je prépare un fichier exemple que je pourrais t'envoyer pour pouvoir
constater le problème de visu...

Merci de m'avoir lu
A+
Olivier

PS : Je suis en clientèle demain donc difficile de regarder les réponses...












Ok pour la longue explication...mais

Qu'est-ce que tu tentes de réaliser ?
Quels sont les difficultés rencontrées avec la fonction proposée ?
Peux-tu donner un exemple précis de cas où la fonction ne
répond pas à tes besoins ? Et dans ce cas, quelle est la réponse
attendue et quelle est la réponse obtenue ?



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le message de news:


J'ai aussi cette macro dans mon code source mais il arrive qu'elle ne
fonctionne pas toujours correctement (c'est pour cela que j'ai cherché une
autre méthode).

Le problème rencontré dans la macro dont vous me donnez le source est que
sur certain poste, il se mélange les pinceaux dans les tableaux HPageBreaks
et VPageBreaks (je ne me souviens plus exactement du message, le problème ne
se pose pas sur tous les postes...). J'ai pu contourner le problème en
ajoutant le code suivant à la fin de la function :

...
'
' Correction du 10/01/2006 : Gestion des erreurs lors de la recherche du
numéro de page d'une cellule
Exit Function
'
' Gestion des Erreurs....
ErrorNuméroPage:
If ActiveWindow.View = xlPageBreakPreview Then
ActiveWindow.View = xlNormalView
NbreError = NbreError + 1
Else
ActiveWindow.View = xlPageBreakPreview
NbreError = NbreError + 1
End If

If NbreError > 2 Then
Message = "Erreur de gestion des sauts de pages..."
Message = Message & Chr(13) & Chr(10) & "OK : Continue."
Message = Message & Chr(13) & Chr(10) & "Annuler : Met fin à la
génération."
Title = "Avertissement"
Rep = MsgBox(Message, 1, Title)
If Rep = 2 Then ' Annuler ==> FIN
End
End If
End If
Resume
' FinNuméroPage:
End Function

Ce bout de code me permet de basculer en mode 'normal' ou 'Aperçu des sauts
de page' et de relancer le calcul du numéro de page sans pour autant
boucler... J'avais constaté que le type d'affichage avait une influence dans
l'exécution de la macro... Mais cela ne marche pas à tous les coups...

Je me suis donc tourné vers la macro complémentaire que je sitais dans mon
premier mail qui ne fonctionne pas lors de la génération du deuxième
document...

Désolé pour cette explication un peu longue mais c'est aussi pour vous ayez
connaissance de toutes les investigations que j'ai pu mettre en oeuvre pour
résoudre mon problème.

Je suis intéressé par toutes vos propositions pouvant déboucher sur le
chemin d'une solution. Je peux envoyer un fichier de test si quelqu'un
aurait un peu de temps pour essayer...

A+
Olivier







"MichDenis" a écrit dans le message de
news:%23Rh$
Ceci est une fonction de Laurent Longre qui sert à déterminer
à quelle page d'impression appartient une cellule :

'-------------------------------------
Function NUMPAGE(Cellule As Range) As Integer
' LL4Plumes
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Ligne As Long, Col As Integer
With Cellule.Worksheet
If .PageSetup.Order = xlDownThenOver Then
HPC = .HPageBreaks.Count + 1
VPC = 1
Else
VPC = .VPageBreaks.Count + 1
HPC = 1
End If
NUMPAGE = 1
Col = Cellule.Column
For Each VPB In .VPageBreaks
If VPB.Location.Column > Col Then Exit For
NUMPAGE = NUMPAGE + HPC
Next VPB
Ligne = Cellule.Row
For Each HPB In .HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NUMPAGE = NUMPAGE + VPC
Next HPB
End With
End Function
'-------------------------------------



"Olivier BERNARD @prisme.fr>" <olivier.bernard<NoSPAM> a écrit dans le
message de news:

%
Bonjour à tous,

J'ai un soucis pour connaitre le numéro de page d'une cellule. J'utilise
une

macro complémentaire MOREFUNC réalisée par Laurent LONGRE.

Ma macro traite toute une liste de cellules dont je cherche à connaitre le
numéro de page dans le but de créer un sommaire. Cette macro s'enchaine
pour

autant de document que j'ai à réaliser. Le premier passage se passe bien.
A

partir du deuxième document, la macro plante sur l'instruction suivante :

Range(Cellule).Delete Shift:=xlToLeft

avec le message suivant : Erreur 1004 = la méthode 'Range' de l'objet
'_global' a échoué

Lorsque je passe en déboggage, la variable Cellule est bien alimentée >> "A:B,D:D,O:Y,Z:IV"

Si je fais "Continuer", l'instruction s'exécute correctement et pour tout
le

reste du document. Mais le plantage se reproduit au document suivant.

Vos idées pour résoudre mon problème seront les biens venues

Merci d'avance
Olivier










Avatar
MichDenis
Dans la fonction de Laurent Longre que je t'ai soumise, je
ne retrouve pas cette ligne de code :
Range(Cellule).Delete Shift:=xlToLeft



Où as-tu pris cette ligne de code ? En quoi cette ligne de code
t'aide à identifier la page d'impression ?

Si tu utilises autre chose comme code, tu devrais le publier au complet
et non pas extraire seulement une ligne de code !

Je publie à nouveau la fonction de Laurent Longre
'-------------------------------------
Function NUMPAGE(Cellule As Range) As Integer
' LL4Plumes
Dim VPC As Integer, HPC As Integer
Dim VPB As VPageBreak, HPB As HPageBreak
Dim Ligne As Long, Col As Integer
With Cellule.Worksheet
If .PageSetup.Order = xlDownThenOver Then
HPC = .HPageBreaks.Count + 1
VPC = 1
Else
VPC = .VPageBreaks.Count + 1
HPC = 1
End If
NUMPAGE = 1
Col = Cellule.Column
For Each VPB In .VPageBreaks
If VPB.Location.Column > Col Then Exit For
NUMPAGE = NUMPAGE + HPC
Next VPB
Ligne = Cellule.Row
For Each HPB In .HPageBreaks
If HPB.Location.Row > Ligne Then Exit For
NUMPAGE = NUMPAGE + VPC
Next HPB
End With
End Function
'-------------------------------------