Je souhaiterais à partir de la valeur de la cellule H5 de la feuille1 copier le contenu de deux cellules de la colonne B de la feuille2.
C'est à dire que si la valeur de H5 est 1, on copie à partir de la feuille 2 la plage B1:B2 sur la feuille 1.
si H5 = 2 , on copie feuille2.B3:B4 sur la feuille1,
si H5 = 3, on copie feuille2.B5:B6 sur la feuille1 etc etc.
J'ai réussi à le faire (voir exemple ci-dessous), mais la fonction de copier-coller ne fonctionne qu'à partir de texte dans les cellules d'origine. Si ce classeur ne contenait que du texte ou des nombres, il serait inutile de passer par macro, les fonctions de RECHERCHE de Calc seraient bien suffisantes.
Mon souci vient du fait que certaines cellules de la feuille 'source' contiennent une image qu'il faut aussi copier-coller... d'où l'obligation de passer par macro.
J'ai créé un bouton auquel est rattaché la macro.
Mon codage est probablement très approximatif, soyez indulgents, je me lance depuis peu dans la programmation en OoBasic
Voici ce que j'ai réalisé en m'inspirant de ce que j'ai glané sur ce forum, il y a certainement plus élégant:
Code : Tout sélectionner
Option Explicit
Sub CopColAvec_DataArray
Dim oDoc As Object, oSheetSource As Object, oSheetCible As Object
Dim oRangeSource As Object, oRangeCible As Object, ACopier(), oRASource, oRACible
Dim Ymax as Integer, Ymin as Integer, Y as Integer
oDoc = thisComponent ' Le document
oSheetSource = oDoc.Sheets(1) ' La feuille Source : ici Feuille 2
oSheetCible = oDoc.Sheets(0) ' La feuille Cible : ici Feuille 1
Y = oSheetCible.getCellRangebyName("H5").Value 'La valeur de la cellule H5 de la Feuille 1
Ymax = (Y * 2) -1 'La limite max de la plage à copier
Ymin = Ymax - 1 'La limite min de la plage à copier
' La plage source
oRangeSource = oSheetSource.getCellRangeByPosition(1, Ymin, 1, Ymax)
' Les Données de la plage
ACopier = oRangeSource.getDataArray
' Les Index de la plage
oRASource = oRangeSource.RangeAddress
' La plage Cible redéfinie
oRangeCible = oSheetCible.getCellRangeByName("B2:B3")
' on copie
oRangeCible.setDataArray(ACopier)
End Sub