[Résolu][Calc] Action sur plusieurs tableaux et pages

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 !

[Résolu][Calc] Action sur plusieurs tableaux et pages

Messagepar maxime14000 » 05 Nov 2019 15:43

bonjour a tous l'ouverture de ce nouveau sujet fait suite a celui ci https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=61179 mais avce un tout autre sujet, et un tou autre but c'est pourquoi j'ai préféré refaire un nouveau.

dans l'ancien sujet nous avons réussit a programmer un bouton de façon a ajouter une ligne à un tableau en gardant le formatage ainsi que les fonction de la ligne du dessus.
dans la programmation nous indiquons le nom du tableau et les zones a dupliquer. cette programmation fonctionne très bien pour l'utilisation d'une seule feuille.

hors dans mon cas le but mon projet est de créer une caisse journalière (avec récap mensuel). il me faut donc 31 page (1 par jour...) et 31 fois le ou les tableaux (dans mon cas 3 par page).
si je suis l'exemple ci-joint cela m'oblige à nommer chaque tableau dans les 31 pages mais aussi dans la programmation refaire 31 programmations avec 31 nom de tableau different... :shock: :?

donc selon vous comment modifier le code et comment faire pour ne pas avoir une avalanche de nom et autant de macro..
Pièces jointes
ex caisse.ods
(72.01 Kio) Téléchargé 4 fois
Dernière édition par maxime14000 le 18 Nov 2019 21:22, édité 2 fois.
Pc windows 10
open office 4.1.7
maxime14000
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 24
Inscrit le : 23 Mars 2019 22:49

Re: [Calc] Action sur plusieurs tableaux dans plusieurs page

Messagepar luky-luke » 06 Nov 2019 13:33

Bonjour
Sans vouloir jouer le rabat-joie, le problème et le but reste les mêmes, c'est l'exposition du problème qui n'était pas la bonne dès les départ. Bref ! Maintenant que j'ai déchargé mon colt... :lol:
Une solution avec une modification du code proposé par OOotremer971, insertion d'une ligne en dessous de la ligne sélectionnée et copie.
Code : Tout sélectionner   AgrandirRéduire
Sub Select_Insert_Copy
Dim Feuille As Object, Selection As Object
Dim MaLigne As Object, DestLigne As Object, colonnes As Object
Dim NumLigne As Long

Feuille = ThisComponent.CurrentController.ActiveSheet()
   Selection = ThisComponent.CurrentSelection
      if (Selection.SupportsService("com.sun.star.table.Cell")) then
      'si une seule cellule sélectionnnée
         MsgBox("Aucune ligne sélectionnée", 48, "titre")
         Exit Sub
      end if
   NumLigne = Selection.RangeAddress.StartRow + 2
   MaLigne = Feuille.GetCellRangeByName("A" + NumLigne).Rows
   MaLigne.InsertByIndex(0,1)
   DestLigne = Feuille.GetCellRangeByName("A" + NumLigne)
   Feuille.CopyRange(DestLigne.CellAddress,Selection.RangeAddress)
colonnes = Array(1,3,5,7,9)
   for i = LBound(colonnes) To UBound(colonnes)
      feuille.getCellByPosition(colonnes(i),NumLigne-1).SetString("")   
   next i   
End Sub

La macro vérifie juste qu"il y a bien une sélection de plusieurs cellules.
Sur la feuille active, elle va insérer une ligne en dessous de la ligne sélectionnée et copier bêtement la ligne sélectionnée . Il conviendrait certainement d'ajouter quelques contrôles.
Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Action sur plusieurs tableaux dans plusieurs page

Messagepar maxime14000 » 06 Nov 2019 16:46

luky-luke a écrit:Bonjour
Sans vouloir jouer le rabat-joie, le problème et le but reste les mêmes, c'est l'exposition du problème qui n'était pas la bonne dès les départ. Bref ! Maintenant que j'ai déchargé mon colt... :lol:
Une solution avec une modification du code proposé par OOotremer971, insertion d'une ligne en dessous de la ligne sélectionnée et copie.
Code : Tout sélectionner   AgrandirRéduire
Sub Select_Insert_Copy
Dim Feuille As Object, Selection As Object
Dim MaLigne As Object, DestLigne As Object, colonnes As Object
Dim NumLigne As Long

Feuille = ThisComponent.CurrentController.ActiveSheet()
   Selection = ThisComponent.CurrentSelection
      if (Selection.SupportsService("com.sun.star.table.Cell")) then
      'si une seule cellule sélectionnnée
         MsgBox("Aucune ligne sélectionnée", 48, "titre")
         Exit Sub
      end if
   NumLigne = Selection.RangeAddress.StartRow + 2
   MaLigne = Feuille.GetCellRangeByName("A" + NumLigne).Rows
   MaLigne.InsertByIndex(0,1)
   DestLigne = Feuille.GetCellRangeByName("A" + NumLigne)
   Feuille.CopyRange(DestLigne.CellAddress,Selection.RangeAddress)
colonnes = Array(1,3,5,7,9)
   for i = LBound(colonnes) To UBound(colonnes)
      feuille.getCellByPosition(colonnes(i),NumLigne-1).SetString("")   
   next i   
End Sub

La macro vérifie juste qu"il y a bien une sélection de plusieurs cellules.
Sur la feuille active, elle va insérer une ligne en dessous de la ligne sélectionnée et copier bêtement la ligne sélectionnée . Il conviendrait certainement d'ajouter quelques contrôles.
Cordialement
Luke


bonjour n'etant pas un pro de la programation ou doit je indiquer la ligne selectionné à copié car je n'arrive pas a faire fonctionner la programation...??

et comme je fesaitt rappel dans l'ancien poste ne va t'on pas retomber sur le meme probleme qu'au depart …??vu que les 3 tableau sont l'un en dessous de l'autre et vu que l'on peut rajouter des ligne a chaque tableau si on le souhaite (par ex),
est ce que cela ne pas poser probleme le fait d'indiquer un numero de ligne (qui fait ref a un tableau) qui peut bouger selon rajout de ligne ou pas (voir dessin ci joint)

Capture tab1.PNG


Capture tab2.PNG


d'origine le tableau Depense espece demarre à "B43", mais comme l'exemple le montre si on rajoute au tableau du dessus des ligne alors le tableau Depense especes demarre plus bas dans la page la en l'ocurrence "B47",
(c'était pour cela que l'on avait nommer les tableau avce des noms, mais la comment faire …?
Pc windows 10
open office 4.1.7
maxime14000
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 24
Inscrit le : 23 Mars 2019 22:49

Re: [Calc] Action sur plusieurs tableaux dans plusieurs page

Messagepar luky-luke » 06 Nov 2019 18:12

Bonjour
Je dégaine mon colt encore une fois :wink: Il est inutile de recopier l'ensemble de mon message.
maxime14000 a écrit:ou doit je indiquer la ligne sélectionné à copié car je n'arrive pas a faire fonctionner la programation...??

Il suffit de sélectionner une ligne sur la feuille et lancer la macro. La macro va fonctionner sur toute les feuilles et va insérer et recopier la ligne sélectionnée en dessous.
Exemple, je clic sur le nombre 36 complètement à gauche sur le tableur. L'ensemble de la ligne est sélectionnée et apparaît en surbrillance.
Select_Row.png

Je lance la macro en cliquant sur le bouton + et une ligne est ajoutée en dessous de la 36 avec la copie de la formule présente dans la ligne 36.
La macro Select_Insert_Copy est affectée au boutons. Et je me répète, elle vérifie uniquement la sélection de plusieurs cellules. Si tu as sélectionné et copier la mauvaise ligne, il suffira de supprimer la nouvelle ligne.
Cela me semble le moyen le plus simple pour toi à reproduire de mois en mois et de classeur en classeur. Une seule macro, simple et un bouton dans une barre d'outils. Pas de zone de nom à reproduire sur d'autre classeur, bref un truc simple qui s’adapte à toute les situations. Ce n'est que mon avis :lol:
Un exemple en pièce jointe, la nouvelle barre d'outils s'appelle INSERT ET COPIE
ex caisse_1.ods
(73.51 Kio) Téléchargé 5 fois

 Ajout : Pour le fun... Après quelques galères pour donner un nom incrémenté au plages sur les différentes feuilles. AOo et LibO supporte mal le mélange nombre et lettre sur les noms de plages, une macro pour créer les 93 plages sur les 31 feuilles.
Code : Tout sélectionner   AgrandirRéduire
Sub Creer_NomPlage
Dim oDoc As Object
Dim Tab() As String, LesFeuilles() As String, RefZone() As String, Destination() As String
Dim Nom As String, Zone As String, MaFeuille As Object, Dest As Object
oDoc = ThisComponent
Tab() = Array("tab_clientscomptes", "tab_depense", "tab_ticketresto")
RefZone() = Array("$A$36:$L$37","$A$43:$L$44","$A$29:$L$30")
Destination() = Array("$A$36", "$A$43", "$A$29")
LesFeuilles() = oDoc.Sheets.ElementNames

For i = 1 to 31
   For k = 0 to 2
      Nom = Tab(k)&i 'Le Nom de la future Plage
      Zone = "$" & i & "." & RefZone(k) 'La réference de plage
      MaFeuille = oDoc.Sheets.GetByName(i)
      Dest = MaFeuille.GetCellRangeByName(Destination(k)) 'cellule reference de destination
      If Not oDoc.NamedRanges.HasByName(Nom) Then 'si la plage n'existe pas
         oDoc.NamedRanges.AddNewByName(Nom,Zone,Dest.CellAddress,0)
      End if
   Next k
Next i
end sub
et une des macros adapté de OOotremer971 pour que cela fonctionne sur les 31 feuilles
Code : Tout sélectionner   AgrandirRéduire
Sub AjouterLigneclientcompte
Dim oDoc As Object, oRaZone As Object, feuille As Object, ligne_A_recopier As Object
Dim lesLignes As Object, colonnes As Object, destination As Object
Dim i As Long
oDoc = Thiscomponent
NomFeuille = oDoc.CurrentController.ActiveSheet.Name
oRaZone = oDoc.namedRanges.getByName("tab_clientscomptes" & NomFeuille).getReferredCells().getRangeAddress()
feuille = oDoc.Sheets(oRaZone.Sheet)
lesLignes = feuille.Rows
ligne_A_recopier = feuille.getCellRangeByPosition(oRaZone.startColumn, oRaZone.endRow-1, oRaZone.endColumn, oRaZone.endRow-1)
lesLignes.insertByIndex(oRaZone.endRow,1)
destination = feuille.getCellByPosition(oRaZone.startColumn, oRaZone.endRow)
feuille.copyRange(destination.CellAddress, ligne_A_recopier.RangeAddress)
colonnes = Array(1,3,5,7,9)
for i = LBound(colonnes) To UBound(colonnes)
   feuille.getCellByPosition(colonnes(i), oRaZone.endRow).SetString("")   
next i
End Sub
. Un nouveau fichier en pièce jointe.
ex caisse_2.ods
(80.29 Kio) Téléchargé 6 fois
J'ai juste testé sur la feuille 1 et 2 donc méfiance :aie: 


Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Action sur plusieurs tableaux dans plusieurs page

Messagepar maxime14000 » 18 Nov 2019 00:41

Excusez moi de ne pas avoir répondu plus tôt,(vacance…)
tout d'abord merci beaucoup pour vos réponses et la diversité des proposition afin de résoudre mon problème.
Apres réflexion et test j'ai opté pour l'idée de garder un nom par tableau par page. le fait d'avoir modifier la programmation pour les bouton lors de l'action mais aussi la macro pour créer les 93 tableaux ma fait gagner un temp très très important...et je vous en remercie

il reste tout de même un dernier problème: tout fonctionne parfaitement pour recopier les ligne des divers tableaux mais après avoir protéger la feuille (afin de ne laisser que les cellules pour la saisie des chiffres ou texte, les celules bleu) les bouton ne fonctionne plus…! ci joint le message d'erreur

Capture-erreur.PNG


dans l'idée comme c'est pour des utilisateur novice, il faut ne laisse accès qu'au cellules destinées a la saisie (les cellules bleu) et verrouille toute les autres.
Comme cela doit être du a la protection de la feuille je pense mais alors comment faire pour exécuter la macro correctement…?
Dernière édition par maxime14000 le 18 Nov 2019 01:32, édité 1 fois.
Pc windows 10
open office 4.1.7
maxime14000
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 24
Inscrit le : 23 Mars 2019 22:49

Re: [Calc] Action sur plusieurs tableaux dans plusieurs page

Messagepar luky-luke » 18 Nov 2019 01:04

Bonjour
maxime14000 a écrit:Comme cela doit être du aux verrouillage des cellules je pense mais alors comment faire pour exécuter la macro correctement…?
En déprotégeant la feuille en début de macro et en la protégeant en fin de macro. Une recherche sur le forum avec les mots Feuille+Protection devrait te donner la réponse sur la façon de faire, c'est un sujet récurant :wink:
Merci de clore le fil en balisant [Résolu] Imagedans ton premier message.

Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)