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: 3158
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 13 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: 3158
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: 5754
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 9 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: 3158
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 14 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: 3158
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