Pannello di Controllo Moderatore ]

[RISOLTO] macro Copia celle visibili e valori di incolla

Creare una macro - Scrivere uno script - Usare le API

[RISOLTO] macro Copia celle visibili e valori di incolla

Messaggioda chimico » giovedì 22 novembre 2018, 18:04

saluti

         Sto cercando una macro per copiare le celle filtrate per filtro automatico nel foglio di lavoro 1, cioè celle visibili e Incolla automaticamente valori non formattati nel foglio di lavoro 2
 
         a causa della grande quantità di linee e celle filtrate, è meglio fare operazioni con Macro

         Sto già provando a fare Macro, ma non ottengo la perfezione, quindi chiedo aiuto per te


Dettagli del problema

         nel foglio di lavoro 1 ha un filtro automatico dalla colonna A alla colonna Z, alcune colonne vengono filtrate

         la Macro deve copiare le celle visibili dalla colonna A alla colonna E, incolla i valori nella prima cella vuota della colonna A nel foglio di lavoro 2

         tornare al foglio di lavoro 1 e copiare le celle visibili dalla colonna "I" alla colonna "L" e incollare i valori nella prima cella vuota della colonna F in foglio di lavoro 2

         tornare al foglio di lavoro 1 e copiare le celle visibili dalla colonna "U" alla colonna W e incollare i valori nella prima cella vuota della colonna "J" nel foglio di lavoro 2

         infine, tornare al foglio di lavoro 1 e annullare tutti i filtri, ovvero pulire i filtri


Link Ho cercato di aiutare

https://forum.openoffice.org/en/forum/v ... 5&p=438954

https://forum.openoffice.org/en/forum/v ... 20&t=58810
        



Abbraccia gli amici
Ultima modifica di chimico il mercoledì 28 novembre 2018, 18:30, modificato 5 volte in totale.
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20

Re: macro Copia celle visibili e valori di incolla

Messaggioda chimico » giovedì 22 novembre 2018, 21:14

Ho fatto delle ricerche e ho trovato un ottimo esempio di mr. "patel" sul seguente link

nome macro: sub filtracolonna ...

viewtopic.php?t=9094&p=49916

puoi aiutarmi ad adattare l'esempio di mr. "patel" al mio problema?


abbracci
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20

Re: macro Copia celle visibili e valori di incolla

Messaggioda patel » venerdì 23 novembre 2018, 9:44

visto che hai letto quell'esempio dovresti aver notato che per prima cosa ho chiesto un file di esempio
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3283
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro Copia celle visibili e valori di incolla

Messaggioda chimico » venerdì 23 novembre 2018, 12:31

saluti sr. patel ,

segue un allegato di file di esempio

Grazie mille per la tua attenzione.
Allegati
Visibile.ods
(25.72 KiB) Scaricato 23 volte
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20

Re: macro Copia celle visibili e valori di incolla

Messaggioda patel » venerdì 23 novembre 2018, 13:46

prova questa
Codice: Seleziona tutto   Espandi visualeStringi visuale
sub copiafiltro
   oDoc = ThisComponent
   sheet1= thiscomponent.sheets(0)
   sheet2= thiscomponent.sheets(1)
   oCursor = Sheet1.createcursor
   oCursor.gotoendofusedarea(false)
   nEndrow = oCursor.rangeaddress.Endrow
     
   rng=sheet1.getcellrangebyPosition(0,0,4,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("A1") ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(8,0,11,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("F1") ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(20,0,22,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("J1") ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True
'---------- ripristina il foglio1   
'  oFilterDesc = Sheet1.createFilterDescriptor(True)
'  Sheet1.filter(oFilterDesc)
end sub

Function copyTiledRanges(oDoc,oRanges,oTopLeft, bVal As Boolean)
Dim oTargetSheet, oEnum, aTgt, oTgtRg, oNext, aNext, aPrev, iRow&, bCalc As Boolean
Dim oResult as New com.sun.star.table.CellRangeAddress
   bCalc = oDoc.isAutomaticCalculationEnabled()
   oDoc.enableAutomaticCalculation(False)
   aTgt = oTopLeft.getCellAddress()
   iRow = aTgt.Row
   oTargetSheet = oDoc.getSheets.getByIndex(aTgt.Sheet)
   oResult.Sheet = aTgt.Sheet
   oResult.StartColumn = aTgt.Column
   oResult.StartRow = aTgt.Row
   oEnum = oRanges.createEnumeration()
   while oEnum.hasMoreElements()
      oNext = oEnum.nextElement()
      aNext = oNext.getRangeAddress()
      if not isUnoStruct(aPrev) then aPrev = aNext
      REM SheetCellRanges-collections are sorted ascending by StartColumn and StartRow
      REM therefore we go down column by column
      If aNext.StartColumn > aPrev.StartColumn then
         'start new column at top row, right of previous range
         aTgt.Column = aTgt.Column + aPrev.EndColumn - aPrev.StartColumn +1
         aTgt.Row = iRow
      elseIf aNext.StartRow > aPrev.StartRow then
         'target cell below the previous range in same column
         aTgt.Row = aTgt.Row + aPrev.EndRow - aPrev.StartRow +1
      endif
      oTargetSheet.copyRange(aTgt, aNext)
      if bVal Then
         oTgtRg = oTargetSheet.getCellRangeByPosition( _
            aTgt.Column, aTgt.Row, _
            aTgt.Column + aNext.EndColumn - aNext.StartColumn, _
            aTgt.Row + aNext.EndRow - aNext.StartRow _
         )
         oTgtRg.setDataArray(oNext.getDataArray())
      endif
      aPrev = aNext
   wend
   oResult.EndColumn = aTgt.Column + aNext.EndColumn - aNext.StartColumn
   oResult.EndRow = aTgt.Row + aNext.EndRow - aNext.StartRow
   oDoc.enableAutomaticCalculation(bCalc)
   copyTiledRanges = oTargetSheet.getCellRangeByPosition( _
   oResult.StartColumn, oResult.StartRow, oResult.EndColumn, oResult.EndRow )
End Function
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3283
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro Copia celle visibili e valori di incolla

Messaggioda charlie » venerdì 23 novembre 2018, 15:41

Ciao @chimico e benvenuto sul forum.
Se ti vuoi presentare puoi farlo qui: https://forum.openoffice.org/it/forum/viewforum.php?f=16
Per una panoramica delle regole del forum puoi consultare il Manuale di sopravvivenza: http://forum.openoffice.org/it/forum/viewtopic.php?f=1&t=2
Buon proseguimento.
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 6.0.7
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5971
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: macro Copia celle visibili e valori di incolla

Messaggioda chimico » venerdì 23 novembre 2018, 17:44

sr. patel ,

ottimo il tuo codice, sono grato ora per il tuo aiuto

osservazione

          manca solo una cosa, la macro ha bisogno di incollare i valori nella prima cella "vuota" della colonna nel foglio di lavoro 2, così posso salvare una storia nel foglio di lavoro 2

          la macro corrente ha incollato i valori su, cioè incollati sopra i valori numerici che erano lì

          Dovevo incollare sotto i valori numerici, cioè nella prima cella "vuota" che trovo mentre sfoglio i dati che esistono nella colonna, quindi salverò una cronologia dei valori filtrati

          è possibile farlo nella macro corrente?

          segue il foglio di calcolo mentre la macro scorreva


Grazie mille per la tua attenzione.

amici abbracci
Allegati
Visibile.ods
(31.74 KiB) Scaricato 15 volte
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20

Re: macro Copia celle visibili e valori di incolla

Messaggioda patel » venerdì 23 novembre 2018, 19:04

modifica così la prima sub
Codice: Seleziona tutto   Espandi visualeStringi visuale
sub copiaFiltro
   oDoc = ThisComponent
   sheet1= thiscomponent.sheets(0)
   sheet2= thiscomponent.sheets(1)
   oCursor = Sheet1.createcursor
   oCursor.gotoendofusedarea(false)
   nEndrow = oCursor.rangeaddress.Endrow
   oCursor = Sheet2.createcursor
   oCursor.gotoendofusedarea(false)
   LR2 = oCursor.rangeaddress.Endrow + 1 ' +2 per lasciare una riga vuota
     
   rng=sheet1.getcellrangebyPosition(0,0,4,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("A" & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(8,0,11,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("F"  & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(20,0,22,nEndrow)
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("J"  & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True
   
'---------- ripristina il foglio1   
'  oFilterDesc = Sheet1.createFilterDescriptor(True)
'  Sheet1.filter(oFilterDesc)

end sub
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3283
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro Copia celle visibili e valori di incolla

Messaggioda chimico » venerdì 23 novembre 2018, 20:07

Sto inviando il file allegato con i nuovi risultati nel foglio di lavoro 2

sta incollando le intestazioni delle intestazioni sull'ultima riga


osservazione

Non si dovrebbero copiare intestazioni dal foglio di lavoro 1

copia solo dalla riga 2 in basso

non copiare i titoli del foglio di lavoro 1


amici abbracci
Allegati
Visibile.ods
(31.84 KiB) Scaricato 21 volte
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20

Re: macro Copia celle visibili e valori di incolla

Messaggioda patel » sabato 24 novembre 2018, 6:47

Codice: Seleziona tutto   Espandi visualeStringi visuale
sub copiaFiltro
   oDoc = ThisComponent
   sheet1= thiscomponent.sheets(0)
   sheet2= thiscomponent.sheets(1)
   oCursor = Sheet1.createcursor
   oCursor.gotoendofusedarea(false)
   nEndrow = oCursor.rangeaddress.Endrow
   oCursor = Sheet2.createcursor
   oCursor.gotoendofusedarea(false)
   LR2 = oCursor.rangeaddress.Endrow + 1 ' +2 per lasciare una riga vuota
     
   rng=sheet1.getcellrangebyPosition(0,1,4,nEndrow) '<<<<<<<<<<<
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("A" & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(8,1,11,nEndrow)'<<<<<<<<<<<
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("F"  & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True

   rng=sheet1.getcellrangebyPosition(20,1,22,nEndrow)'<<<<<<<<<<<
   oRanges = rng.queryVisibleCells()
   oCell = Sheet2.getcellrangebyName("J"  & LR2) ' destinazione
   oTargetRange = copyTiledRanges(oDoc, oRanges, oCell, bValues)
   sheet2.Columns.OptimalWidth  = True
   
'---------- ripristina il foglio1   
'  oFilterDesc = Sheet1.createFilterDescriptor(True)
'  Sheet1.filter(oFilterDesc)

end sub

ho segnalato con '<<<<<<<<<<< le righe modificate
-------------------
OpenOffice 4.1 e Libre Office 6.o.7.3 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 3283
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro Copia celle visibili e valori di incolla

Messaggioda chimico » domenica 25 novembre 2018, 0:32

[Risolto]

sr. Patel ,

codice eccellente, sembrava fantastico, funzionava come dovrebbe :bravo:

grazie amico per ora per il grande aiuto


abbracci
LibreOffice 5.4.4.2 no Windows 7
chimico
 
Messaggi: 95
Iscritto il: giovedì 22 novembre 2018, 16:20


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite