[Résolu][Calc] Remplir de données les cellules d'une plage

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 !
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

[Résolu][Calc] Remplir de données les cellules d'une plage

Message par Drake »

Bonjour,
Toujours sur mon petit projet de sudoku, je reviens avec une nouvelle question.
Je voudrai remplir les cellules d'une plage à partir d'un tableau contenant des valeurs.
Noonours m'avait bien aidé avec ce code :

Code : Tout sélectionner

	oPlage = oFeuil.getCellRangeByName(plage)
	oSelect = oPlage.Data
qui remplit un tableau (je ne suis pas sur du terme) avec les valeurs des cellules d'une plage.
Et maintenant j'aimerai (si c'est possible) pouvoir faire le contraire.

Merci de votre aide
Dernière modification par Drake le 09 sept. 2020 16:32, modifié 1 fois.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remplir de données les cellules d'une plage

Message par Dude »

Salut,

Sans doute, relire le fil cité dans ta précédente question :
https://www.beaussier.com/sections/viewtopic.php?t=1563
Il y a : Envoyer le contenu du tableau sur une feuille
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc] Remplir de données les cellules d'une plage

Message par Drake »

Salut Dude,
Sans doute, relire le fil cité dans ta précédente question :
Bien vu !
Dire que j'avais le nez dessus. :oops:

Dans l'exemple, oSelect est un objet.
Je ne vois pas comment copier mon tableau dans cet objet ?
J'ai essayé ceci mais j'obtiens une erreur :
L'objet n'est pas accessible.
Utilisation incorrecte d'un objet.

Code : Tout sélectionner

Sub ValRegions()
Dim oDoc As Object, oFeuil As Object, oPlage As Object, oSelect As Object
Dim i as integer,j as integer,x as integer,y as integer
Dim oTab
Dim oAdr as string

	oDoc = ThisComponent ' Le classeur
	oFeuil = oDoc.Sheets(0) ' La 1ere feuille qui est indexée à 0
	oAdr = "A1:C3"
	oTab = Array("A","B","C","D","E","F","G","H","I")
	oPlage = oFeuil.getCellRangeByName(oAdr)
	oSelect = oPlage.Data	

'	y = LBound(oSelect)
'	x = UBound(oSelect)	
	j = 0
		For y = 0 to 2
			For x = 0 to 2
				oSelect(y)(x) = oTab(j)
				j = j + 1 
			next x	
		Next y
End Sub
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remplir de données les cellules d'une plage

Message par Dude »

Est-ce que tu comprends ce que tu codes au moins ? :roll:
Drake a écrit :Dans l'exemple, oSelect est un objet.
Non, oSelect est un tableau de tableaux (array).
Tu le décris d'ailleurs pour le remplir sous la forme oSelect(y)(x)

Deux choses :
  1. Où se trouve la fameuse ligne de code qui remplit la plage ?
  2. La propriété Data ne fonctionnera pas car tu déclares un tableau de chaînes et non de valeurs.
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc] Remplir de données les cellules d'une plage

Message par Drake »

re,
Est-ce que tu comprends ce que tu codes au moins ?
Pas toujours car je pioche à droite et à gauche des bouts de codes qui me semblent convenir.

Mais grâce à tes indications j'ai pu pondre ceci qui fonctionne:

Code : Tout sélectionner

Sub ValRegions()
 Dim oDoc as object, oFeuil as object, oPlage as object, oselect as object
 Dim Tbl(1 To 3)
 Dim a, b, c
 
oDoc = ThisComponent ' Le classeur
oFeuil = oDoc.Sheets(0) ' La 1ere feuille qui est indexée à 0
oPlage = oFeuil.getCellRangeByName("A1:C3")
oSelect = oPlage.Data	
	
a = Array(1,2,3)
b = Array(4,5,6)
c = Array(7,8,9)

Tbl(1) = a
Tbl(2) = b
Tbl(3) = c
oPlage.Data = Tbl
End Sub
Merci
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remplir de données les cellules d'une plage

Message par Dude »

Bis repetitae :
Dude a écrit :La propriété Data ne fonctionnera pas car tu déclares un tableau de chaînes et non de valeurs.
Relire le tutoriel :
Capture-2.PNG
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc] Remplir de données les cellules d'une plage

Message par Drake »

Bonsoir,
Dude a écrit:
La propriété Data ne fonctionnera pas car tu déclares un tableau de chaînes et non de valeurs.
Que veux-tu dire par "La propriété ne fonctionnera pas" ?
Je ne pense pas qu'il s'agit du résultat de ce code car à l’exécution de celui-ci on obtient bien le remplissage de la plage A1:C3 avec les bonnes valeurs.
Par ailleurs j'ai modifié la ligne

Code : Tout sélectionner

oPlage.Data = Tbl
par

Code : Tout sélectionner

oPlage.DataArray = Tbl
et cela donne le même résultat. :roll:
J'ai la désagréable impression d'être en dehors du sujet.
Peux-tu m'en dire un peu plus ?
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Remplir de données les cellules d'une plage

Message par Dude »

Drake a écrit :et cela donne le même résultat
Pas sur ton premier script avec :

Code : Tout sélectionner

oTab = Array("A","B","C","D","E","F","G","H","I")
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Résolu][Calc] Remplir de données les cellules d'une pla

Message par Drake »

re,

Effectivement, je viens de modifier mon code en mettant des valeurs "texte" et ça ne marche pas lorsque que l'on met oPlage.Data.
Cad que les cellules concernées restent vides.
Par contre en mettant oPlage.DataArray les cellules sont remplies.
Voici la feuille et sa macro pour ceux que ça intéresse.
Encore merci Dude.
Test Plages01.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)