Bonjour jeanmi2403,
Pas de solution intuitive alors
Voici un extrait de code, pour illustrer une approche bancale, d'écriture du contenu d'un tableau, vers une plage de feuille de classeur :
Code : Tout sélectionner
'[Calc]Ecrire un tableau à deux dimensions
Sub TestEcrireDansFeuille()
TestPysPlageEcrireDansFeuille("test",1,2,1,10)
End Sub
Sub TestPysPlageEcrireDansFeuille(sNomFeuille As String,iColMin As Integer,iColMax As Integer,iRowMin as integer,iRowMax as integer)
Dim oDoc, oSheet
Dim I as Long, J as Long
oDoc = ThisComponent
'oSheet=oDoc.Sheets(0)
oSheet = oDoc.getSheets().getByName(sNomFeuille)
'on adapte les numéros de lignes
iColMin = iColMin - 1
iColMax = iColMax - 1
iRowMin = iRowMin - 1
iRowMax = iRowMax - 1
For I=iRowMin to iRowMax
For J = iColMin to iColMax
oSheet.getCellByPosition(J, I).formulaLocal = "Salut" & I & J
Next J
Next I
End Sub
Code : Tout sélectionner
'La méthode consiste à utiliser un "tableau de tableau" créé avec GetDataArray,
'puis à en calculer normalement le contenu, avant d'utiliser SetDataArray pour le copier dans Calc.
Sub TestWindmarcEcrireDansFeuille()
'based on http://www.oooforum.org/forum/viewtopic.phtml?t=6825
Dim oDoc, oSheet, oRange
Dim I as Long, J as Long
Dim A(2) as variant, B(2) as String 'Variant is mandatory
oDoc = ThisComponent
' oSheet=oDoc.Sheets(0)
oSheet = oDoc.getSheets().getByName("test")
oRange = oSheet.getCellRangebyName("A1:C3")
'oRange = oSheet.getCellRangeByName("NamedRange")
A=oRange.GetDataArray
For I=0 to 2
B=A(I)
For J = 0 to 2
B(J) = "Magique" & I & J
Next J
A(I)=B
Next I
oRange.SetDataArray(A()) 'Check http://www.oooforum.org/forum/viewtopic.phtml?t=6825
End Sub
'Cette macro prend aussi 5 secondes pour un tableau 10000 x 20, en comprenant le temps de calculer les éléments du tableau de départ.
Code : Tout sélectionner
'Stocker une plage dans un tableau
Sub PlageDansTableau()
Dim FeuilleActive As Object
Dim i as integer
Dim dimc as variant
FeuilleActive = ThisComponent.getCurrentController.getActiveSheet
dimc = FeuilleActive.getCellRangebyName("A1:A2").getDataArray()
For i = 0 To 1
print dimc(i)(0)
Next
End Sub
'Voici les principes de base, pour échanger les données entre feuilles et tableau mémoire.
'Si une aide secourable peut m'aider à en faire une version générique de qualité,
'je vous en remercie infiniment.
'Ici, mon objectif est de faire correspondre le plus simplement possible
'numéros de ligne, numéros de colonne,
'que ce soit :
- dans la fenêtre de calc où l'on commence toujours ligne 1, colonne A
- dans la lecture ooobasic de la feuille via oooBasic, où il faudrait restituer ligne 0, colonne 0, en 1,A
- dans un tableau où il faudrait restituer ligne 0, colonne 0, en 1,A
Merci beaucoup.