[Résolu] [Calc] Plusieurs Macros dans une même feuille

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 !
Adri29
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 27 nov. 2018 14:42

[Résolu] [Calc] Plusieurs Macros dans une même feuille

Message par Adri29 »

Bonjour, j'aimerais mettre plusieurs macros dans une même feuille
C'est pour mettre les Macros dans Feuille -> événement de la feuille -> assigner une feuille -> condition modifié
Voilà mon code

Code : Tout sélectionner

 REM  *****  BASIC  *****
Option Explicit
Sub test_charpente(oevt As Object)
'xray oevt
Select case oevt.AbsoluteName
	case "$Feuille1.$D$136"
		Thiscomponent.Sheets(2).Rows.GetByIndex(38).IsVisible = oevt.Value
	case "$Feuille1.$D$142"
		Thiscomponent.Sheets(2).Rows.GetByIndex(39).IsVisible = oevt.Value
End select
End Sub

Sub test_plafond(oevt As Object)
'xray oevt
Select case oevt.AbsoluteName
	case "$Feuille1.$D$227"
		Thiscomponent.Sheets(2).Rows.GetByIndex(56).IsVisible = oevt.Value
	case "$Feuille1.$D$233"
		Thiscomponent.Sheets(2).Rows.GetByIndex(57).IsVisible = oevt.Value
	case "$Feuille1.$D$240"
		Thiscomponent.Sheets(2).Rows.GetByIndex(58).IsVisible = oevt.Value
End select
End Sub

Sub test_sols_scelles(oevt As Object)
'xray oevt
Select case oevt.AbsoluteName
	case "$Feuille1.$D$173"
		Thiscomponent.Sheets(2).Rows.GetByIndex(47).IsVisible = oevt.Value
	case "$Feuille1.$D$180"
		Thiscomponent.Sheets(2).Rows.GetByIndex(48).IsVisible = oevt.Value
	case "$Feuille1.$D$187"
		Thiscomponent.Sheets(2).Rows.GetByIndex(49).IsVisible = oevt.Value
	case "$Feuille1.$D$194"
		Thiscomponent.Sheets(2).Rows.GetByIndex(50).IsVisible = oevt.Value
	case "$Feuille1.$D$203"
		Thiscomponent.Sheets(2).Rows.GetByIndex(51).IsVisible = oevt.Value
End select
End Sub

Sub test_facade(oevt As Object)
'xray oevt
Select case oevt.AbsoluteName
	case "$Feuille1.$D$24"
		Thiscomponent.Sheets(2).Rows.GetByIndex(15).IsVisible = oevt.Value
	case "$Feuille1.$D$32"
		Thiscomponent.Sheets(2).Rows.GetByIndex(16).IsVisible = oevt.Value
	case "$Feuille1.$D$40"
		Thiscomponent.Sheets(2).Rows.GetByIndex(17).IsVisible = oevt.Value
	case "$Feuille1.$D$48"
		Thiscomponent.Sheets(2).Rows.GetByIndex(18).IsVisible = oevt.Value
	case "$Feuille1.$D$56"
		Thiscomponent.Sheets(2).Rows.GetByIndex(19).IsVisible = oevt.Value
	case "$Feuille1.$D$64"
		Thiscomponent.Sheets(2).Rows.GetByIndex(20).IsVisible = oevt.Value
	case "$Feuille1.$D$72"
		Thiscomponent.Sheets(2).Rows.GetByIndex(21).IsVisible = oevt.Value
	case "$Feuille1.$D$80"
		Thiscomponent.Sheets(2).Rows.GetByIndex(22).IsVisible = oevt.Value
	case "$Feuille1.$D$88"
		Thiscomponent.Sheets(2).Rows.GetByIndex(23).IsVisible = oevt.Value
End select
End Sub 
Le principe de ce code est de masquer certaines lignes sous conditions. Comme vous pouvez le voir, il y a plusieurs sub, je pense que le problème vient de là

Merci de m'aider.
Cordialement.
Dernière modification par Adri29 le 05 févr. 2019 11:45, modifié 1 fois.
LibreOffice Version: 6.1.5.2 sous window 10.1
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Plusieurs Macros dans une même feuille

Message par OOotremer971 »

Bonjour,
Adri29 a écrit :Le principe de ce code est de masquer certaines lignes sous conditions. Comme vous pouvez le voir, il y a plusieurs sub
Une seule aurait suffit dans cette circonstance puisque l'événement déclencheur est "Contenu modifié". Cela veut dire que dès lors que le contenu d'une cellule est modifié (quelle que soit la cellule de ta feuille), la macro est exécutée.
Lors du déclenchement, Calc transmet à la macro l'objet déclencheur, en l'occurrence la cellule qui vient d'être modifiée.
La propriété AbsoluteName de cet objet cellule retourne son nom en adressage absolu : $Feuille1.$D$136 par exemple.
Select Case, synonyme de "Sélectionner le cas" cherche dans le liste des cas proposés, celui qui correspond au nom de la cellule qui vient d'être modifiée. Si il n'est pas trouvé, la macro se termine, sinon la/les instructions en dessous du cas concerné est/sont exécutée(s).
Tu peux donc mettre autant de cas que nécessaire entre Select Case et End Select

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Adri29
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 27 nov. 2018 14:42

Re: [Calc] Plusieurs Macros dans une même feuille

Message par Adri29 »

Si je te suis bien le faire dans une même boucle?
J'étais justement entrain de tester en incluant des DIM pour remplacer les sub
LibreOffice Version: 6.1.5.2 sous window 10.1
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Plusieurs Macros dans une même feuille

Message par Piaf »

Bonjour
En complément de la réponse d'OOotremer971,

Code : Tout sélectionner

Sub Main(oEv as Object)
	Select Case oEv.AbsoluteName
		Case "$Feuille1.$D$136"
			Thiscomponent.Sheets(2).Rows.GetByIndex(38).IsVisible = oevt.Value
		Case "$Feuille1.$D$142"
			Thiscomponent.Sheets(2).Rows.GetByIndex(39).IsVisible = oevt.Value
		Case "$Feuille1.$D$227"
			Thiscomponent.Sheets(2).Rows.GetByIndex(56).IsVisible = oevt.Value
		Case "$Feuille1.$D$233"
			Thiscomponent.Sheets(2).Rows.GetByIndex(57).IsVisible = oevt.Value
		Case "$Feuille1.$D$240"
			Thiscomponent.Sheets(2).Rows.GetByIndex(58).IsVisible = oevt.Value
		'Etc...	
	End Select	
End Sub
Adri29 a écrit :Si je te suis bien le faire dans une même boucle?
Ça n'est pas une boucle c'est un select case :)
Si tu veux plusieurs macros, tu interceptes la cellule concernée dans une macro globale et en fonction de la cellule, tu renvoies à la procédure voulue

Code : Tout sélectionner

Sub Main(oEv as Object)
	Select Case oEv.AbsoluteName
		Case "$Feuille1.$D$136","$Feuille1.$D$142"
			test_charpente(oEv)
		Case "$Feuille1.$D$227","$Feuille1.$D$233","$Feuille1.$D$240"
			test_plafond(oEv)
		'etc...
	End Select	
End Sub

Sub test_charpente(oevt As Object)
Select case oevt.AbsoluteName
   case "$Feuille1.$D$136"
      Thiscomponent.Sheets(2).Rows.GetByIndex(38).IsVisible = oevt.Value
   case "$Feuille1.$D$142"
      Thiscomponent.Sheets(2).Rows.GetByIndex(39).IsVisible = oevt.Value
End select
End Sub

Sub test_plafond(oevt As Object)
Select case oevt.AbsoluteName
   case "$Feuille1.$D$227"
      Thiscomponent.Sheets(2).Rows.GetByIndex(56).IsVisible = oevt.Value
   case "$Feuille1.$D$233"
      Thiscomponent.Sheets(2).Rows.GetByIndex(57).IsVisible = oevt.Value
   case "$Feuille1.$D$240"
      Thiscomponent.Sheets(2).Rows.GetByIndex(58).IsVisible = oevt.Value
End select
End Sub
A+
Dernière modification par Piaf le 05 févr. 2019 11:47, modifié 1 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Adri29
Membre OOrganisé
Membre OOrganisé
Messages : 77
Inscription : 27 nov. 2018 14:42

Re: [Calc] Plusieurs Macros dans une même feuille

Message par Adri29 »

Vos 2 méthodes me permettent de mieux comprendre les macros et tout fonctionne
Je vous remercie beaucoup :D

PS: le // en c correspond ici à ' si je comprend bien
LibreOffice Version: 6.1.5.2 sous window 10.1