[Résolu] Entête "dynamique" ??

Kiriko

XLDnaute Occasionnel
Bonjour,
Existe-t'il une méthode pour avoir dans l'entête d'un document excel une donnée "dynamique" (autre que le N° de page)?

Je précise : Ce que je souhaiterais, sur un document de plusieurs pages, avoir en entête de chacune des pages la valeur de la 2nde ligne de la 1ère colonne de la page, mais ce pour chacune des pages !!
A toute fin utile, je précise que chaque page contient un nombre différent de ligne, et que la raison pour laquelle je souhaite en entête la 2nde ligne (et non la 1ère) de la colonne A est que la 1ère ligne "répête" à chaque page les titres de tableau.

J'espère avoir été clair, merci par avance à tous ceux qui se pencheront sur mon problème.
Merci de m'informer également si cela n'est pas possible,

Cordialement,
 
Dernière édition:

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Bonjour JNP, bonjour JCGL, et merci beaucoup !
Cela fonctionne sans soucis !

L'idéal pour moi serait que le même code puisse proposer au choix (ComboBox?) :

- L'impression totale de tous les plannings (code initial de tototiti2008),
- L'impression d'1 seul planning (code modifié par JNP),
- Une plage de plannings (ils sont toujours croissants car triés en amont, 25-41 pour les plannings compris entre 25 et 41)
- Voire plusieurs plannings non contigus (25;41 pour les seuls plannings 25 et 41).
Cela serait la "Rolls"

Pour ce qui est du choix de l'imprimante, j'ai donc intégrer le code de JCGL, merci beaucoup de ta participation active !

En tous cas, merci beaucoup encore !!

Cordialement,
 
Dernière édition:

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Bonjour à tous !
J'ai essayé de bidouiller avec vos codes pour m'approcher de l'outil final (différentes options d'impression: tous les plannings, planning unique, ou plage/sélection de planning) en un seul code, mais mes faibles connaissances ne m'ont pas permis de réussir (au delà des 2 1ères options). C'est pourquoi j'ose encore vous demander votre aide pour la suite...

Merci encore,
Cordialement...
 

JNP

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Re :),
La roue avant de la Rolls :p
Code:
Option Base 1
Sub test()
Dim MaString As String, Tablo(), I As Integer, Temp1, Temp2, J As Byte, K As Byte
MaString = InputBox("Saisir la séquence planning à imprimer (type 1-4;7;45) :", "Impression planning")
I = 1
Temp1 = Split(MaString, ";")
For J = LBound(Temp1) To UBound(Temp1)
    If InStr(1, Temp1(J), "-") = 0 Then
        ReDim Preserve Tablo(I)
        Tablo(I) = Temp1(J)
        I = I + 1
    Else
        Temp2 = Split(Temp1(J), "-")
        For K = Temp2(0) To Temp2(1)
            ReDim Preserve Tablo(I)
            Tablo(I) = K
            I = I + 1
        Next K
    End If
Next J
MsgBox "Souhaitez-vous bien ces plannings ? " & Join(Tablo, ";")
End Sub
Bonne suite :cool:
 

JNP

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Re :),
La roue avant te suffit pas, il te faut tout :eek: ?...
Code:
Option Explicit
Option Base 1
Sub test()
Dim MonSaut As HPageBreak, Ligne As Long, I As Integer, Planning As Integer
Dim MaString As String, Tablo(), Temp1, Temp2, J As Integer, K As Byte, Ok As Boolean
MaString = InputBox("Saisir la séquence planning à imprimer (type 1-4;7;45) :", "Impression planning")
I = 1
Temp1 = Split(MaString, ";")
For J = LBound(Temp1) To UBound(Temp1)
    If InStr(1, Temp1(J), "-") = 0 Then
        ReDim Preserve Tablo(I)
        Tablo(I) = Temp1(J)
        I = I + 1
    Else
        Temp2 = Split(Temp1(J), "-")
        For K = Temp2(0) To Temp2(1)
            ReDim Preserve Tablo(I)
            Tablo(I) = K
            I = I + 1
        Next K
    End If
Next J
K = MsgBox("Souhaitez-vous bien imprimer ces plannings ? " & Join(Tablo, ";"), vbExclamation + vbOKCancel, "Attention")
If K = vbCancel Then Exit Sub
Planning = Application.InputBox("N° de planning ?", "Selection", , , , , , 1)
I = 1
For J = 1 To UBound(Tablo)
    If Tablo(J) = Range("A2") Then
        Ok = True
    End If
Next J
If Ok Then
    With ActiveSheet.PageSetup
        .CenterHeader = "&""-,Gras""&24Plannings N° " & Range("A2").Value
    End With
    ExecuteExcel4Macro "PRINT(2," & I & "," & I & ",1,,,,,,,,2,,,TRUE,,FALSE)"
End If
For Each MonSaut In ActiveSheet.HPageBreaks
    I = I + 1
    Ligne = MonSaut.Location.Row
    Ok = False
    For J = 1 To UBound(Tablo)
        If Tablo(J) = Range("A" & Ligne + 1) Then
            Ok = True
        End If
    Next J
    If Ok Then
        With ActiveSheet.PageSetup
            .CenterHeader = "&""-,Gras""&24Plannings N° " & Range("A" & Ligne + 1).Value
        End With
        ExecuteExcel4Macro "PRINT(2," & I & "," & I & ",1,,,,,,,,2,,,TRUE,,FALSE)"
    End If
Next MonSaut
End Sub
Bonne fin de journée :cool:
 

tototiti2008

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Bonjour à tous,

Car seul, il ne lance aucune impression.

Ben non, ce n'est que la roue avant de la Rolls ;)

Le pare-choc arrière :

Code:
Function PagePlanning(NumPlanning As Long) As Long
Dim Ligne As Long, MonSaut As HPageBreak, i As Long
'Renvoie le numéro de la page où se trouve un Planning
'si le planning n'est pas trouvé, renvoie 0
    PagePlanning = 0
    With Sheets("Plannings")
        If Application.CountIf(.Range("A:A"), NumPlanning) > 0 Then
            Ligne = Application.Match(NumPlanning, .Range("A:A"), 0)
            For i = 1 To .HPageBreaks.Count
                If .HPageBreaks(i).Location.Row > Ligne Then
                    PagePlanning = i
                    Exit For
                Else
                    PagePlanning = i + 1
                End If
            Next i
        End If
    End With
End Function

Edit : Trop tard :D
 

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Bonjour et merci, tototiti2008, merci JNP,
JNP, ton code ne fonctionne que pour les plages chez moi (1-4), pas pour les (1;4) ni pour les individuels, et je ne trouve pas comment le modifier.
J'ai mis un ' devant
HTML:
Planning = Application.InputBox("N° de planning ?", "Selection", , , , , , 1)
car je pense que c'est un résidu du code précédent (une 2nde box s'ouvrait).

tototiti2008, est-ce que le pare choc a pour vocation de se coller avant la roue ?

Merci encore !

Cordialement,

P.S.: En général, j'essaye de réfléchir et de bidouiller avec l'enregistreur de macros, mais on peut communément admettre que je n'y connais entre rien et vraiment pas grand chose en VBA...
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Re :),
Effectivement, la ligne était un résidu, tu peux la supprimer :p...
2 petites modifications :
Code:
    If Tablo(J) * 1 = Range("A2") Then
et
Code:
        If Tablo(J) * 1 = Range("A" & Ligne + 1) Then
et ça doit marcher, le problème était une comparaison de caractères et de nombres :rolleyes:...
Bonne suite :cool:
 

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Merci beaucoup JNP, cela fonctionne à merveille !!
Petite modification éventuelle, mais franchement pas indispensable :
Lorsque l'on demande l'impression d'une plage (exemple 25-37), le message de confirmation liste 25;26;27...;36;37, soit tous les numéros entre 25 et 37, et ce, même si certains n'existent pas (l'impression est bien ok, elle). En effet, même si mes N° de plannings sont toujours croissants, il y a quelquefois des "trous" plus ou moins importants.
De même, une "case à cocher" ou autre système (on pourrait avoir par défaut renseigné 1-999) pour tout imprimer serait un plus...

Si cela est aisé à modifier pour toi, je veux bien une petite correction en ce sens, mais sinon, ne te casse pas la tête, cela est déjà très satisfaisant pour moi , dites moi juste.

Encore merci à toi JNP, ainsi qu'à tototiti2008, JCGL et Balot57 !!
Cordialement,
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Re :),
C'est plus de la Rolls, c'est de la limousine :p...
En repiquant une ligne de code à Marc :rolleyes:...
Code:
For J = LBound(Temp1) To UBound(Temp1)
    If InStr(1, Temp1(J), "-") = 0 Then
        If Application.CountIf(Range("A:A"), Temp1(J)) > 0 Then
            ReDim Preserve Tablo(I)
            Tablo(I) = Temp1(J)
            I = I + 1
        End If
    Else
        Temp2 = Split(Temp1(J), "-")
        For K = Temp2(0) To Temp2(1)
            If Application.CountIf(Range("A:A"), K) > 0 Then
                ReDim Preserve Tablo(I)
                Tablo(I) = K
                I = I + 1
            End If
        Next K
    End If
Next J
Bonne suite :cool:
 

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Mille merci JNP, la Limousine est parfaite !
Si tu veux bien me rajouter les sièges en cuir, avec soit la case à cocher "tout imprimer" ou alors une "pré-saisie" du type "1-9999" pour imprimer la totale, ce serait encore plus génial que ça ne l'est déjà...

Encore merci !!

Cordialement,
 

JNP

XLDnaute Barbatruc
Re : Entête "dynamique" ??

Re :),
Avec 1-54, ça sera déjà pas mal pour 52 semaines en général :rolleyes:...
Mais je plains la planète pour les impressions papier :mad:...
Code:
MaString = InputBox("Saisir la séquence planning à imprimer (type 1-4;7;45) :", "Impression planning", "1-54")
Bye :cool:
 

Kiriko

XLDnaute Occasionnel
Re : Entête "dynamique" ??

Je n'ai pas fini de te remercier JNP !
En fait, les Numéros de Plannings sont souvent "espacés", je peux en n'avoir qu'une 20aine seulement de 17 à 850...
J'ai essayé de modifier la valeur de ton code, mais j'ai un "dépassement de capacité" dès que je saisi un chiffre supérieur à 254.

Une idée pour clôturer définitivement le sujet ?
Respectueusement et très reconnaissant,

P.S. : La plupart du temps, c'est pour imprimer en pbf, donc moins grave pour la planète.....
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
272