Amélioration code, amélioration codeur

Bonjour,

Je vous remercie pour l'aide et l'amélioration du code, niveau rapidité c'est top

j'ai un soucis par contre pour la pagination avec la nouvelle façon le fichier mais un nombre de page que je ne comprends pas exemple 4/30 alors qu'il n'y a que 4 pages, comment régler ce soucis ?

Bonjour

Curieux... mais cela peu peut être venir de la plage d'impression qui doit être définie.

Donc faites déjà ceci dans la feuille Analyse :
- Sélectionnez le tableau complet dans votre feuille
- Allez dans menu --> Mise en page --> Zone impression --> cliquez sur définir
- Allez dans le module où vous avez copier la macro Sub Numeroterpage() et exécutez là

Si cela ne fonctionne pas mettez le fichier en ligne le fichier sur lequel vous testez

Voici mon fichier car cela ne fonctionne pas

Je ne comprends pas désolé

19essai.xlsm (166.20 Ko)

Oui mais vous êtes en mode page et pour définir l'impression vous devez être en mode normal

Ouvrez le fichier posté et allez dans aperçu avant impression, vous ne verrez qu'une page. Donc votre plage d'impression n'est pas bonne

Effectivement cela fonctionne,

il est donc impossible d'être en mode page ?

en tous cas MERCI !

avez vous une idée pour les autres macros ? (car du coup mes sub on été supprimée)

on ne peut pas définir une zone d'impression en mode page.

Ce que l'on peut faire c'est ajouter une instruction dans le code Tableau juste avant --> .PageSetup...... --> Mettez cette ligne --> ActiveWindow.View = xlNormalView

[s=co-4f81bd][/s]

Ce que l'on peut faire c'est ajouter une instruction dans le code Tableau juste avant --> .PageSetup...... --> Mettez cette ligne --> ActiveWindow.View = xlNormalView

C'est vraiment top du coup sa marche du tonnerre MERCI (en plus on garde la mise en page)

Avez vous une idée pour la macro suivant, comment mettre la pagination à jour ? puis je utiliser la même structure que la macro tableau ?

Mika

Avez vous une idée pour la macro suivant, comment mettre la pagination à jour ?

c'est quelle macro ?

Avec celle ci

Sub RévisionAR()

'Bouton permettant d'ajouter une page dans le même modèle que le tableau
'pour les raisons de la révision du document

'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True

With Sheets("Analyse de risques")
    'Rechercher la denière ligne non vide
    Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
    y = (Int(Ligne / 30))
    Ligne = (30 * y) + 1
    'Coller valeur
    Sheets("Modèles").Rows("1:30").Copy .Rows(Ligne)
    'Mise a jour pagination
    .Range("AB" & Ligne + 1).FormulaR1C1 = "=NumPage() & "" sur "" & Totpage()"
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False

End Sub

OK. Je regardes

Est-ce que cela est normal que lors de l'ajout d'une révision, les signatures signatures restent sur la première page dans les lignes 26 à 30

Oui les signatures ne doivent pas changer de pages (la trame ne doit pas bouger) désolé :(

J'aurais bien essayé de ne faire qu'un seul code pour éviter le surplus de bouton mais cela nécessite de faire un repérage sur la feuille.

Sinon faites les modifications suivantes

1. remplacez la macro tableau par celle ci-dessous

Sub Tableau()
'Fonction ajouter une page type tableau à la suite de l'analyse de risques
Dim derniereligne As Integer

'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True

With Sheets("Analyse de risques")
    'Rechercher la denière ligne non vide
    derniereligne = .Cells(.Rows.Count, 1).End(xlUp).Row ' + 3
    'Controle si la dernière ligne ne contient pas le mot Risque
    If .Range("A" & derniereligne) = "Risque" Then Exit Sub
    'Coller valeur
    Sheets("Modèles").Rows("31:45").Copy .Rows(derniereligne + 3)
    'Mise a jour pagination
    Call NumeroterPage
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False
End Sub

2. Remplacez la macro Revision

Sub RévisionAR()
'Bouton permettant d'ajouter une page dans le même modèle que le tableau
'pour les raisons de la révision du document

'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True
With Sheets("Analyse de risques")
    'Rechercher la denière ligne non vide
    Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
    y = (Int(Ligne / 30))
    a = (30 * y) + 1
    'Coller valeur
    Sheets("Modèles").Rows("1:30").Copy .Rows(Ligne)
    'Mise a jour pagination
    Call NumeroterPage
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False
End Sub

3. remplacez le code NumeroterPage par celui ci-dessous

Sub NumeroterPage()
Dim WS As Worksheet
Dim Nblignes As Integer
Dim Totpage As Byte, VC As Byte, HC As Byte

Set WS = Sheets("Analyse de risques")
With WS
    'mise en page pour impression
    ActiveWindow.View = xlNormalView
    Nblignes = .UsedRange.Rows.Count - 1
    .PageSetup.PrintArea = "$A$1:$AD$" & Nblignes 'derniereligne + 15

    HC = .HPageBreaks.Count + 1
    VC = .VPageBreaks.Count + 1
    Totpage = HC * VC
End With

Dim prem As String
Dim cel As Range
Dim i As Byte

With WS.Cells
Set cel = .Find("Pagination", LookIn:=xlValues, lookat:=xlPart)
    If Not cel Is Nothing Then
    prem = cel.Address
    i = 1
        Do
        WS.Range("AB" & cel.Row) = i & " sur " & Totpage
        i = i + 1
        Set cel = .FindNext(cel)
        Loop While Not cel Is Nothing And prem <> cel.Address
    End If
End With
End Sub

Si vous voyez un souci dans la numérotation page, n'hésitez par à relancer le code numeroterpage

Cela ne fonctionne pas la nouvelle page ne s'insère pas entre la 2 et la 3 mais se colle sur la 3ieme page.

Mon code ne devait pas être bon au départ.

1. Ecrivez moi un exemple que je le reproduise.

2. Important !! Pour la numérotation de page, un truc de dingue ! ... il faut faire défiler la barre verticale jusque la dernière ligne pour qu'excel prenne en compte le nombre de pages si on en ajoute une.

Donc dans le code Numeroterpage, il faut ajouter cette ligne--> ActiveWindow.ScrollRow = Nblignes juste en dessous Nblignes =.....

Désolé je ne m'exprime peut être pas comme il faut.

Schéma de départ

page 1 ligne 1 à 30 (30 lignes)

page 2 ligne 31 à 61 (31 lignes)

page 3 ligne 62 à 76 (15 lignes)

Page 4 ligne 77 à 91 (15lignes)

Si le bouton est activé en ligne 30 la selection copié de la feuille modèles de la ligne 46 à 75 doit s'insérer entre la page 1 et la page 2

c'est à dire

page 1 ligne 1 à 30 (30 lignes)

Page 2 ligne 31 à 60 (30 lignes)

page 2 ligne 61 à 91 (31 lignes)

page 3 ligne 92 à 106 (15lignes)

Page 4 ligne 107 à 121 (15lignes)

J'espère avoir été assez clair

Vous êtes sur qu'avec RevisionAR ce sont les lignes 46 à 75 car depuis le début ce sont les lignes 1 à 30 qui sont concernées par le bouton en ligne 30

Sinon essayez avec ce code modifié

Sub RévisionAR()

'Bouton permettant d'ajouter une page dans le même modèle que le tableau
'pour les raisons de la révision du document

'Mettre la feuille des modèles visible
Sheets("Modèles").Visible = True

With Sheets("Analyse de risques")
    'Rechercher la denière ligne non vide
    Ligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
    y = (Int(Ligne / 30))
    a = (30 * y) + 1
    'Coller valeur
    Sheets("Modèles").Rows("1:30").Copy
    .Rows(a).Insert Shift:=xlDown
    'Mise a jour pagination
    Call NumeroterPage
End With
'Remettre en masquer la feuille modèles
Sheets("Modèles").Visible = False

End Sub

Effectivement je me suis trompé dans mes lignes de mes modèles

Je vous remercie cela fonctionne énormément mieux je vais me débrouiller pour les autres macros

Un grand MERCI !

Rechercher des sujets similaires à "amelioration code codeur"