Date: prev next · Thread: first prev next last
2020 Archives by date, by thread · List index


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.linux@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+unsubscribe@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+unsubscribe@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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.