[Résolu] [Calc]Copier un groupe de 4 lignes non vides

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

[Résolu] [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bonjour à tous, je me présente, retraité et passionné d'informatique, mais débutant en construction de macro, c'est pour cela que j’intervient sur le forum.
Trésorier d'une petite association, j'ai construit un formulaire de saisies de données, avec principalement des listes déroulantes.
Les lignes s'incrémentent par la fonction - grande.valeur - et un compteur pour les numéros de pièces.
J'ai construit une macro pour copier tout cela dans un tableau, cela fonctionne partiellement.
Il me faut trouver les codes pour ne copier que les lignes non vide, a savoir un groupe de 4 lignes au maximum
Si H4 non vide copier la ligne A4:J4
Si H5 Non vide copier la ligne A5:J5
Il peut n'y avoir que 2 lignes dan ce groupe
De plus, comment copier/coller, toutes les lignes à la suite dans le tableau, toutes les lignes sont incrémentées.
Ci-joint la macro que j'ai construite :

Code : Tout sélectionner

sub EnregistrerSaisies
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$13:$K$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags"
args3(0).Value = "V"

dispatcher.executeDispatch(document, ".uno:InsertCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$2:$J$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$A$13:$J$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(5) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "SVDT"
args8(1).Name = "FormulaCommand"
args8(1).Value = 0
args8(2).Name = "SkipEmptyCells"
args8(2).Value = false
args8(3).Name = "Transpose"
args8(3).Value = false
args8(4).Name = "AsLink"
args8(4).Value = false
args8(5).Name = "MoveMode"
args8(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$A$3:$J$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$A$13:$J$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "Flags"
args11(0).Value = "V"

dispatcher.executeDispatch(document, ".uno:InsertCell", "", 0, args11())

rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "ToPoint"
args12(0).Value = "$A$3:$J$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "ToPoint"
args14(0).Value = "$A$13:$K$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args14())

rem ----------------------------------------------------------------------
dim args15(5) as new com.sun.star.beans.PropertyValue
args15(0).Name = "Flags"
args15(0).Value = "SVDT"
args15(1).Name = "FormulaCommand"
args15(1).Value = 0
args15(2).Name = "SkipEmptyCells"
args15(2).Value = false
args15(3).Name = "Transpose"
args15(3).Value = false
args15(4).Name = "AsLink"
args15(4).Value = false
args15(5).Name = "MoveMode"
args15(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args15())

rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "ToPoint"
args16(0).Value = "$B$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args16())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "ToPoint"
args17(0).Value = "$A$13:$K$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args17())

rem ----------------------------------------------------------------------
dim args18(0) as new com.sun.star.beans.PropertyValue
args18(0).Name = "Flags"
args18(0).Value = "V"

dispatcher.executeDispatch(document, ".uno:InsertCell", "", 0, args18())

rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "ToPoint"
args19(0).Value = "$A$4:$J$4"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args19())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "ToPoint"
args21(0).Value = "$A$13:$J$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args21())

rem ----------------------------------------------------------------------
dim args22(5) as new com.sun.star.beans.PropertyValue
args22(0).Name = "Flags"
args22(0).Value = "SVDT"
args22(1).Name = "FormulaCommand"
args22(1).Value = 0
args22(2).Name = "SkipEmptyCells"
args22(2).Value = false
args22(3).Name = "Transpose"
args22(3).Value = false
args22(4).Name = "AsLink"
args22(4).Value = false
args22(5).Name = "MoveMode"
args22(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args22())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$A$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())

rem ----------------------------------------------------------------------
dim args24(0) as new com.sun.star.beans.PropertyValue
args24(0).Name = "ToPoint"
args24(0).Value = "$A$13:$K$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args24())

rem ----------------------------------------------------------------------
dim args25(0) as new com.sun.star.beans.PropertyValue
args25(0).Name = "Flags"
args25(0).Value = "V"

dispatcher.executeDispatch(document, ".uno:InsertCell", "", 0, args25())

rem ----------------------------------------------------------------------
dim args26(0) as new com.sun.star.beans.PropertyValue
args26(0).Name = "ToPoint"
args26(0).Value = "$A$5:$J$5"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args26())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args28(0) as new com.sun.star.beans.PropertyValue
args28(0).Name = "ToPoint"
args28(0).Value = "$A$13:$J$13"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args28())

rem ----------------------------------------------------------------------
dim args29(5) as new com.sun.star.beans.PropertyValue
args29(0).Name = "Flags"
args29(0).Value = "SVDT"
args29(1).Name = "FormulaCommand"
args29(1).Value = 0
args29(2).Name = "SkipEmptyCells"
args29(2).Value = false
args29(3).Name = "Transpose"
args29(3).Value = false
args29(4).Name = "AsLink"
args29(4).Value = false
args29(5).Name = "MoveMode"
args29(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args29())

rem ----------------------------------------------------------------------
dim args30(0) as new com.sun.star.beans.PropertyValue
args30(0).Name = "ToPoint"
args30(0).Value = "$A$12:$K$484"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args30())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SortAscending", "", 0, Array())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, Array())

rem ----------------------------------------------------------------------
dim args33(9) as new com.sun.star.beans.PropertyValue
args33(0).Name = "ByRows"
args33(0).Value = true
args33(1).Name = "HasHeader"
args33(1).Value = false
args33(2).Name = "CaseSensitive"
args33(2).Value = false
args33(3).Name = "NaturalSort"
args33(3).Value = false
args33(4).Name = "IncludeAttribs"
args33(4).Value = true
args33(5).Name = "UserDefIndex"
args33(5).Value = 0
args33(6).Name = "Col1"
args33(6).Value = 1
args33(7).Name = "Ascending1"
args33(7).Value = true
args33(8).Name = "IncludeComments"
args33(8).Value = false
args33(9).Name = "IncludeImages"
args33(9).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args33())

rem ----------------------------------------------------------------------
dim args34(0) as new com.sun.star.beans.PropertyValue
args34(0).Name = "Nr"
args34(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args34())

rem ----------------------------------------------------------------------
dim args35(0) as new com.sun.star.beans.PropertyValue
args35(0).Name = "ToPoint"
args35(0).Value = "$C$5"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args35())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args37(0) as new com.sun.star.beans.PropertyValue
args37(0).Name = "ToPoint"
args37(0).Value = "$C$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args37())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args39(0) as new com.sun.star.beans.PropertyValue
args39(0).Name = "ToPoint"
args39(0).Value = "$C$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args39())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args41(0) as new com.sun.star.beans.PropertyValue
args41(0).Name = "ToPoint"
args41(0).Value = "$C$10"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args41())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args43(0) as new com.sun.star.beans.PropertyValue
args43(0).Name = "ToPoint"
args43(0).Value = "$C$12"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args43())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args45(0) as new com.sun.star.beans.PropertyValue
args45(0).Name = "ToPoint"
args45(0).Value = "$C$14"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args45())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args47(0) as new com.sun.star.beans.PropertyValue
args47(0).Name = "ToPoint"
args47(0).Value = "$C$15"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args47())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args49(0) as new com.sun.star.beans.PropertyValue
args49(0).Name = "ToPoint"
args49(0).Value = "$C$18"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args49())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args51(0) as new com.sun.star.beans.PropertyValue
args51(0).Name = "ToPoint"
args51(0).Value = "$C$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args51())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args53(0) as new com.sun.star.beans.PropertyValue
args53(0).Name = "ToPoint"
args53(0).Value = "$C$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args53())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args55(0) as new com.sun.star.beans.PropertyValue
args55(0).Name = "ToPoint"
args55(0).Value = "$C$23"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args55())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args57(0) as new com.sun.star.beans.PropertyValue
args57(0).Name = "ToPoint"
args57(0).Value = "$D$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args57())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args59(0) as new com.sun.star.beans.PropertyValue
args59(0).Name = "ToPoint"
args59(0).Value = "$D$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args59())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args61(0) as new com.sun.star.beans.PropertyValue
args61(0).Name = "ToPoint"
args61(0).Value = "$D$23"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args61())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args63(0) as new com.sun.star.beans.PropertyValue
args63(0).Name = "ToPoint"
args63(0).Value = "$I$4"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args63())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SaveAll", "", 0, Array())


end sub
Merci d'avance à ceux qui pourront m'aider
Dernière modification par micmac le 11 févr. 2024 08:50, modifié 2 fois.
Raison : Balisage
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

Salut,
boulecristal.gif
Comme d'habitude, comment penses-tu avoir une réponse sans fournir un document sur lequel on puisse travailler ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Je vais essayer de copie les fichiers :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Amielinfo
Fraîchement OOthentifié
Messages : 1
Inscription : 02 févr. 2024 13:26

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Amielinfo »

Salut !

ah la la, les macros, c'est toujours un casse-tête au début, surtout quand on veut faire un truc précis comme toi. j'ai vu que tu cherches à copier des lignes non vides, ça me rappelle quand j'essayais de faire un truc similaire pour un projet perso, sauf que moi, c'était pour un planning de festival gothique, oui oui, tu as bien lu, un festival gothique ! j'avais des groupes à placer dans des créneaux sans me planter sur les horaires et sans laisser de trou. bon, pour revenir à ton problème, t'as pensé à utiliser une condition if pour vérifier si la cellule est vide ou pas avant de copier ? genre if not isempty(ThisComponent.Sheets(0).getCellRangeByName("H4").String) then... ça pourrait te permettre de ne sélectionner que les lignes qui t'intéressent. et pour le style gothique, bah, disons que ça m'a appris à être précis et organisé, même si c'est pour programmer des concerts à minuit sous un clair de lune ! ah, et pour coller à la suite dans ton tableau, peut-être que tu pourrais jouer avec la dernière ligne non vide trouvée pour définir ton "ToPoint". c'est un peu bricolage mais bon, on fait avec ce qu'on a, hein ?

En espérant que ça t'aide un peu

Amicalement, Amie
OpenOffice 4 sous Windows XP, 2003, 2012, Vista, 7, 8 et 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

capture.jpg

Ton exemple est trop complexe à étudier.
Merci de te mettre à notre place en fournissant un document simplifié et limité à la seule problématique.
Un classeur avec deux feuilles montrant les données au départ et à l'arrivée suffira amplement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
arverne73
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 30 mars 2012 16:13
Localisation : Savoie, France

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par arverne73 »

Bonjour Claudius723,
J'essayais de comprendre aussi… J'essaie de reformuler ta demande.
Tu as fait un fichier Calc avec plusieurs feuilles.
  • La 1ère feuille nommée Saisie doit permettre de saisir des opérations ;
  • L'appui sur le bouton Enregistrer devrait copier ces informations sur la 2e feuille nommée Grand-livre.
Ensuite, je ne vois pas bien à quoi tu fais allusion : "4 lignes", H4, A4:J4, "il ne peut y avoir que 2 lignes" ? Il faudrait au moins dire à quelle feuille cela fait référence, mieux expliquer. Qu'est-ce qu'il devrait se passer ? Qu'est ce qu'il se passe en fait ?
Et j'ai l'impression que tu as enregistré la macro d'enregistrement si bien qu'elle est longue et indigeste. Il faudrait la reprendre…
Cordialement.
LibreOffice 25.2.3 sur Ubuntu 25.04 GNOME (version officielle). Base en frontale d'une base MySQL ; échec liaison directe => liaison JDBC.
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Oui, je comprends, ci joint un fichier simplifié:
Les conditions pour la macro:
Depuis "Saisies" par le bouton Enregistrer, copier les 4 lignes "A3:K6" dans "Tableau" à partir de la dernière ligne vide, avec comme condition, ne pas copier les lignes "A5:K5" "A6:K6" si cellules "H5" et "H6" vides. Garder la colonne "A" pour "Ordre".
Ensuite effectuer un tri sur la colonne "A" de "A12:K450"
Revenir à "Saisies", effacer de "D5:D23" et "E21:E23". Enregistrer.
J'espère que mes conditions sont raisonnables et possibles à mettre œuvre.
Merci d'avance, pour votre collaboration.
Claudius
Nota, je vais envoyer le fichier à part car cela pose des problèmes !!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

Ce que tu tentes de faire s'apparente au fonctionnement d'une base de données et forcément avec Calc, c'est la grosse galère.

Mais là encore, ce n'est pas clair du tout.
Claudius723 a écrit : 07 févr. 2024 22:36 Depuis "Saisies" par le bouton Enregistrer, copier les 4 lignes "A3:K6"
Regarde la plage que tu donnes :
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Oui, mais c'est "A3:K6" de la feuille "Tableau" qu'il faut copier sur "A12":"K15", la feuille "Saisies" comme son nom l'indique, me sert à saisir des données provenant de listes déroulantes. Ces données apparaissent en haut de la feuille "Tableau" (Copie égal de "Saisies"), ce sont ces lignes que je veux copier. Après la saisie, je clique sur le bouton 'Enregistrer" qui doit exécuter la macro, après la copie et le tri (qui ne sera peut être pas nécessaire) si tout s'est bien passé, je reviens sur la feuille "Saisies" pour effacer les données en vue d'une nouvelle opération.
Est ce que cela est plus clair ?
Claudius
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

Voici comment je présente les choses quand j'explique quelque chose.

En utilisant zBasic, je fais les opérations suivantes sur la feuille "Tableau" :
  1. Copie des données de la plage A3:K6
  2. Suppression des lignes dont la 6e colonne (F) est vide
  3. Collage des données dans la 1ere ligne vide de la plage A12:K41

Code : Tout sélectionner

Sub Main
	GlobalScope.BasicLibraries.loadLibrary ("zBasic")

	maPlageCopie = "A3:K6"
	oTableDepart = zPlage.VersTable(maPlageCopie)
	'Supprime les lignes dont la 6e colonne est vide
	oTableArrive = zTable.SansLigneVide(oTableDepart, 6)
	
	maPlageColle = "A12:K41"
	nLigne = zPlage.LigneVide ( "Tableau", maPlageColle )
	zTable.Ecrit("Tableau", "A" & nLigne, oTableArrive)
	
End Sub
demo.gif
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bravo, mais cela ne veut pas fonctionner, chez moi : message
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

Lis le lien que j'ai donné sur zBasic.

Autre chose, ton classeur comporte 3 fois une image énorme.Ce qui plombe sa taille.
On le voit dans le navigateur :
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Effectivement, je n'ai pas remarqué, désolé, donc il faut que j'installe zBasic, mais cela va fonctionner avec LibreOffice ?
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bonjour, OK ça marche, mais ce n'est pas tout à fait ce que je souhaite :
1 - Départ de "Saisies" par clic sur le bouton "Enregistrer" (macro assignée) vers feuille "Tableau"
2 - Copie des lignes "A3:K6" de "Copie Saisies" (renommé)
3 - Ne pas coller les lignes "A5:K5", "A6:K6" si les cellules "H5","H"6 vides
4 - Coller vers "Listing" (renommé) à la dernière ligne vide
5 - Tri "A12:A450" dans "Listing" sur colonne "N° ordre" (si nécessaire)
6 - Revenir sur feuille "Saisies"
7 - Effacer les données des cellules "D5:D23" et "E21:E23" pour nouvelles saisies
8 - Tout Enregistrer
Merci
Claudius723
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 717
Inscription : 20 déc. 2017 14:45

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par rollmops »

Bonjour,
Dude a écrit : 08 févr. 2024 08:08 Ce que tu tentes de faire s'apparente au fonctionnement d'une base de données et forcément avec Calc, c'est la grosse galère.
+1
Claudius723 a écrit : 09 févr. 2024 04:48 Départ de "Saisies" par clic sur le bouton "Enregistrer" (macro assignée) vers feuille "Tableau"
Quand je lis "Saisie" qui remplit un "Tableau", sous Base, on a le formulaire qui alimente la table. :)
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Jurassic Pork »

Hello,
les autres avantages d'utiliser une base de données pour ton cas :
1 - Le n° d'ordre serait un champ auto incrémenté donc pas besoin de formules pour le calculer.
2 - Eviter les doublons avec une clé primaire.
3 - Le formulaire pourrait être vérifié avant d'écrire dans la base de données (ex : champs obligatoires)
4 - Dans le formulaire utilisation de zones de liste pour éviter les erreurs de saisie.
etc...
Utiliser un tableur dans ton cas risque d'amener des erreurs dans ton tableau de destination.
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bonjour, vous avez tous sûrement raison, je pensai qu'avec Calc ce serait plus facile, apparemment non, il a des limites. Pour ce qui concerne Base, j'ai travaillé longtemps avec Access, je ne devrais pas avoir trop de problèmes !! De toute façon, je reviendrais certainement vers vous, car entre Access et Dbase, il doit y avoir quelques différences. Allez je me lance !!
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Dude »

Visserais-tu avec un marteau ?
Non, il n'y a pas de limite mais il faut juste se servir du bon outil.

Pour ton problème, je t'ai donné des pistes pourtant.
Mais tu remets en ligne un document avec le même problème d'images. :roll:
Claudius723 a écrit : 09 févr. 2024 04:48 Revenir sur feuille "Saisies"
Effacer les données des cellules "D5:D23" et "E21:E23" pour nouvelles saisies
Simple avec :

Code : Tout sélectionner

zFeuille.Active ( "Saisie" )
zPlage.Supprime ( "D5:D23" )
zPlage.Supprime ( "E21:E23" )
Et maintenant il te reste à t'investir un peu que ce soit Calc ou Base.

NB : comment clore un sujet
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bonjour Dude, comme j'aime bien aller au bout de ce que j'entreprends, je veux approfondir la manipulation des macros en zBasic, c'est intéressant et plus facile que le VBA, cela reste néanmoins délicat.
Je construit une procédure à suivre et après je cherche dans les fonctions ce qui convient, c'est bien cela ?
Pour l'instant je garde celle que tu m'as envoyée, j'ai juste modifié les noms des onglets pour éviter la confusion avec les procédures (tableau).
Mais elle ne fonctionne plus, j'ai un message "zTable.Ecrit" Table mémoire vide ou non conforme.
D'autre part, avant cette modif elle me supprimait systématiquement les deux dernières lignes, et me laissait une ligne vide entre chaque enregistrement.
Ce que je ne comprends pas bien c'est pour zTable.SansLigneVide, le n° de colonne dont il faut tester le contenu, tu as mis 6, pour moi c'est les deux dernières lignes, à tester A5:K5 et A6:K6 ?

Code : Tout sélectionner

Sub Main
	GlobalScope.BasicLibraries.loadLibrary ("zBasic")

	maPlageCopie = "A3:K6"
	oTableDepart = zPlage.VersTable(maPlageCopie)
	'Supprime les lignes dont la 6e colonne est vide
	oTableArrive = zTable.SansLigneVide(oTableDepart, 6)
	
	maPlageColle = "A12:K450"
	nLigne = zPlage.LigneVide ( "Listing", maPlageColle )
	zTable.Ecrit("Listing", "A12" & nLigne, oTableArrive)
    zFeuille.Active ( "Saisies" )
    zPlage.Supprime ( "D5:D23" )
    zPlage.Supprime ( "E21:E23" )

End sub
Claudius
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Jurassic Pork »

Hello,
Attention Claudius, ta macro d'enregistrement des données de la feuille de saisie vers la table de copie n'est pas bonne :
par exemple dans la colonne Fournisseur/Client de la table de copie on a pas les bonnes données. Et puis il n'y a pas de vérification : si quelqu'un "s'amuse" à cliquer sur Enregistrer plusieurs fois de suite, on risque d'avoir des doublons.
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Jurassic Pork »

Hello Dude,
Dude a écrit : 09 févr. 2024 14:42 Mais tu remets en ligne un document avec le même problème d'images. :roll:
Comment fais-tu pour traiter les images que l'on voit dans le navigateur, mais qu'on arrive pas à faire apparaître dans la feuille ?
Moi je vois cette image quand je fais Imprimer et elle se situe entre les deux tables. Mais je ne la vois pas en aperçu.
EssaisSaisie.png
Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Claudius723
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 06 févr. 2024 03:39

Re: [Calc]Copier un groupe de 4 lignes non vides

Message par Claudius723 »

Bonjour à tous, ce message pour vous remercier, et vous dire que mes problèmes son résolus et que tout fonctionne parfaitement bien sous Calc.
Je vais maintenant, m'attaquer à transposer tout cela sur Base.
Bonne journée.
quote]Résolu[/quote]
Libre Office 24.2.4.2 /UBUNTU Package 4:24.2.4_rc2-Oubuntu0.22.04.1/ zBasic 3.0.6. Od/CPU Intel Core I7 / Nvidia GF108GL / Ram 16 Gb