[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 !
maxime14000
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 23 mars 2019 21:49

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

Message par maxime14000 »

bonjour a tous l'ouverture de ce nouveau sujet fait suite a celui ci https://forum.openoffice.org/fr/forum/v ... =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..
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par maxime14000 le 18 nov. 2019 20:22, modifié 2 fois.
Pc windows 10
open office 4.1.11
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

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

Message par luky-luke »

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

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
maxime14000
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 23 mars 2019 21:49

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

Message par maxime14000 »

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

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 …?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Pc windows 10
open office 4.1.11
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

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

Message par luky-luke »

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
 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

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

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
J'ai juste testé sur la feuille 1 et 2 donc méfiance :aie: 
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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
maxime14000
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 23 mars 2019 21:49

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

Message par maxime14000 »

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…?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par maxime14000 le 18 nov. 2019 00:32, modifié 1 fois.
Pc windows 10
open office 4.1.11
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

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

Message par luky-luke »

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