Document en 1 ou 2 pages

  • Initiateur de la discussion Initiateur de la discussion 1.414
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

1

1.414

Guest
Bonjour le Forum

Voila je fais des devis est factures qui tiennent sur une ou deux pages

J’aurai besoin de vos lumières pour savoir s’il est possible d’automatisé la création de la page 2 si besoin

Sachant que :
-Il est difficile parfois de savoir le nombre de page au départ (jamais plus de deux)
-La longueur du champ désignation peut être longue ou courte (fusion ou modification de hauteur de ligne ?)
-je récupère les données des devis dans une bdd xl pour faire les factures
-Je récupère les ouvrage et taches et prixu dans une autre bdd xl

Je ne veux pas abusé de votre temps
Dite moi juste si c’est possible
Et si oui un début d’idée

En fichiers joints une idée de ce que peuvent être mes documents en 1 ou 2 pages

Merci de vos conseils

Cordialement

1.414 Olivier
 

Pièces jointes

Re : Document en 1 ou 2 pages

Bonjour 1.414,

Pas de problème pour un début d'idée.

Pour connaître le nombre de pages à imprimer dans la feuille active exécuter :

Code:
n = ExecuteExcel4Macro("GET.DOCUMENT(50)")
MsgBox n 'pour tester
A+
 
Re : Document en 1 ou 2 pages

Re,

Avec de la suite dans les idées :

Code:
Sub Pages1()
Dim n As Byte, i&, a1$, a2$
n = ExecuteExcel4Macro("GET.DOCUMENT(50)")
With ActiveSheet.UsedRange
  If n = 1 Then
    a1 = .Address(0, 0)
    MsgBox "Une page " & a1
  Else
    Application.ScreenUpdating = False
    For i = .Rows.Count To 1 Step -1
      .Rows(i).Hidden = True
      n = ExecuteExcel4Macro("GET.DOCUMENT(50)")
      If n = 1 Then Exit For
    Next
    .Rows.Hidden = False
    Application.ScreenUpdating = False
    a1 = .Resize(i - 1).Address(0, 0)
    a2 = .Rows(i & ":" & .Rows.Count).Address(0, 0)
    MsgBox "1ère page " & a1 & vbLf & "2ème page " & a2
  End If
End With
End Sub
ou avec HPageBreaks (sauts de page) :

Code:
Sub Pages2()
Dim n As Byte, i&, a1$, a2$
n = ExecuteExcel4Macro("GET.DOCUMENT(50)")
With ActiveSheet.UsedRange
  If n = 1 Then
    a1 = .Address(0, 0)
    MsgBox "Une page " & a1
  Else
    .Parent.PageSetup.PrintArea = .Address 'définit la zone d'impression
    i = .Parent.HPageBreaks(1).Location.Row - .Row
    a1 = .Resize(i).Address(0, 0)
    a2 = .Rows(i + 1 & ":" & .Rows.Count).Address(0, 0)
    MsgBox "1ère page " & a1 & vbLf & "2ème page " & a2
  End If
End With
End Sub
Cette 2ème macro est plus rapide mais l'utilisation de HPageBreaks donne parfois des résultats erronés.

Peut-être qu'avec 2 pages elle fonctionne toujours bien, je n'en sais rien.

A+
 
Re : Document en 1 ou 2 pages

voila encore des infos qui vont m’être utile job 🙄

de mon coté je me demande si je ne vais pas découper mes descriptions pour avoir des hauteur de ligne constentes
avec 1 feuille "saisie" 1 feuille "1page" 1 feuille "2pages"
quelque heures de travail pour le bleu que je suis
 
Dernière modification par un modérateur:
Re : Document en 1 ou 2 pages

Re,

En testant les 2 macros précédentes sur le fichier j'ai constaté 2 problèmes avec la 1ère sur la feuille '2 pages' :

- elle ne donne pas les mêmes adresses que la 2ème, et ceci à cause des images

- elle beugue si une zone d'impression a été définie (normal puisque 2 pages).

Je donc ajouté ces 3 lignes de code :

Code:
.Parent.PageSetup.PrintArea = "" 'annule la zone d'impression
.Parent.DrawingObjects.Visible = False 'masque les objets
'--------
.Parent.DrawingObjects.Visible = True 'affiche les objets
Voyez le fichier joint.

En conclusion la 1ère macro est trop compliquée et lente.

La 2ème macro fonctionne toujours bien, c'est donc elle qu'il faut utiliser.

A+
 

Pièces jointes

Re : Document en 1 ou 2 pages

Job75

l'adresse ne dépend t'elle pas de l’imprimante et non de l'affichage
VBA ne tien pas compte des cellules vide en dessous de n° siret un espace en A42 règle le problème

trop cool Job
A+
 
Re : Document en 1 ou 2 pages

Re 1.414,

En effet on peut ajouter des espaces pour agrandir la zone d'impression.

On peut aussi faire en sorte que la zone d'impression englobe tous les objets :

Code:
Sub Pages()
Dim plage As Range, s As Shape, n As Byte, i&, a1$, a2$
With ActiveSheet
  Set plage = .UsedRange
  For Each s In .Shapes 'pour imprimer tous les objets
    Set plage = .Range(s.BottomRightCell, plage)
  Next
  .PageSetup.PrintArea = "" 'annule la zone d'impression
  .ResetAllPageBreaks 'supprime tous les sauts de pages
  n = ExecuteExcel4Macro("GET.DOCUMENT(50)") 'nombre de pages
  .PageSetup.PrintArea = plage.Address 'définit la zone d'impression
  If n = 1 Then
    a1 = plage.Address(0, 0)
    MsgBox "Une page " & a1
  Else
    i = .HPageBreaks(1).Location.Row - plage.Row
    With plage
      a1 = .Resize(i).Address(0, 0)
      a2 = .Rows(i + 1 & ":" & .Rows.Count).Address(0, 0)
    End With
    MsgBox "1ère page " & a1 & vbLf & "2ème page " & a2
  End If
End With
End Sub
J'ai aussi ajouté au début la suppression de la zone d'impression et des sauts de pages.

Fichier (2).

Edit : j'ai "nettoyé" les colonnes J K L pour que la dernière colonne soit bien la colonne I...

A+
 

Pièces jointes

Dernière édition:
Re : Document en 1 ou 2 pages

Bonjour 1.414,

Je vous ai donné des solutions pour déterminer le nombre et les adresses des pages à imprimer.

Maintenant s'il s'agit de créer de nouvelles factures, a priori le nombre de pages n'a pas d'importance.

Il suffit de copier une feuille "Modèle" que l'on renseignera :

- automatiquement pour son numéro et les données relatives au client

- manuellement pour le reste.

Il y a de nombreuses discussions sur ce genre de chose.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

G
Réponses
0
Affichages
887
G
K
  • Question Question
Réponses
10
Affichages
2 K
Kidcarotte
K
F
Réponses
2
Affichages
919
fifou6901
F
D
Réponses
1
Affichages
2 K
DukeDevlin
D
P
Réponses
12
Affichages
2 K
pegaseblanc
P
Retour