Modifica macro

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
matteotassi
00venerdì 9 febbraio 2018 12:48
Salve, in allegato un file excel creato qualche tempo fa.
Volevo sapere come potrei modificare la macro chiamata "Aggiorna", copiando anche i dati della colonna G (della scheda mensile), nei singoli altri fogli (unità immobiliari) alla posizione rispettiva sulla colonna A.

Grazie dell'aiuto
dodo47
00venerdì 9 febbraio 2018 13:44
Ciao
non so se ho capito, prova a sostituire:

Public Sub AggiornaFogli(aWB As Workbook, aRng As Range, i As Long)
    Dim destSH As Worksheet
    Dim srcRng As Range, destrng As Range
    Dim rngFormulas As Range
    Dim aCell As Range, rCell As Range
    Dim iCtr As Long, Classe As String

    For Each rCell In aRng.Cells
        If rCell.Value <> vbNullString Then
            Set srcRng = rCell.Offset(0, -2).Resize(1, 3)
            Set destSH = aWB.Sheets(CStr(rCell.Offset(0, 2).Value))
            Classe = rCell.Offset(, 3)
            With destSH
                .Select
                iCtr = 0
                Set rngFormulas = destSH.Columns("D").SpecialCells(xlCellTypeFormulas)
                For Each aCell In rngFormulas.Cells
                    iCtr = iCtr + 1
                    If iCtr = i Then
                        Set destrng = aCell.End(xlUp)(2).Offset(0, -2).Resize(1, 3)
                        Exit For
                    End If
                Next aCell
                With destrng
                    .Value = srcRng.Value
                    If Cells(.Row, 2) <> "" Then Cells(.Row, 1) = Classe
                    .Offset(1).EntireRow.Insert CopyOrigin:=xlFormatFromLeftOrAbove
                End With
            End With
        End If
        Classe = ""
    Next rCell
End Sub


Saluti


matteotassi
00venerdì 9 febbraio 2018 16:48
Esatto, grazie!

Se volessi creare un automatismo per cancellare i dati inseriti sulla scheda 'Mensile' per intenderci solo quelli evidenziati nell'allegato (ho fatto solo il primo mese per capire)?
dodo47
00venerdì 9 febbraio 2018 17:58
Ciao
la struttura è molto complessa per avere riferimenti certi.

Se vanno cancellati tutti i dati che contengono una "DATA" in col. C, basta che fai un loop di tale colonna per cancellare le celle interessate.

saluti



raffaele1953
00sabato 10 febbraio 2018 01:22
Devi usare una sola riga sotto tra elimina e cancella
vb
Sub Elimina_righe()
Dim Ur As Long, X As Long, N As Long
Ur = Sheets("Mensile").Range("C" & Rows.Count).End(xlUp).Row
N = InputBox("Inserire il numero del mese da cancellare, ex gennaio = 1", , 0)
On Error Resume Next
For X = Ur To 6 Step -1
    If Month(Sheets("Mensile").Cells(X, 3).Value) = N Then
        'Sheets("Mensile").Range("A" & X & ":G" & X).Clear 'questo cancella
        'Sheets("Mensile").Rows(X & ":" & X).Delete 'questo elimina
    End If
Next X
MsgBox "Fatto"
End Sub
matteotassi
00sabato 10 febbraio 2018 17:44
Grazie della risposta Raffaele,
la macro da te proposta funziona, vorrei solo che non venga cancellata la formattazione (nella colonna A ho un elenco a discesa che mi scompare altrimenti) ma solo il contenuto delle celle e che la colonna F non venga toccata dalla macro (in quanto contiene una formula basata sui valori delle altre celle e quindi se le altre sono zero anche quella si annulla in automatico.

Grazie
raffaele1953
00sabato 10 febbraio 2018 18:00
vb
Sub Elimina_valori()
Dim Ur As Long, X As Long, N As Long
Ur = Sheets("Mensile").Range("C" & Rows.Count).End(xlUp).Row
N = InputBox("Inserire il numero del mese da cancellare, ex gennaio = 1", , 0)
On Error Resume Next
For X = Ur To 6 Step -1
    If Month(Sheets("Mensile").Cells(X, 3).Value) = N Then
        Sheets("Mensile").Range("A" & X & ":E" & X) = "" ' azzera i valori
        Sheets("Mensile").Range("G" & X) = "" ' azzera anche colonna G ma non la F
    End If
Next X
MsgBox "Fatto"
End Sub
matteotassi
00venerdì 16 febbraio 2018 11:35
Ciao,

in risposta a quanto mi avevi proposto:

Ciao
non so se ho capito, prova a sostituire:


Public Sub AggiornaFogli(aWB As Workbook, aRng As Range, i As Long)
Dim destSH As Worksheet
Dim srcRng As Range, destrng As Range
Dim rngFormulas As Range
Dim aCell As Range, rCell As Range
Dim iCtr As Long, Classe As String

For Each rCell In aRng.Cells
If rCell.Value <> vbNullString Then
Set srcRng = rCell.Offset(0, -2).Resize(1, 3)
Set destSH = aWB.Sheets(CStr(rCell.Offset(0, 2).Value))
Classe = rCell.Offset(, 3)
With destSH
.Select
iCtr = 0
Set rngFormulas = destSH.Columns("D").SpecialCells(xlCellTypeFormulas)
For Each aCell In rngFormulas.Cells
iCtr = iCtr + 1
If iCtr = i Then
Set destrng = aCell.End(xlUp)(2).Offset(0, -2).Resize(1, 3)
Exit For
End If
Next aCell
With destrng
.Value = srcRng.Value
If Cells(.Row, 2) <> "" Then Cells(.Row, 1) = Classe
.Offset(1).EntireRow.Insert CopyOrigin:=xlFormatFromLeftOrAbove
End With
End With
End If
Classe = ""
Next rCell
End Sub


Saluti



Volevo chiederti come modificare ulteriormente il codice qualora volessi copiare anche altre 4 colonne a destra della colonna G della scheda mensile, posizionate nelle prime 4 colonne libere sui vari fogli di destinazione.

Grazie dell'aiuto
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 13:01.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com