[Résolu][Calc] Utiliser cellules d'une plage nommée non contigüe

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 !
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

[Résolu][Calc] Utiliser cellules d'une plage nommée non contigüe

Message par pat_ice31 »


La modération vous a écrit: Merci de respecter la syntaxe des balises [Calc] et non [CALC].
La balise [MACRO VBA] n'appartient pas à la liste des balises du forum et le terme Macro est inutile = correction par la modération.

Bonjour,
j'ai une plage de cellules nommée, avec des cellules NON contigües
Je dois affecter une valeur et une couleur d'arrière plan à chaque cellule de cette plage.
Dans la macro, le nommage fonctionne.
Est-il possible d'affecter une valeur et une couleur d'arrière plan à toutes les cellules de la plage en une instruction ?
Sinon, si je dois faire une boucle, comment l'écrire ? (ce que j'ai écrit ne fonctionne pas : erreur PROPRIETE OU METHODE NON TROUVEE : GETROWS
Merci pour votre aide
Option Explicit

sub nommerAireDeJeu()

Dim monDocument As Object
Dim zoneDeNoms As Object
Dim nomDeLaPlageDeJeu As String
Dim coordonneesDeLaPlageDeJeu As String
Dim oCellAdress As New com.sun.star.table.CellAddress

monDocument = Thiscomponent
coordonneesDeLaPlageDeJeu = "Feuille1.$B$5:$C$7~Feuille1.$D$4:$H$8"
nomDeLaPlageDeJeu = "plateauDeJeu"

zoneDeNoms = monDocument.NamedRanges
If zoneDeNoms.hasByName(nomDeLaPlageDeJeu) then
zoneDeNoms.removeByName(nomDeLaPlageDeJeu) 'alors on la supprime
end If
zoneDeNoms.addNewByName(nomDeLaPlageDeJeu, coordonneesDeLaPlageDeJeu ,oCellAdress,0)'

Dim monPlateauDeJeu as Object
monPlateauDeJeu = zoneDeNoms.getByName(nomDeLaPlageDeJeu)
'NE FONCTIONNE PAS monPlateauDeJeu.BackColor = rgb(255,0,0)

Dim i as long, j as long
For i = 0 To monPlateauDeJeu.getRows().getCount()-1 'ERREUR GETROWS
For j = 0 To monPlateauDeJeu.getColumns().getCount()-1
maPlageDeJeu.getCellByPosition(j, i).setValue(4)
Next j
Next i

End Sub
Couleur_Valeur_Named_Range.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par pat_ice31 le 28 sept. 2023 18:13, modifié 3 fois.
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par pat_ice31 »

micmac a écrit : 27 sept. 2023 17:18 Bonjour,
Dans votre signature il y a écrit : OpenOffice 4
Dans votre signature il est nécessaire d'indiquer : la version exacte de AOO (AOO 4.1.14 par exemple).
J'ai corrigé la version dans ma signature. Je ne peux pas changer la version, je dois avoir la même que les PC utilisés en formation pour une association
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1047
Inscription : 19 août 2018 05:20

Re: [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par Dolev »

Bonjour

VBA = Microsoft
Pouvez vous expliquer le rapport avec Calc ?
pat_ice31 a écrit : 27 sept. 2023 16:31 erreur PROPRIETE OU METHODE NON TROUVEE : GETROWS
Premier réflexe : avez-vous installé XRay pour savoir pourquoi vous rencontrez cette erreur ?
viewtopic.php?t=3234
Open Office 4.1.15 sous Windows 11
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par pat_ice31 »

Je programme en VBA dans Calc
L'erreur vient du type d'objet utilisé qui ne possède pas cette lethode
La modération vous a écrit: dans votre signature, LibreOffice, pas OpenOffice

LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

[Résolu] [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par pat_ice31 »

Le problème est qu'une RANGE est RECTANGULAIRE
J'ai trouvé une solution : grouper les RANGE
Boucler sur le groupe , et pour chaque RANGE du GROUPE, boucler sur le nb de lignes et de colonnes
Résolu donc.

Code : Tout sélectionner

sub nommerAireDeJeu()

Dim monDocument As Object
Dim zoneDeNoms As Object
Dim nomDeLaPlageDeJeu As String
Dim coordonneesDeLaPlageDeJeu As String
Dim oCellAdress As New com.sun.star.table.CellAddress

monDocument = Thiscomponent

coordonneesDeLaPlageDeJeu = "Feuille1.$B$5:$C$7~Feuille1.$D$4:$H$8" 'la zone à nommer
'le ~ (tilde) permet de concaténer plusieurs plages de cellules non contigües
nomDeLaPlageDeJeu = "plateauDeJeu" 'le nom à donner au plateau de jeu

zoneDeNoms = monDocument.NamedRanges 
If zoneDeNoms.hasByName(nomDeLaPlageDeJeu) then 'si il existe déjà une zone de ce nom
	zoneDeNoms.removeByName(nomDeLaPlageDeJeu) 'alors on la supprime
end If
zoneDeNoms.addNewByName(nomDeLaPlageDeJeu, coordonneesDeLaPlageDeJeu ,oCellAdress,0)'

' Le code précédent gère le nom 
' Le code qui suit créé le groupe
' et boucle sur les cellule de chaque range

	doc = ThisComponent
    sheet = doc.CurrentController.ActiveSheet
    monGroupeDeRanges = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
    Dim i as long, j as long

    range1 = sheet.getCellRangeByName("Feuille1.$B$5:$C$7")
    range2 = sheet.getCellRangeByName("Feuille1.$D$4:$H$8")

    monGroupeDeRanges.addRangeAddress(range1.RangeAddress, False)
    monGroupeDeRanges.addRangeAddress(range2.RangeAddress, False)

    MsgBox monGroupeDeRanges.RangeAddressesAsString 
    For Each individualRange In monGroupeDeRanges
		 For indexLigne = 0 To individualRange.getRows().getCount()-1
		    For indexColonne = 0 To individualRange.getColumns().getCount()-1
			    myCell = individualRange.getCellByPosition(indexColonne,indexLigne)
		        myCell.setValue(4)
		        myCell.cellbackcolor = RGB(50,60,70) 
		    Next indexColonne
		Next indexLigne
	Next individualRange

End Sub
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par Dude »

Salut,

Parcourir une zone nommée a été posté plusieurs fois.
Un fil parmi tant d'autres : viewtopic.php?t=60207&hilit=calc+NamedRanges+parcourir
pat_ice31 a écrit : 27 sept. 2023 20:05 Je programme en VBA dans Calc
Ce n'est pas du VBA mais du Basic.
Programmer avec du Microsoft, ça ne fonctionne qu'avec l'émulation Option VBASupport comme indiqué ici :
viewtopic.php?p=127205#p127205

Merci de corriger ton titre et ta signature
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Calc] VBA Utiliser cellules d'une Named Range plage de cellules nommée

Message par pat_ice31 »

Dude a écrit : 28 sept. 2023 15:41 Salut,

Parcourir une zone nommée a été posté plusieurs fois.
Un fil parmi tant d'autres : viewtopic.php?t=60207&hilit=calc+NamedRanges+parcourir
Il s'agit de cellules non contiguës, pas d'une plage classique, elle n'est pas rectangulaire, voir le premier code. La solution que j'ai trouvée n'a rien à voir avec le parcours d'une zone nommée classique. S'il y a plus simple, je suis preneur
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 517
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Résolu][Calc] Basic Utiliser cellules d'une Named Range NON contigüe

Message par Noonours »

Bonjour,
Un script simplifié, à tester:

Code : Tout sélectionner

Sub RemplirAireDeJeu()

	aPlages =Array("Feuille1.$B$5:$C$7", "Feuille1.$D$4:$H$8")
	
	For Each plage In aPlages
	MaPlage = ThisComponent.Sheets(0).getCellRangeByName(plage)
		For col = 0 to MaPlage.Columns.Count -1
			For lig = 0 to MaPlage.Rows.Count -1
				MaPlage.getCellByPosition(col,lig).Value = 4
			Next lig
		Next col		
		MaPlage.CellBackColor= RGB(50,60,70)
	Next plage

End Sub
COOordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 24.2.5.2 et OpenOffice 4.1.15 sous Windows 10
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Résolu][Calc] Basic Utiliser cellules d'une Named Range NON contigüe

Message par pat_ice31 »

Noonours a écrit : 28 sept. 2023 20:40 Bonjour, Un script simplifié, à tester:
Merci, ça fonctionne, c'est plus simple.
Ce que je ne comprends pas; c'est que je n'arrive pas à utiliser FOR EACH CELL IN MaPlage ou IN MaPlage.Cells, MaPlage est pourtant une RANGE ?
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Calc] Basic Utiliser cellules d'une Named Range NON contigüe

Message par Dude »

Salut,
pat_ice31 a écrit : 29 sept. 2023 08:37MaPlage est pourtant une RANGE ?
As-tu fait ce que t'a proposé Dolev ?

Code : Tout sélectionner

MaPlage.Cells
Rien qu'avec ce code, je peux te dire que ce n'est pas le cas.
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Résolu][Calc] Basic Utiliser cellules d'une Named Range NON contigüe

Message par pat_ice31 »

Dude a écrit : 29 sept. 2023 20:32 Salut,
pat_ice31 a écrit : 29 sept. 2023 08:37MaPlage est pourtant une RANGE ?
As-tu fait ce que t'a proposé Dolev ?

Code : Tout sélectionner

MaPlage.Cells
Rien qu'avec ce code, je peux te dire que ce n'est pas le cas.
J'ai installé Xray, je vois que Cells n'existe pas dans les propriétés. Ceci clot le débat, merci d'avoir insisté pour Xray, je ne connaissais pas.
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
pat_ice31
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 10 déc. 2021 09:59

Re: [Résolu][Calc] Utiliser cellules d'une plage nommée non contigüe

Message par pat_ice31 »

Encore plus simple : affecter une valeur à un ensemble de cellules et changer la couleur de fond en une seule instruction :

Code : Tout sélectionner

option vbasupport 1 
Sub Main

dim myRange as object

myRange=range("B5:C7,D4:H8")
myRange.value="X"
' Xray myRange plante (boucle)

myRange.CellRange.CellBackColor= RGB(50,60,70)

End Sub
Dernière modification par micmac le 06 oct. 2023 03:10, modifié 1 fois.
Raison : Code balisé [code]
LibreOffice 7.2.4.1 (x64) Obligation de version - Windows 10 Prof.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Calc] Utiliser cellules d'une plage nommée non contigüe

Message par Dude »

pat_ice31 a écrit : 05 oct. 2023 19:33 Encore plus simple : affecter une valeur à un ensemble de cellules et changer la couleur de fond en une seule instruction :

Code : Tout sélectionner

option vbasupport 1 
Comme expliqué plus haut, c'est de l'émulation VBA.
Le truc à proscrire.