Oops, credo ci sia un disguido, nel senso che sono andato molto avanti con il codice e non posso applicare la parte di pulizia come postata in precedenza...
Cerco di spiegare il software in modo da facilitare la comprensione:
- Codice: Seleziona tutto
Sub UNICA()
'
Dim I As Long
'
' Parte di pulizia del Generale
Sheets("Generale").Select
ActiveSheet.Unprotect
ir = 2
For x = 1 To 1600
If Cells(ir, 1) = Empty Then
Cells(ir, 1).EntireRow.Delete
ir = ir - 1
End If
ir = ir + 1
x = x + 1
Next
' Parte di ordinamento funzionante
Rows("2:200").Select
ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Add Key:=Range("G3:G214"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Generale").Sort
.SetRange Range("A2:O214")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Parte funzionante
UR = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row '<<<< CONTEGGIO RIGHE PIENE
For ir = 3 To UR
If Cells(ir, 7) <> Cells(ir - 1, 7) Then
Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count) '<<<RIGA MODIFICATA
ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value '<<<RIGA FONDAMENTALE
ActiveSheet.Range("A" & ir, "N" & ir).Value = Worksheets("Generale").Range("A" & ir, "N" & ir).Value
ActiveSheet.Range("O" & ir).Value = Worksheets("Generale").Range("P" & ir).Value
Sheets("Generale").Select
End If
If Cells(ir, 7) = Cells(ir - 1, 7) Then
Sheets(Worksheets("Generale").Range("G" & ir).Value).Select
ActiveSheet.Range("A" & ir, "N" & ir).Value = Worksheets("Generale").Range("A" & ir, "N" & ir).Value
ActiveSheet.Range("O" & ir).Value = Worksheets("Generale").Range("P" & ir).Value
Sheets("Generale").Select
End If
Next
' Parte di pulizia dei fogli clienti
For h = 15 To Sheets.Count
Sheets(h).Select '<<< PROBLEMA QUI
ir = 2
For x = 1 To 200
If Cells(ir, 7) = Empty Then
Cells(ir, 7).EntireRow.Delete
ir = ir - 1
End If
ir = ir + 1
x = x + 1
Next
Next
Sheets("COMMITTENTE").Select
ActiveWindow.SelectedSheets.Visible = False
End Sub
Ecco, adesso ci tengo a precisare che i fogli che devo pulire dalle righe bianche sono fogli che vengono generati in automatico dalla macro e sono variabili, quindi ho necessità di effettuare un conteggio, in modo da arrestare opportunamente il "for". Credo che l'unico modo sia con una "SheetsCount", ma non capisco come sistemarla affinchè funzioni senza darmi errore.
Grazie