Page 1 sur 1

[Résolu][Calc] PasteRange.DataArray

Publié : 10 juin 2021 13:18
par clduick
Bonjour,
j'ai voulu continuer mon fichier et écrire une macro sans "Dispatcher" en m'inspirant de la solution donnée sur un autre post https://forum.openoffice.org/fr/forum/v ... =8&t=64125
Alors voici mon problème j'ai une erreur d'exécution avec variable non défini sur PasteRange, alors que pour moi la variable est défini. Enfin je suppose que c'est le programme qui a raison. :)

Code : Tout sélectionner

Sub CopyHistoversDonnees
Dim data, fa, Doc, Sheets, SheetCopy, SheetPaste, zone, srch, CopyAddress, PasteRange
Dim trouv as variant, lig as integer

Doc = ThisComponent
Sheets = Doc.Sheets()
SheetCopy = Sheets.getByName ("Résultat Simple")
SheetPaste = Sheets.getByName("Données")
CopyRange = SheetCopy.getCellRangeByName("D35:D36")

zone =SheetPaste.getCellRangeByName("E21:E1000")
srch = zone.createSearchDescriptor
with srch
	.SearchString = SheetCopy.getCellRangeByName("D6").string 'determine la recherche par E_Ens
	.SearchWords = true
	.SearchType = 1
End with
trouv = zone.FindFirst(srch)
if isNull(trouv) then
	msgbox("J'ai pas trouvé l'établissement dans Données, il n'y aura pas d'enregistrement!")
else
	lig = trouv.CellAddress.row
	'ThisComponent.currentController.Select(SheetPaste.GetCellByPosition(0,lig) 
end if


       'PasteRange = SheetPaste.GetCellByPosition(32,lig) 'decale ma cellule avant de coller
PasteRange = ThisComponent.currentController.Select(SheetPaste.GetCellByPosition(33,lig) 'decale ma cellule avant de coller
fa = createUnoService("com.sun.star.sheet.FunctionAccess") 
data = fa.callFunction("TRANSPOSE", Array(CopyRange))
PasteRange.DataArray = data 'erreur d'execution


End Sub

Re: [Calc] PasteRange.DataArray

Publié : 10 juin 2021 15:20
par jeanmi2403
Bonsoir,
Xray PastRange inséré à la ligne 48 indique : Donnée vide.
Je n'ai pas analysé la formule de la ligne 45 (PasteRange = ThisComponent.currentController.Select etc....), mais c'est là que se situe le problème, à mon avis, puisque la procédure originale fonctionne.
Il y aurait donc intérêt à réaliser cette opération en plusieurs étapes, pour voir où se situe le souci.
Xray est d'une grande utilité dans ce genre de cas....
Cordialement,

Re: [Calc] PasteRange.DataArray

Publié : 10 juin 2021 15:24
par Kev74
Bonjour,

je crois qu'il faut que tes matrices CopyRange et PasteRange soit de taille inverse identique. Exemple, si c'est CopyRange qui a (2 lignes,1 colonne), il faut pour que la transposition fonctionne que PasteRange a (1 ligne, 2 colonnes).

Code : Tout sélectionner

PasteRange = ThisComponent.Sheets.getByName("Données").GetCellRangeByPosition(33,lig,34,lig) 'decale ma cellule avant de coller
fa = createUnoService("com.sun.star.sheet.FunctionAccess") 
data = fa.callFunction("TRANSPOSE", Array(CopyRange))
PasteRange.setDataArray(data) 'erreur d'execution
A remplacer à la fin de ton code, j'espère que c'est cela que tu voulais.

Je ne suis pas un pro, mais ton problème m'intéressait, donc je m y suis mis :P, car les gens ici m'aident beaucoup

Bonne après midi

Re: [Calc] PasteRange.DataArray

Publié : 11 juin 2021 06:54
par clduick
Kev74 a écrit :Bonjour,

je crois qu'il faut que tes matrices CopyRange et PasteRange soit de taille inverse identique. Exemple, si c'est CopyRange qui a (2 lignes,1 colonne), il faut pour que la transposition fonctionne que PasteRange a (1 ligne, 2 colonnes).

Code : Tout sélectionner

PasteRange = ThisComponent.Sheets.getByName("Données").GetCellRangeByPosition(33,lig,34,lig) 'decale ma cellule avant de coller
fa = createUnoService("com.sun.star.sheet.FunctionAccess") 
data = fa.callFunction("TRANSPOSE", Array(CopyRange))
PasteRange.setDataArray(data) 'erreur d'execution
A remplacer à la fin de ton code, j'espère que c'est cela que tu voulais.

Je ne suis pas un pro, mais ton problème m'intéressait, donc je m y suis mis :P, car les gens ici m'aident beaucoup

Bonne après midi
Merci,
J'étais sur cette piste au début, mais je pensais que la macro allait réagir comme sur la feuille calc lorsqu'on fait un copier coller, il décale automatiquement. De plus je ne savais pas l'écrire j'étais sur GetCellRangeByPosition(33,lig;34,lig).

Re: [Résolu][Calc] PasteRange.DataArray

Publié : 11 juin 2021 08:02
par Jurassic Pork
hello,
voici une macro qui copie une ligne de données pour la coller dans une colonne. On indique en entrée la plage de la ligne à copier et la cellule à partir de laquelle on veut que cela soit collé en colonne.

Code : Tout sélectionner

Sub CopyPasteWithTranspose
Dim SourceRange, DestRange
Dim data,fa,Doc, Sheets, SheetCopy, SheetPaste, CopyRange, PasteRange
Doc = ThisComponent
SourceRange = "C21:AI21"
DestRange = "D4"
Sheets = Doc.Sheets()
SheetCopy = Sheets.getByName("Données")
SheetPaste = Sheets.getByName("Résultat Simple")
CopyRange = SheetCopy.getCellRangeByName(SourceRange)
nbColumns =  CopyRange.RangeAddress.EndColumn - CopyRange.RangeAddress.StartColumn
PasteRange = SheetPaste.getCellRangeByName(DestRange)
PastRange = SheetPaste.getCellRangeByPosition( PasteRange.RangeAddress.StartColumn, _
                                     PasteRange.RangeAddress.StartRow, _
                                      PasteRange.RangeAddress.StartColumn, _
                                       PasteRange.RangeAddress.EndRow +nbColumns)
PastRange.ClearContents(7)
fa = createUnoService("com.sun.star.sheet.FunctionAccess")  
data = fa.callFunction("TRANSPOSE", Array(CopyRange))
PastRange.DataArray = data
End Sub
Il y a peut être plus simple :tesfou:

Ami calmant, J.P