Trouver le N° de page en fonction de la position de la cellule active

RENAUDER

Nous a quitté
Repose en paix
Bonjour,
Dans une feuille Excel très longue (100 pages env.), j'ai de manière aléatoire un libellé qui vient s'inscrire en colonne A (via VBA).
Je voudrais trouver pour chacun des libellés qui est inscrit et qui correspond à donc à une adresse de cellule, sur quel N° de page se trouve ce libellé par rapport aux 100 pages.
En fait ce serait pour faire une sorte de table des matières de l'ensemble des libellés inscrits.

Par exemple pouvoir avoir ceci:
Libellé A=Page 1
Libellé B=Page 2
Libellé C=Page 4
Libellé D=Page 5
D'avance merci.
 

pierrejean

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour RENAUDER

Comment definirais-tu un Libellé ?
La liste en est-elle connue ?
Est-il possible d'agir au niveau du Vba qui les inscrits ?
Un petit fichier avec une ou 2 pages serait peut-etre plus explicite !!

Edit: Salut mromain
 

job75

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour Eric, salut pierrejean,

La liste des libellés doit commencer en A1 (ou A2 avec titre) et ils doivent se suivre.

Ensuite un espace doit la séparer du reste.

Si les libellés recherchés sont aussi en colonne A :

Code:
Sub Page()
Dim dercel As Range, cel As Range, cible As Range, i As Long
Set dercel = Range("A65536").End(xlUp)
For Each cel In Range("A1", Range("A1").End(xlDown)) 'liste jointive
  Set cible = Range(cel.Offset(1), dercel).Find(cel, LookIn:=xlValues, LookAt:=xlWhole)
  If cible Is Nothing Then
    cel.Offset(, 1) = ""
  Else
    For i = 1 To ActiveSheet.HPageBreaks.Count
      If ActiveSheet.HPageBreaks(i).Location.Row > cible.Row Then
        cel.Offset(, 1) = "Page " & i
        GoTo 1
      End If
    Next
    cel.Offset(, 1) = "Page " & i
  End If
1 Next
End Sub

Si les libellés recherchés peuvent être n'importe où :

Code:
Sub Page()
Dim derlig As Range, cel As Range, cible As Range, i As Long
Set [COLOR="red"]derlig[/COLOR] = Range("A65536").End(xlUp).[COLOR="Red"]EntireRow[/COLOR]
For Each cel In Range("A1", Range("A1").End(xlDown)) 'liste jointive
  Set cible = Range(cel.Offset(1), derlig).Find(cel, LookIn:=xlValues, LookAt:=xlWhole)
  If cible Is Nothing Then
    cel.Offset(, 1) = ""
  Else
    For i = 1 To ActiveSheet.HPageBreaks.Count
      If ActiveSheet.HPageBreaks(i).Location.Row > cible.Row Then
        cel.Offset(, 1) = "Page " & i
        GoTo 1
      End If
    Next
    cel.Offset(, 1) = "Page " & i
  End If
1 Next
End Sub

Edit : salut mromain, je ne t'avais pas vu :)

A+
 
Dernière édition:

RENAUDER

Nous a quitté
Repose en paix
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour,

Pour Pierre-Jean
Les libellés je me charge de les inscrire aux endroits requis dans une colonne et ensuite en balayant cette colonne, je voudrais en vis à vis de chaque libellé inscrire sur quel page se trouve ce libellé.
Plus globalement, j'ai bien trouvé un code mais le problème c'est que mes sauts de pages ne sont pas marqué avec l'option Saut de page, ce sont les sauts de page de l'Aperçu avant impression.
De ce pas je vais voir les différents codes que vous m'avez proposé.
 

job75

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Re,

(...) mais le problème c'est que mes sauts de pages ne sont pas marqué avec l'option Saut de page, ce sont les sauts de page de l'Aperçu avant impression.

Les macros que j'ai proposées me paraissent fonctionner aussi bien avec les sauts de pages automatiques que manuels.

Attention, pour le calcul de dercel ou derlig, on s'appuie sur la colonne A.

Il peut être aussi simple d'écrire :

Set dercel = Range("A65536") ou Set derlig = Rows(65536)

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour Eric, le fil, le forum,

J'avais testé avec un seul saut de page automatique.

Avec plusieurs, sur mon ordi, il y a des problèmes que je ne comprends pas :

- apparemment il est indispensable de définir la zone d'impression (sinon la macro bug)

- mais alors ActiveSheet.HPageBreaks.Count se limite à 1 (ou 2, ou 3, c'est variable...).

Peut-être Eric auras-tu trouvé la solution pour utiliser correctement la collection HPageBreaks.

A+
 

mromain

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour à tous,


Hier, j'ai essayer de bidouiller un code (à partir du code de MichelXLD) qui bouclait sur chaque HPageBreak ; et je suis tombé sur un bug étrange.

La macro bugait si le HPageBreak courant (de la boucle For Each) n'était pas dans la zone d'affichage.

Étrange :confused:

a+
 

RENAUDER

Nous a quitté
Repose en paix
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonjour,
Pour JOB 75
Il est vrai qu'il faut définir la plage d'impression.
Je traite un fichier de 6000 lignes et à part une fois ton programme me semble fonctionner.
Je continue mes test.
Encore merci
 

job75

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Re,

Après pas mal de tâtonnements, j'arrive à la solution suivante.

1) A réaliser en manuel, à chaque fois :

- insérer un saut de page sous la dernière ligne de la feuille

- sélectionner la 1ère colonne et la définir comme zone d'impression.

2) Ensuite lancer la macro :

Code:
Sub Page() 'recherche du titre sur toute la feuille
Dim derlig As Range, tablo() As Long, i As Integer, cel As Range, cible As Range
Set derlig = Cells.Find("*", LookIn:=xlValues, LookAt:=xlWhole, _
  SearchOrder:=xlByRows, SearchDirection:=xlPrevious).EntireRow.Offset(1)
[COLOR="Red"]'ActiveSheet.HPageBreaks.Add Before:=derlig 'à faire en manuel
'ActiveSheet.PageSetup.PrintArea = "$A:$A" 'à faire en manuel[/COLOR]
ReDim tablo(ActiveSheet.HPageBreaks.Count)
For i = 1 To UBound(tablo) 'liste des lignes des sauts de pages
  tablo(i) = ActiveSheet.HPageBreaks(i).Location.Row
Next
For Each cel In Range("A1", Range("A1").End(xlDown)) 'liste jointive
  Set cible = Range(cel.Offset(1), derlig).Find(cel)
  If cible Is Nothing Then
    cel.Offset(, 1) = ""
  Else
    cel.Offset(, 1) = "Page " & Application.Match(cible.Row, tablo)
  End If
Next
derlig.Delete 'supprime le saut de page
ActiveSheet.PageSetup.PrintArea = "" 'annule la zone d'impression
End Sub

J'ai testé avec les 2 lignes en rouge qui font les opérations du 1) mais ça ne va pas, il faut du manuel.

Noter l'utilisation de la variable tablo qui fait gagner du temps.

A+
 

job75

XLDnaute Barbatruc
Re : Trouver le N° de page en fonction de la position de la cellule active

Re,

En tâtonnant encore, là j'en reste époustouflé.

On peut éviter toute opération manuelle en positionnant la dernière ligne en haut de l'écran :eek:

Code:
Sub Page() 'recherche du titre sur toute la feuille
Dim derlig As Range, tablo() As Long, i As Integer, cel As Range, cible As Range
Application.ScreenUpdating = False
[COLOR="Red"]ActiveSheet.PageSetup.PrintArea = "" 'annule la zone d'impression[/COLOR]
Set derlig = Cells.Find("*", LookIn:=xlValues, LookAt:=xlWhole, _
  SearchOrder:=xlByRows, SearchDirection:=xlPrevious).EntireRow
[COLOR="red"]Application.Goto derlig, True 'positionnement en haut de l'écran[/COLOR]
ReDim tablo(ActiveSheet.HPageBreaks.Count)
For i = 1 To UBound(tablo) 'liste des lignes des sauts de pages
  tablo(i) = ActiveSheet.HPageBreaks(i).Location.Row
Next
For Each cel In Range("A1", Range("A1").End(xlDown)) 'liste jointive
  Set cible = Range(cel.Offset(1), derlig).Find(cel)
  If cible Is Nothing Then
    cel.Offset(, 1) = ""
  Else
    cel.Offset(, 1) = "Page " & Application.Match(cible.Row, tablo)
  End If
Next
[COLOR="red"]Application.Goto Range("A1"), True[/COLOR]
End Sub

Et plus besoin de créer un saut de page ni de définir une zone d'impression !!

Edit : je joins quand même un fichier si l'on veut tester.

A+
 

Pièces jointes

  • Sauts de pages(1).zip
    19 KB · Affichages: 53
Dernière édition:

RENAUDER

Nous a quitté
Repose en paix
Re : Trouver le N° de page en fonction de la position de la cellule active

Bonsoir job75?
Je vais regarder tout ça à tête reposée car je suis parti pour ce projet vers autre chose mais je vais devoir y revenir.
Encore merci.
 

Discussions similaires