Pagina 1 di 1

[RISOLTO] macro Copia celle visibili e valori di incolla

Inviato: giovedì 22 novembre 2018, 17:04
da chimico
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

Re: macro Copia celle visibili e valori di incolla

Inviato: giovedì 22 novembre 2018, 20:14
da chimico
Ho fatto delle ricerche e ho trovato un ottimo esempio di mr. "patel" sul seguente link

nome macro: sub filtracolonna ...

http://ooo-forums.apache.org/it/forum/v ... 94&p=49916

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


abbracci

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 8:44
da patel
visto che hai letto quell'esempio dovresti aver notato che per prima cosa ho chiesto un file di esempio

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 11:31
da chimico
saluti sr. patel ,

segue un allegato di file di esempio

Grazie mille per la tua attenzione.

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 12:46
da patel
prova questa

Codice: Seleziona tutto

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

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 14:41
da charlie
Ciao @chimico e benvenuto sul forum.
Se ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Per una panoramica delle regole del forum puoi consultare il Manuale di sopravvivenza: http://forum.openoffice.org/it/forum/vi ... hp?f=1&t=2
Buon proseguimento.

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 16:44
da chimico
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

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 18:04
da patel
modifica così la prima sub

Codice: Seleziona tutto

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

Re: macro Copia celle visibili e valori di incolla

Inviato: venerdì 23 novembre 2018, 19:07
da chimico
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

Re: macro Copia celle visibili e valori di incolla

Inviato: sabato 24 novembre 2018, 5:47
da patel

Codice: Seleziona tutto

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

Re: macro Copia celle visibili e valori di incolla

Inviato: sabato 24 novembre 2018, 23:32
da chimico
[Risolto]

sr. Patel ,

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

grazie amico per ora per il grande aiuto


abbracci