DEFI : Total de page à la fin de chaque page imprimée ?

Comment faire en sorte qu'à l'impression, le total des cellules d'une colonne contenue sur la page en cours soit affiché automatiquement à la fin de chaque page d'impression ???

Par exemple, imaginez un journal de bord où l'on voudrait voir à la fin de chaque page le total des heures effectuées pour les tâches contenues sur la page, ainsi que le total cumulé des heures depuis le début du projet.

Y a-t-il dans Excel une fonction capable de réaliser ça de manière simple ou faut-il trouver une solution en utilisant VBA ???

Par avance, un grand merci à la personne qui pourra m'aider !

Salut Codec_55

Peux-tu fournir un fichier excel pour illustrer ce que tu demandes?

Oui... Tu trouveras ci-joint, un fichier Excel contenant un journal de bord :

https://www.excel-pratique.com/~files/doc2/journal_de_bord_2.zip

et un fichier PDF qui illustre la problématique du total par page. :

https://www.excel-pratique.com/~files/doc2/journal_de_bord_2_RS.zip

(J'ai zipper les fichier pour qu'il soit accepter par l'upload manager)

18classeur3.xlsx (27.91 Ko)

Re,

On comprend beaucoup mieux avec un fichier!!

Après réflexion, je ne pense pas qu'il y ait une fonction excel pour répondre à ton problème. Je pense donc qu'il faut se tourner vers la VBA.

Avant de te proposer ce que j'ai fait, je te fait part (ainsi que le forum!) des pistes de réflexion que j'ai suivies.

Tout d'abord, j'ai pensé à creuser du côté des en-têtes et pieds de page excel.

Je me suis dit que peut-être il était possible que chaque en-tête ou pied de page pouvait

contenir une information différente sur chaque page.

Information qui pouvait faire référence à une cellule. Mais bon, la réflexion n'est pas allée plus loin.

Ensuite, 2è piste de réflexion, je me suis dit que chaque page d'une feuille excel équivalent à un certain nombre de ligne ou plus précisément à un certain nombre de pixels (622 pixels exactement sur mon ordi, avec mes options excel de mise en page).

J'ai volontairement pris les pixels comme unité et pas les points.

Donc, j'ai pensé faire un cumul du temps de travail de chaque ligne puis ne garder que

les lignes qui se trouvent avant chaque multiple de 622 pixels.

N'ayant pas trouvé de fonction qui retourne la hauteur d'une cellule (c'est bizarre, il n'existe apparament que la fonction qui donne la largeur d'une cellule : CELLULE("largeur";[référence_cellule]) et encore, elle donne qu'une valeur arrondie), je me suis penché sur une solution en VBA.

Je préfère prévenir le pro du VBA qui passera par là et qui regardera le bout de code que je mets à disposition, parce que je débute complètement en VBA et j'ai un peu de mal pour la syntaxe.

Si jamais vous trouvez que le code n'est pas "propre", vous pouvez bien sûr le corriger (ce serait bien même!)

Code

Sub AfficheTemps()

For i = 7 To 208  '208 est le nombre de lignes du tableau
Cells(i, 14) = Cells(i, 8) + Cells(i - 1, 14)  'Cumul du Temps (en min)

Next i
    'Mets la colonne N en min
    Columns(14).Select
    Selection.NumberFormat = "[m]"

For i = 1 To 208
    Cells(i, 15) = Rows(i).RowHeight * 4 / 3  'Calcul de la hauteur de chaque ligne
    If i - 1 = 0 Then
    Cells(i, 16) = Cells(i, 15)
    Else
    Cells(i, 16) = Cells(i, 15) + Cells(i - 1, 16)  'Cumul de la hauteur des lignes
    End If

Next i
For j = 3 To 208
If Cells(j, 16) > (j - 2) * 622 And Cells(j - 1, 16) < (j - 2) * 622 Then  'Pour vérifier si la hauteur cumulée des lignes est un multiple de 622
'Mais ça ne marche pas; ça marche pour la première page si on enlève le "(j-2)*" ci-dessus
    Cells(j - 1, 14).Font.ColorIndex = 0  'Mets la couleur de police en noir (pour la voir quand on imprime)
    Else
    Cells(j - 1, 14).Font.ColorIndex = 2  'Sinon, mets la couleur de police en blanc afin de ne pas voir la valeur lors de l'impression
    End If
Next j
End Sub

Voilà, il y a encore pas mal de trucs à modifier je pense mais un fil conducteur pour répondre à ton problème est là.

Je dis qu'il y a encore pas mal de truc à modifier parce que vu que je ne maîtrise pas le VBA, j'ai du mal à retranscrire les idées que j'ai en tête. Notamment, je ne sais pas pourquoi ma condition pour les multiples de 622 ne marchent pas.

Pourquoi ma macro ne colorie pas, seulement les valeurs dont la hauteur est multiple de 622?!

Et Codec_55, j'ai réduit la taille de la police afin que le temps puisse s'afficher quand t'imprimes.

Je joins le fichier contenant la macro pour plus de facilité de compréhension.

https://www.excel-pratique.com/~files/doc2/fghjfhjjournal_de_bord_2.zip

Salut le forum

Quand je vois DEFI ou URGENT dans un message, moi je ne donne pas de solution ....

Mytå

A tester

Attribute VB_Name = "SousTotauxCumulesFinPage"

'insérer des sous totaux en fin de chaque page

'avec cumul, en principe (à tester)

Sub saut_de_zaza()
'J@C, mpfe

    'supprimer tous les sauts de page
    ActiveSheet.ResetAllPageBreaks
    'hauteur d'une page
    nblignes = ActiveSheet.HPageBreaks(1).Location.Row - 1
    'nombre de pages
    nbpages = 1 + ActiveSheet.UsedRange.Rows.Count \ (nblignes - 1)
    'supprimer tous les anciens totaux
    For num = 1 To nbpages + 5
        On Error Resume Next
        Range("total" & num).Delete Shift:=xlUp
        ActiveWorkbook.Names("total" & num).Delete
        On Error GoTo 0
    Next
    'insérer les nouveaux totaux en bonne position
    For NumPage = 1 To nbpages
        Rows(NumPage * nblignes).Select
        Selection.Insert Shift:=xlDown
        Selection.Cells(1) = "total"
        Selection.Cells(2).FormulaR1C1 = "=SUM(R[-" & nblignes - 1 & "]C:R[-1]C)"
        ActiveWorkbook.Names.Add Name:="total" & NumPage, RefersToR1C1:=Selection
    Next NumPage
End Sub

Salut Mytå et le forum,

Je suis nouveau sur le forum, j'ai pas encore les réflexes d'un vrai forumeur! J'ai pas trop fait attention au mot DEFI qu'il y avait dans le sujet.

En lisant ton code Mytå, j'en conclue que je joue pas du tout dans la même cour!!

Je savais pas qu'il existait une fonction Page en VBA.

J'ai testé ton code Mytå (et toi tu l'as écris sans tester?! chapeau!) mais il retourne une référence circulaire! Vu que je comprends pas trop ton code je sais pas comment le modifier.

Merci à vous 2 pour la rapidité de vos réponses et votre implication dans ma problématique . Vos réponses m'indiquent, en tout cas clairement, qu'Excel ne contient pas de fonction ou macro complémentaire toute faite pour ce cas de figure.

VBA-new : ta réflexion est pertinente et je te remercie pour les pistes que tu développes pour la résolution de ce problème. Pour avoir développer plusieurs applications en VBA avec Access, je trouve personnellement que l'environnement de développement VBA sous Excel est austère et les objets sont mal pratique à utiliser... Encore quelque temps sur le forum et tu seras certainement imbattable sur le terrain !

Mytå : Ta connaissance des propriétés des objets Excel me sont d'une aide précieuse et ta proposition de procédure, même si elle n'est pas tout à fait complète, a le mérite d'être simple et efficace. Si tu me le permets, je vais l'utiliser comme base de réflexion pour développer un algorithme plus complet.

Je vous ferai part de ma solution dès que possible... Si entre temps d'autres personnes veulent apporter un peu d'eau au moulin... moi j'dis pas non

Re le forum

Petite précision, le code est de 'J@C, mpfe pas de moi.

Je ne l'ai donc pas tester sinon

  • Selection.Cells(2).FormulaR1C1 = "=SUM(R[-" & nblignes - 1 & "]C:R[-1]C)"

Cells(8) peut-être pour la colonne H

Mytå

Rechercher des sujets similaires à "defi total page fin chaque imprimee"