Incollare dati solo su celle visibili

Buongirono a tutti! Sono nuovo del forum e sto da poco adoperando Cal come foglio di calcolo.
Di seguito le informazioni della versione:

Version: 25.8.4.2 (X86_64)
Build ID: 290daaa01b999472f0c7a3890eb6a550fd74c6df
CPU threads: 8; OS: Windows 11 X86_64 (build 26200); UI render: Skia/Vulkan; VCL: win
Locale: it-IT (it_IT); UI: it-IT
Calc: threaded

Durante una analisi di una serie di dati mi sono imbattuto in un problema banalissimo ma estremamente noioso.
Ho una serie lunga di righe filtrare con filtro multiplo su più colonne. In una colonna specifica devo incollare un valore (una banale X), solo nelle celle visibili.
Fin tanto che lo faccio riga per riga nessun problema, ma se provo a selezionare più righe, consecutive tra loro nella visione filtrata ma non consecutive tra loro nella visione globale (per capirci, le righe 123 e 128 che con i dati filtrati sono una sotto l’altra) l’incolla va a operare anche sulle righe non visibili.
L’opzione di incolla speciale, così come la shortcut ctr+alt+v non sono disponibili.

Per ora l’unico sistema che ho trovato funzionare è quello di selezionare con il ctrl+click le celle di destinazione, ma comunque non è il massimo della vita; sono abbastanza convinto che il famoso concorrente a pagamento permetta di incollare solo sulle celle visibili in una visualizzazione filtrata.

Purtroppo posso inserire un solo screen:

image
Situazione per cui l’incolla speciale si disattiva con una selezione di più righe.

Grazie mille a tutti per il supporto

Inserisci le informazioni da
Aiuto → Informazioni su LibreOffice

2026-02-11 13 17 20


La mia versione è:

Version: 26.2.0.3 (X86_64)
Build ID: 620(Build:3)
CPU threads: 8; OS: Windows 11 X86_64 (build 26200); UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: threaded

Inserite nel tread iniziale come modifica, grazie dell’indicazione.

  • Nella prima cella filtrata inserisci X
  • Copia in memoria la cella con X
  • Posizionati con il cursore nella cella sottostante
  • Tasti CTRL + SHIFT + FrecciaGIU’ e selezioni tutto il range celle filtrate nella colonna
  • Per ultimo con tasti SHIFT + INS. incolli la X nelle sole cella filtrate

Sembra comunque che voglia incollare anche sulle celle non visibili; nella selezione di celel visibili, tutte vuote, quando vado a incollare con SHIFT+ins mi compare questo messaggio

image

Come se ignorasse i filtri.

CTRL+SHIFT+FrecciaGIU’

  • con le celle vuote filtrate selezionerebbe range fino a fine colonna;
  • puoi selezionare il range con mouse oppure definirlo nella casella del nome seguito da tasto invio;

SHIFT+INS incolla solo nelle celle filtrate selezionate.

Fai test di verifica su altro file.
Allego un esempio.
Test - Incolla solo su celle filtrate nella colonna.ods (14.9 KB)

Sub IncollaDatiNelleCelleVisibili()

    Dim oPlan, oInicio, oCursor, oAddr, oIntervalo, oLinhas As Object
    Dim nLinhaInicial, nLinhaFinal, i As Long, nLinhaReal As Long
    Dim sArea, sText As String

'===================================
	sInic = InputBox (" ", "Cellula iniziale dell'area. ( Esempio: A2 )", "")

'===================================
	sText = InputBox (" ", "Testo da digitare. ( Esempio: Testo )", "")
	
'===================================
	sColm = InputBox (" ", "Colonna da compilare. ( Esempio: C ).", "")

'===================================    
    oPlan = ThisComponent.CurrentController.ActiveSheet
    
    ' Célula inicial
    oInicio = oPlan.getCellRangeByName( sInic ) '<=======================
    
    ' Guarda linha inicial (base 0)
    nLinhaInicial = oInicio.CellAddress.Row
    
    ' Cria cursor
    oCursor = oPlan.createCursorByRange(oInicio)
    
    ' Vai até o fim do bloco contínuo (Ctrl + ↓)
    oCursor.gotoEnd()
    
    ' Seleciona o bloco
    ThisComponent.CurrentController.select(oCursor)
    
    ' Pega endereço final
    oAddr = oCursor.RangeAddress
    nLinhaFinal = oAddr.EndRow
    
    ' Monta área (convertendo base 0 para base 1)
    sArea = "A" & (nLinhaInicial + 1) & ":A" & (nLinhaFinal + 1)
    
    oPlan = ThisComponent.CurrentController.ActiveSheet
    oIntervalo = oPlan.getCellRangeByName( sArea )  '<=======================
    oLinhas = oIntervalo.Rows
    
    For i = 0 To oLinhas.getCount() - 1
        
        If oLinhas.getByIndex(i).IsVisible Then
            
            nLinhaReal = oIntervalo.RangeAddress.StartRow + i + 1
            
            ' Usa letra da coluna diretamente
            oPlan.getCellRangeByName( sColm & nLinhaReal).String = sText  '<=======================
            
        End If
        
    Next i

End Sub