Bonjour
j’ai un problème avec une macro qui exporte en pdf une feuille d’un fichier calc et l’imprime en 2 exemplaire et sauve le fichier à ce stade afin d’effectuer des commandes dans un supermarché
c’est le pdf qui est envoyé par mail au supermarché
cette feuille fait 7 colonnes visibles de large
et à 15 lignes fixes qui sont toujours présentes
suivi de 0 à 70 lignes visibles de produits à commander
En fait cette liste fait 150 lignes mais ne sont visibles que les lignes qui ont en commun le même supermarché de référence et dont la commande est supérieur à 0
Cela marche bien jusqu’à 40 lignes de commande (j’ai pas d’exemple d’en avoir mis plus)
mais aujourd’hui ma commande fait 70 lignes de commande et ne sort pas correctement en pdf:
la longue liste est illisible sur une feuille A4 et de plus les 5 premières lignes fixes et les 5 dernières lignes ne sont pas prisent en compte ce qui n’est pas exploitable par le fournisseur
Je cherche un moyen de scinder la liste en deux pour en sortir 2 pages pdf qui soient visible sur une page A4
nommées BON_DE_COMMANDE_FOURNISSEUR_20210831_p1 ET _p2 Si cette liste est trop longue
et d’en garder une sauvegarde.ods si d’aventure il me prennait de modifier ce fichier pour y ajouter ou enlever une quantité ce qui est possible actuellement.
(le fichier est régulièrement sauvegardé avant et après aux étapes importantes )
j’ai un peu peur de perdre les données du premier export par écrasement du second sur le premier
Désolé mais je n’arrive pas à transférer mon fichier (trop lourd) ainsi que ma macro au format .txt
[Résolu][Calc] export pdf en 2 parties si liste trop longue
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre hOOnoraire
- Messages : 119
- Inscription : 21 janv. 2020 23:49
[Résolu][Calc] export pdf en 2 parties si liste trop longue
Dernière modification par eric63 le 01 sept. 2021 18:49, modifié 2 fois.
Version: 7.4.4.2 / LibreOffice Community
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2
-
- GourOOu
- Messages : 9362
- Inscription : 18 juil. 2008 15:29
- Localisation : F-Oise + F-Savoie
Re: [Calc] export pdf en 2 parties si liste trop longue
Bonjour,
Pour la macro, lors de la rédaction de votre message, cliquez sur le bouton
Si vous ne pouvez pas alléger un fichier dépassant les 500 ko acceptés vous pouvez le joindre en passant uniquement par le site https://www.cjoint.com/eric63 a écrit :fichier (trop lourd)
Pour la macro, lors de la rédaction de votre message, cliquez sur le bouton
Code : Tout sélectionner
[attachment=1]Capture d’écran 2021-08-14 à 09.03.21.png[/attachment]Vous verrez apparaître deux balises, collez alors le texte de votre macro entre ces deux balises.
Ou alors, faites l'inverse, collez votre code dans le message, sélectionnez-le en entier et cl;iquez sur le bouton [Code]. Résultat :
[attachment=0]Capture d’écran 2021-08-14 à 09.03.09.png[/attachment]
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_402 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
Adoptium-temurinJDK-jre_1.8.0_402 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
-
- IdOOle de la suite
- Messages : 25173
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] export pdf en 2 parties si liste trop longue
Salut,
Il nous faut juste l'exhaustif visant à comprendre et reproduire.
Tu joins ce document avec uniquement les données nécessaires et la macro.
Tu ajoutes des copies écran avec l'effet de départ et d'arrivée et/ou escompté
Il y a fort à parier qu'en faisant cet exercice, tu résolves toi-même le problème.
Comme d'habitude, il est inutile de nous envoyer un document si complexe qu'on va perdre du temps à l'étudier.eric63 a écrit :Désolé mais je n’arrive pas à transférer mon fichier (trop lourd)
Il nous faut juste l'exhaustif visant à comprendre et reproduire.
Tu joins ce document avec uniquement les données nécessaires et la macro.
Tu ajoutes des copies écran avec l'effet de départ et d'arrivée et/ou escompté
Il y a fort à parier qu'en faisant cet exercice, tu résolves toi-même le problème.
-
- Membre hOOnoraire
- Messages : 119
- Inscription : 21 janv. 2020 23:49
Re: [Calc] export pdf en 2 parties si liste trop longue
J’avance un peu dans mes recherches mais je bute toujours sur un résultat final souhaité
export d’un pdf de la zone concerné et impression de cette zone dans la foulée
mais pour l’instant j’ai soit l’impression de la page haute et de la page basse soit l’export pdf jamais les trois dans la foulée
je pars d’une feuille de travail de 11 colonnes sur 151 lignes
au départ toutes les cellules sont visibles
les cellules blanches sont des formules les jaunes sont les seules à être remplies manuellement
le fournisseur en C3 et la date de commande en C7 sont rentrés au préalable et sauvegardé sous le nom du fichier Commande_FOURNISSEUR_AAAAMMJJ.ods
je rempli manuellement les colonnes en I pour indiquer le nombre de lots à commander
puis
en appuyant sur un Bouton (en jk1) je démarre une «supermacro» composée de plusieurs macros
j’ai en fait une dizaine de macros qui sont imbriqué à partir d’un corps central main
qui affichent puis masquent les colonnes et lignes inutiles
donc je me retrouve avec un fichier1 en cours de macro juste avant les macros d’impression et d’export pdf comme la liste de commande est longue 70 lignes de commande
je suis obligé de la scinder en 2 partie
je peux choisir au départ le nombre de lignes visibles dans la partie 1 ici c’est 31 (en L12) lignes visibles sur 87 lignes concernées (L11)
c’est la zone imprimable en blanc
donc il me reste à imprimer cette première partie en double exemplaire (qui me sert de liste lors des receptions de commandes) puis exporter le pdf (qui sert pour l’envoi par mail au fournisseur) et imprimer la partie 2 et exporter en pdf la partie 2
c‘est cette phase qui ne fonctionne pas bien de bout en bout
macro ExportPlage variable global valid et page à 1 début ligne 900
macro SauvePdf
macro export_pdf
je ne sais pas si cela peux vous satisfaire
export d’un pdf de la zone concerné et impression de cette zone dans la foulée
mais pour l’instant j’ai soit l’impression de la page haute et de la page basse soit l’export pdf jamais les trois dans la foulée
je pars d’une feuille de travail de 11 colonnes sur 151 lignes
au départ toutes les cellules sont visibles
les cellules blanches sont des formules les jaunes sont les seules à être remplies manuellement
le fournisseur en C3 et la date de commande en C7 sont rentrés au préalable et sauvegardé sous le nom du fichier Commande_FOURNISSEUR_AAAAMMJJ.ods
je rempli manuellement les colonnes en I pour indiquer le nombre de lots à commander
puis
en appuyant sur un Bouton (en jk1) je démarre une «supermacro» composée de plusieurs macros
j’ai en fait une dizaine de macros qui sont imbriqué à partir d’un corps central main
qui affichent puis masquent les colonnes et lignes inutiles
donc je me retrouve avec un fichier1 en cours de macro juste avant les macros d’impression et d’export pdf comme la liste de commande est longue 70 lignes de commande
je suis obligé de la scinder en 2 partie
je peux choisir au départ le nombre de lignes visibles dans la partie 1 ici c’est 31 (en L12) lignes visibles sur 87 lignes concernées (L11)
c’est la zone imprimable en blanc
donc il me reste à imprimer cette première partie en double exemplaire (qui me sert de liste lors des receptions de commandes) puis exporter le pdf (qui sert pour l’envoi par mail au fournisseur) et imprimer la partie 2 et exporter en pdf la partie 2
c‘est cette phase qui ne fonctionne pas bien de bout en bout
macro ExportPlage variable global valid et page à 1 début ligne 900
Code : Tout sélectionner
Sub ExportPlage 'vient de 155
If valid=1 Then
msgbox("903:macro adaptée de celle de zutix")
Else EndIf
dim oDoc As Object, oSheet As Object
dim Plage(0) as new com.sun.star.table.CellRangeAddress
dim Plage2(0) as new com.sun.star.table.CellRangeAddress
dim d as integer,page as integer, f as integer,f1 as integer,f2 as integer,f3 as integer, g as integer, t as integer, nb as integer, droite as integer, gauche as Integer
Dim Props() As New com.sun.star.beans.PropertyValue
oDoc=ThisComponent
oSheet=oDoc.Sheets(0)
oDoc.CurrentController.ActiveSheet=oSheet
t= oSheet.GetCellRangeByName("A2").String 'total lignes
f= oSheet.GetCellRangeByName("L11").String 'nombre de lignes totales sur la première page
f1= oSheet.GetCellRangeByName("L12").String 'NUMERO de ligne VISIBLE DU SAUT DE PAGE
f2=oSheet.GetCellRangeByName("L10").String 'NUMERO DE LIGNE PRIS EN COMPTE AU SAUT DE PAGE DE la deuxième page
f3=oSheet.GetCellRangeByName("L9").String 'nombre de lignes totales sur la deuxième page
If f2=0 Then
msgbox("922:Aucun lot enregistré pour ce fournisseur: Impression ANNULÉE ")
Exit Sub
End if
page=1 'numero page
nb=f 'nombre de lignes visibles par page voulues à l’impression
d=1-nb 'debut ligne impression
g=0 'etat du compteur de ligne activées impression faire un compteur pour
droite=10 'position colonne visible la plus a droite
gauche=1 'position colonne visible la plus a gauche
If valid=1 Then
msgbox "934:Le pdf de la page " & page & " se fera de la colonne "& gauche+1 &" ligne "& d+nb+1 & " à la colonne "& droite+1 &" ligne "& g+nb+1
Else EndIf
while g<f3-1 'démarrage
d=d+nb ' debut de ligne
If page=1 then g=g+nb'fin de ligne page1
if page=2 then g=f3 'fin de ligne page2
if g>t then g=t
Plage(0)=Plage2(0) 'la deuxième page est basculée
'la page s’imprime de la cellule A
'msgbox("impression de la colonne "&cgauche&"et ligne "&d&"à colonne "&cdroite&" et ligne "&g)
Plage(0)=oSheet.getCellRangeByPosition(1,d,10,g).RangeAddress
oSheet.PrintAreas=Plage()
msgbox("949:Vous avez préparé les feuilles dans l’imprimante ? pour les lignes " & d+1 & " à " & g+1)
oDoc.Print(Props())
msgbox("951:export pdf fait pour les lignes " & d+1 & " à " & g+1)
'sauvegarde de la page pdf
msgbox "953:sauvegarde de la page " & Page
'
sauvePdf ("BON DE COMMANDE") 'va à 1000
'vient de 1120
page=page+1
Wend 'retour au while 937
If valid=1 Then
msgbox("960:impression achevée")
Else endif
if MsgBox ("962:un autre exemplaire ?", 292, "Nombre d'exemplaire")=6 Then
page=1 'numero page
nb=f 'nombre de lignes visibles par page voulues à l’impression
d=1-nb 'debut ligne impression
g=0 'etat du compteur de ligne activées impression faire un compteur pour
droite=10 'position colonne visible la plus a droite
gauche=1 'position colonne visible la plus a gauche
msgbox "796:votre impression se fera de la colonne "& gauche+1 &" ligne "& d+nb+1 & " à la colonne "& droite+1 &" ligne "& g+nb+1
while g<f3-1 'démarrage
d=d+nb ' debut de ligne
If page=1 then g=g+nb'fin de ligne page1
if page=2 then g=f3 'fin de ligne page2
if g>t then g=t '
Plage(0)=Plage2(0) 'la deuxième page est basculée
'la page s’imprime de la cellule A
'msgbox"804:impression de la colonne "&gauche&"et ligne "&d&"à colonne "&droite&" et ligne "&g
Plage(0)=oSheet.getCellRangeByPosition(1,d,10,g).RangeAddress
oSheet.PrintAreas=Plage()
oDoc.Print(Props())
msgbox("982:impression faite pour les lignes " & d+1 & " à " & g+1)
Page=page+1
wend
msgbox("985:impression achevée")
Else EndIf
End Sub 'retour en157
Code : Tout sélectionner
Sub SauvePdf (sTableName As String) 'vient de ligne 955
dim oDoc as object, oSheets as object, oSheet as object, oPlage as object, oEnCours as object, oRanges as object, maCellule As Object,oFeuille1 As Object,oCol as Object
dim lEndCol as long, lEndRow as long, lCoord(1) as long
dim nVar as integer, tri as integer, nBascule as integer,NombreProduits As Integer
dim sPath as string,sStandard as string, sName as string, validation as string
'
oDoc = ThisComponent
'
MaFeuil = oDoc.CurrentController.ActiveSheet
REM introduction de la cellule date en texte aaaammjj - 20180102
Madate = MaFeuil.GetCellRangeByName("D7").String
rem Récupération du contenu de la cellule C2 (nom et date du fichier) dans la feuille active
Montextedate = MaFeuil.GetCellRangeByName("C2").String
rem Récupération du contenu de la cellule C3 (fournisseur)dans la feuille active
MonFournisseur = MaFeuil.GetCellRangeByName("C3").String
rem Récupération du contenu de la cellule H2 (nom et date fichier bon de commande pour pdf)dans la feuille active
MonTexteExport = MaFeuil.GetCellRangeByName("H2").String
rem Récupération du contenu de la cellule A5 (OK OU NON POUR EVITER ERREUR SAISIE COMPLETE DU NOMBRE COMPARER AU PRODUIT bon de commande pour pdf)dans la feuille active
Validation = MaFeuil.GetCellRangeByName("A5").String
rem Récupération du contenu de la cellule A2 (NOMBRE TOTAL DE PRODUITS + MARGE DE 60 POUR ENGLOBER TOUS LES PRODUITS CHOISIS)
NombreProduits = MaFeuil.GetCellRangeByName("A2").String
'rem Récupération du contenu de la cellule E5 (nom du fichier modèle)
NomModele = MaFeuil.GetCellRangeByName("E5").String
'rem Récupération du contenu de la cellule D1 (VALEUR D'ENREGISTREMENT PDF)
VALEURD1= MaFeuil.GetCellRangeByName("D1").String
'rem Récupération du contenu de la cellule BH3 (NIVEAU D’ACCÈS)
Niveau= MaFeuil.GetCellRangeByName("BH3").String
'REM UTILISER LA MACRO OuSuisJe pour verifier le chemin des dossiers
'
'rem determine si le système est sur linux (AF4= file:///home) ou windows (AF4= file:///C:)
'
'rem chemin de base linux ET les autres chemins additionnels
BaseOSL = MaFeuil.GetCellRangeByName("AF4").String
' 'chemin du Dossier Personnel linux
DpersoL = MaFeuil.GetCellRangeByName("AH4").String
'Chemin Différencié Des Dossiers linux
CDDDL = MaFeuil.GetCellRangeByName("AJ4").String
'rem Chemin Commun Des Dossiers
CCDD = MaFeuil.GetCellRangeByName("AM4").String
sPath = BaseOSL & DpersoL & CDDDL &CCDD & "/" & MonFournisseur & "/"
if page=0 then
sName = MonTexteExport & ".pdf"
Else sName = MonTexteExport & "-" & page & ".pdf"
endif
oSheets = oDoc.Sheets
'
' Vérifie que le classeur contient une feuille de ce nom
if oDoc.Sheets.hasByName(sTableName) then
oSheet = oDoc.Sheets.getByName(sTableName)
' nVar = 0
'Export_Imprime_pdf
'' Vérifie que le fichier cible existe déjà ou non
'' Si oui, possibilité d'écraser ou donner un autre nom
do while FileExists(sPath & sName) and nVar <> 2 and nVar <> 6
nVar = MsgBox ("1057:le fichier "& Chr(10) & _
Chr(10) & sName & Chr(10) & _
Chr(10) &" existe déjà. " & Chr(10) & _
"""Oui"" pour l'écraser ? " & Chr(10) & _
Chr(10) & """Non"" pour sauvegarder ce fichier sous la forme" & Chr(10) & _
Chr(10) & MonTexteExport & "-"& "xx" & ".pdf" & Chr(10) & _
Chr(10) & "à coté de celui d'origine ou du fichier indexé précédent ou" & Chr(10) & _
Chr(10) & """Annuler"" pour arrêter l'export, " & Chr(10)& Chr(10) & _ , 35, "Choix proposés")
'rem inhibé pour ne pas tenir compte et simplifier la modification du nom
if nVar = 7 then
index=index+1
sName = MonTexteExport & "-" & index & ".pdf"
'rem incrémantation du fichier si existant
If FileExists(sPath & sName) Then
index= index+1
sName = MonTexteExport & "-" & index & ".pdf"
Else end if
end if
MsgBox ("1075:le fichier sera sauvegardé sous "& sName)
Loop
'if nVar <> 2 then
oDoc.addActionLock
oDoc.LockControllers
' Mémorise la sélection courante
oEnCours = oDoc.currentselection
' Vérifie si au moins une zone d'impression a été définie pour cette feuille
' Si oui on l'utilise, sinon on exporte toute la plage utilisée dans la feuille
if ubound(oSheet.PrintAreas) <> -1 then
' Création d'une instance "plage" vide qui permet de déselectionner
' (utile par ex. si l'utilisateur avait sélectionné un graphisme)
oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
oDoc.currentcontroller.activeSheet = oSheet
oDoc.currentcontroller.select(oRanges)
else
lCoord = GetLastUsed(oSheet)
oPlage = oSheet.getCellRangeByPosition(0, 0, lCoord(0), lCoord(1))
oDoc.currentcontroller.select(oPlage)
end if
export_pdf(sPath & sName) 'va à 400
'vient de 420
Code : Tout sélectionner
sub export_pdf (sFileName AS String) 'vient de 1105; 205
dim propFich(2) as new com.sun.star.beans.PropertyValue
dim filterProps(0) as new com.sun.star.beans.PropertyValue
filterProps(0).Name = "Selection"
filterProps(0).Value = thisComponent.currentSelection
propFich(0).Name = "FilterName"
propFich(0).Value = "calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filterProps()
ThisComponent.storeToURL(sFileName,propFich()) ’j’ai une erreur sur cette ligne
MsgBox ("414:enregistrement du pdf; vérifier si la synchro du cloud est terminé" )
end Sub 'retour à 1106;206
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Version: 7.4.4.2 / LibreOffice Community
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] export pdf en 2 parties si liste trop longue
Bonjour,
propFich(2) 2 signifie que tu dois définir 3 propriétés or il n'y en a que 2 :
"FilterName" et "FilterData".
Essaye en remplaçant par
A+
Sans approfondissement de ma part, je constate une erreur dans ta sub export_pdf (sFileName AS String) :eric63 a écrit :j’ai une erreur sur cette ligne
Code : Tout sélectionner
dim propFich(2) as new com.sun.star.beans.PropertyValue
"FilterName" et "FilterData".
Essaye en remplaçant par
Code : Tout sélectionner
dim propFich(1) as new com.sun.star.beans.PropertyValue
-
- Membre hOOnoraire
- Messages : 119
- Inscription : 21 janv. 2020 23:49
Re: [Calc] export pdf en 2 parties si liste trop longue
merci zeguedon c’est corrigé
j’ai repris en profondeur mes macros et je suis arrivé à un résultat satisfaisant ça imprime la plage haute réimprime celle ci si demandé puis exporte en pdf et recommence pour la partie basse…
Bon j’ai encore un problème sur la fin de mes macros qui galopent plus que nécéssaire, mais le principal est acquis.
Je vous remercie de vos attentions
je passe en résolu même si je ne donne pas ıçi ma solution car d‘une ce n’est pas complètement stable
et je ne sais pas si ça apportera grand chose au moulin
les macros déjà publiées sont toujours d’actualité moyennant quelques modifications à de nombreux endroits
et comme dit Dude Il y a fort à parier qu'en faisant cet exercice, tu résolves toi-même le problème. c’est tout à fait ça
j’ai repris en profondeur mes macros et je suis arrivé à un résultat satisfaisant ça imprime la plage haute réimprime celle ci si demandé puis exporte en pdf et recommence pour la partie basse…
Bon j’ai encore un problème sur la fin de mes macros qui galopent plus que nécéssaire, mais le principal est acquis.
Je vous remercie de vos attentions
je passe en résolu même si je ne donne pas ıçi ma solution car d‘une ce n’est pas complètement stable
et je ne sais pas si ça apportera grand chose au moulin
les macros déjà publiées sont toujours d’actualité moyennant quelques modifications à de nombreux endroits
et comme dit Dude Il y a fort à parier qu'en faisant cet exercice, tu résolves toi-même le problème. c’est tout à fait ça
Version: 7.4.4.2 / LibreOffice Community
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2
Build ID: 40(Build:3)
CPU threads: 4; OS: Linux 5.19; UI render: default; VCL: kf5 (cairo+wayland)
Locale: fr-FR (fr_FR.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.4.4 -0ubuntu0.22.10.2