Merci Nicolas et Jean-Luc pour vos pistes,
Voilà le résultat ci-dessous un bout de code pas entièrement nettoyé
faute de temps
qui utilise
getCellRangesByName avec le s cela change tout
Cordialement
Jean-Luc
Sub
CopierUnTableauDansUnTableauDUnePage(oMonDocumentCUTDUP,NomFeuilleTableauCUTDUP,PlageCellulesAcopierCUTDUP,oMonDocumentTexteCUTDUP,NomDuTableauCUTDUP,PositionDeLaCopieDansLeTableauCUTDUP,LieuDAppelCUTDUP)
Dim oMonTableauCUTDUP, oLeTableauCUTDUP, oMaFeuilleCUTDUP,
oMaCelluleCUTDUP, oCurseurTexteCUTDUP, oCurseurVisibleCUTDUP,
fenetreAfficherCUTDUP As Object
Dim NomDuFichierCalcCUTDUP, PlageAbsolueCellulesAcopierCUTDUP,
LesPlagesDeCellulesCUTDUP (0 to 10) As String
Dim LeDiagrammeExisteCUTDUP As Boolean
Dim oDispatchHelperCUTDUP As Object
' dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim ArgsCUTDUP(0) as new com.sun.star.beans.PropertyValue
dim PysDoc,PysCopie as object, PysDestination, oDocCtrl, oDocFrame,
oDrawDoc, oDrawPage , oDrawDocCtrl, oDrawDocFrame as object
Dim NiveauDebugCUTDUP, NbrDeTableauCUTDUP,DeplacementHorizontalCUTDUP,
DeplacementVerticalCUTDUP, iCUTDUP As Integer
NiveauDebugCUTDUP=1
MessageDebug(NiveauDebugCUTDUP,3,582,"CopierUnTableauDansUnePage")
NomDuFichierCalcCUTDUP = oMonDocumentCUTDUP.Location 'l'argument n'est
pas facultatif
' On Error Goto errmodifCUTDUP
fenetreAfficherCUTDUP=
oMonDocumentCUTDUP.CurrentController.Frame.ContainerWindow
fenetreAfficherCUtDUP.toFront
oMaFeuilleCUTDUP =
oMonDocumentCUTDUP.sheets.getByName(NomFeuilleTableauCUTDUP)
If oMaFeuilleCUTDUP.Name =NomFeuilleTableauCUTDUP and
Not(LaChaineContientLesCaracteres(PlageCellulesAcopierCUTDUP,";")) and
PlageCellulesAcopierCUTDUP<>"" Then
oMonTableauCUTDUP =
oMaFeuilleCUTDUP.getCellRangeByName(PlageCellulesAcopierCUTDUP)
Else
LesPlagesDeCellulesCUTDUP=decoupage_d_une_chaine_avec_separateur(PlageCellulesAcopierCUTDUP,";")
' Xray LesPlagesDeCellulesCUTDUP
PlageAbsolueCellulesAcopierCUTDUP=NomFeuilleTableauCUTDUP & "." &
LesPlagesDeCellulesCUTDUP(0)
For iCUTDUP=1 to UBound(LesPlagesDeCellulesCUTDUP)
PlageAbsolueCellulesAcopierCUTDUP=PlageAbsolueCellulesAcopierCUTDUP &
";" & NomFeuilleTableauCUTDUP & "." & LesPlagesDeCellulesCUTDUP(1)
Next iCUTDUP
Print(NomFeuilleTableauCUTDUP & " " & PlageCellulesAcopierCUTDUP & "
" & NomDuTableauCUTDUP & " " & PositionDeLaCopieDansLeTableauCUTDUP & "
" &NomFeuilleTableauCUTDUP & " : " & PlageAbsolueCellulesAcopierCUTDUP)
' Xray oMaFeuilleCUTDUP
oMonTableauCUTDUP =
oMonDocumentCUTDUP.sheets.getCellRangesByName(PlageAbsolueCellulesAcopierCUTDUP)
' oMonTableauCUTDUP =
oMonDocumentCUTDUP.sheets.getCellRangesByName(NomFeuilleTableauCUTDUP
&"." & PlageCellulesAcopierCUTDUP &";" & NomFeuilleTableauCUTDUP &
".P41:Y50")
' ;P41:Y50
Xray oMonTableauCUTDUP
Dim oRanges, oCtrl, plage As object
oCtrl = oMonDocumentCUTDUP.CurrentController
oRanges =
oMonDocumentCUTDUP.createInstance("com.sun.star.sheet.SheetCellRanges")
' plages = oDoc.Sheets.getCellRangesByName(refs)
for each plage in oMonTableauCUTDUP
oRanges.addRangeAddress(plage.RangeAddress, False)
next plage
oCtrl.select(oRanges)
print("Stop")
End If
thiscomponent.currentcontroller.select(oMonTableauCUTDUP)
oLeTableauCUTDUP = ThisComponent.CurrentController.Frame
' Xray oLeTableauCUTDUP
oDispatchHelperCUTDUP =
createUnoService("com.sun.star.frame.DispatchHelper")
print ("le tableau est sélectionné ?")
oDispatchHelperCUTDUP.executeDispatch(oLeTableauCUTDUP , ".uno:Copy",
"", 0, Array())
fenetreAfficherCUTDUP=
oMonDocumentTexteCUTDUP.CurrentController.Frame.ContainerWindow
fenetreAfficherCUtDUP.toFront
If ThisComponent.Title<>oMonDocumentTexteCUTDUP.Title Then
acDocActiver(oMonDocumentTexteCUTDUP.Title)
If ThisComponent.Title<>oMonDocumentTexteCUTDUP.Title Then
print("le document n'est pas activé
ThisComponent.CurrentController.Select(oMonTableauCUDDUP)")
Xray ThisComponent
EnregistrerEtFermer(oMonDocumentCUTDUP)
EnregistrerE(oMonDocumentTexteCUTDUP)
End If
End If
oMonTableauCUTDUP =
oMonDocumentTexteCUTDUP.createInstance("com.sun.star.text.TextTable")
oMonTableauCUTDUP =
FindObjectByName(oMonDocumentTexteCUTDUP.TextTables,NomDuTableauCUTDUP,
"com.sun.star.text.TextTable")
oMaCelluleCUTDUP=oMonTableauCUTDUP.getCellByName(PositionDeLaCopieDansLeTableauCUTDUP)
If IsEmpty(oMaCelluleCUTDUP)or IsNull(oMaCelluleCUTDUP) Then
Print("La cellule n'est pas trouvé " &
PositionDeLaCopieDansLeTableauCUTDUP)
Xray oMonTableauCUTDUP
Xray oMaCelluleCUTDUP
oMaCelluleCUTDUP=oMonTableauCUTDUP.getCellByName("A1")
Else
' Xray oMaCelluleCUTDUP
End If
oCurseurTexteCUTDUP= oMaCelluleCUTDUP.createTextCursor
oCurseurVisibleCUTDUP=oMonDocumentTexteCUTDUP.currentcontroller.ViewCursor
If IsEmpty(oCurseurVisibleCUTDUP.Cell) then
oCurseurVisibleCUTDUP.jumpToPage(1)
oCurseurVisibleCUTDUP.gotoRange(oCurseurTexteCUTDUP,False)
Else
oCurseurVisibleCUTDUP.gotoRange(oCurseurTexteCUTDUP,False)
End If
If oCurseurVisibleCUTDUP.Cell.CellName =
PositionDeLaCopieDansLeTableauCUTDUP Then
Else
Print(" CurseurVisibleCUTDUP 2")
Xray oCurseurVisibleCUTDUP
End If
dim document as object
document = ThisComponent.CurrentController.Frame
'com.sun.star.comp.framework.Frame
' Xray document
' Xray oMonDocumentTexteCUTDUP.CurrentController.Frame
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "SelectedFormat"
args6(0).Value = 3 '3 Copie au paragraphe 1 2 et 4 pas de copie
oDispatchHelperCUTDUP.executeDispatch( document,
".uno:ClipboardFormatItems", "", 0, args6()) 'copie dans le tableau
oDispatchHelperCUTDUP.executeDispatch(document,
".uno:SetAnchorToChar", "", 0, Array())
Exit Sub
errmodifCUTDUP:
print ("Dans le Programme ModifierUnDiagramme L'instruction n'existe
pas erreur non Bloquante N°:" & Err & " " & Error & "à la ligne " & Erl)
' Resume Next
End Sub ' CopierUnTableauDansUnTableauDUnePage 8
------------------------------------------------------------------------
8 -----
Le 25/05/2020 à 09:14, Jean-Luc a écrit :
Bonjour
Je ne suis pas très sûr de ma réponse
Mais il me semble que getCellRangeByName s'applique à des objets
SheetCellRange.
Les plages complexe sont des objets SheetCellRanges.
Bonne journée
Le lun. 25 mai 2020 à 08:48, linux <supsup.li...@free.fr> a écrit :
Bonjour à tous,
Je souhaite copier un tableau discontinu par macro
Je pensai utiliser la fonction getCellRangeByName, mais je n'arrive pas
à trouver la bonne syntaxe
PlageCellulesAcopierCUTDUP="A1:C5,F1:K5" ne fonctionne pas
PlageCellulesAcopierCUTDUP="A1:C5;F1:K5" ne
fonctionne pas
oMonTableauCUTDUP =
oMaFeuilleCUTDUP.getCellRangeByName(PlageCellulesAcopierCUTDUP)
Est ce une limite getCellRangeByName ?
Quelqu'un a t'il une autre piste ?
Merci par avance
Jean-Luc
--
Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour vous
désinscrire
Les archives de la liste sont disponibles à
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy
--
Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy