Domanda elimina riga con stessi valori tra 2 fogli

giova_62

Utente abituale
18 Dicembre 2020
188
18
2007 - 365
6
Ciao,
ho un workbook con 2 fogli.
Se elimino una riga, o non è più presente, nel foglio "articoli da ordinare" bisogna eliminare la stessa riga nel foglio "ordina mail".
Il valore di riferimento uguale per i 2 foglio è nella colonna A.
Spero di essermi spiegato
g62
 

Allegati

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.580
145
Italy
2019
349
Puoi iniziare da questo TUTORIAL di ges @ges

con la differenza che invece di fogli in file diversi, dovrai creare il secondo riferimento al secondo foglio dello stesso file (quindi non serve aprire 2 file).
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.580
145
Italy
2019
349
Copia o cancella che differenza fa? Cambia solo l'istruzione.
Voglio dire che quello che a te serve è COME approcciarsi alla gestione di due fogli.
 

giova_62

Utente abituale
18 Dicembre 2020
188
18
2007 - 365
6
Ora copia tra 2 fogli

Visual Basic:
Option Explicit

Sub Copia_da_FileAltro()

    Dim WK1 As Workbook
           'Dim WK2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
   
    Dim FileAltro As String
    Application.ScreenUpdating = False
     
            'FileAltro = Application.GetOpenFilename
            'If FileAltro = "Falso" Then
            ' MsgBox "Operazione annullata!", vbOKOnly + vbInformation
            ' GoTo Chiudi
            'End If
     
    Set WK1 = ThisWorkbook
            'Set WK2 = Workbooks.Open(FileAltro)
     
    Set sh1 = WK1.Worksheets("articoli da ordinare")
    Set sh2 = WK1.Worksheets("ordina_mail")
     
    sh2.Range("A4:O23").Copy
    sh1.Range("A25").PasteSpecial Paste:=xlValues

    Application.CutCopyMode = False
            'WK2.Close SaveChanges:=False

    Application.ScreenUpdating = True
Chiudi:
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set WK1 = Nothing
            'Set WK2 = Nothing
End Sub
ma non so come modificare per eliminare la stessa riga
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.580
145
Italy
2019
349
Ora copia tra 2 fogli
Tu hai chiesto di eliminare la riga.
Se elimino una riga, o non è più presente, nel foglio "articoli da ordinare" bisogna eliminare la stessa riga nel foglio "ordina mail".
Quindi invece del Copy e PastSpecial devi usare il Find per trovare la riga corrispondente:
- Il metodo FIND
- https://docs.microsoft.com/en-us/office/vba/api/excel.range.find

e quando trovi la riga corrispondente la elimini:
 

giova_62

Utente abituale
18 Dicembre 2020
188
18
2007 - 365
6
Allora questa macro trova la stringa A-01 e sostituisce:
Visual Basic:
Option Explicit

Sub FindString()

    Dim c As Range
    Dim firstAddress As String

    With Worksheets(1).Range("A4:A500")
        Set c = .Find("A-01", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Value = Replace(c.Value, "A-01", "A-02")
                Set c = .FindNext(c)
            Loop While Not c Is Nothing
        End If
    End With

End Sub
ma io devo trovare la stessa stringa tra i due fogli e eliminarla
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.580
145
Italy
2019
349
ma io devo trovare la stessa stringa tra i due fogli e eliminarla
Ok, prova con questa.
N.B. Studiati bene il codice per capire come funziona, inclusi i controlli preventivi eseguiti prima di eliminare le righe.
Puoi aggiungere un pulsante (modulo) nel foglio ed assegnargli la macro sotto.

Selezioni una cella in colonna A e premi il pulsante per eseguirla.

Visual Basic:
Sub EliminaRiga()

    Dim riga As Range
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
  
    ' se seleziono nella colonna sbagliata, annulla
    If ActiveCell.Column > 1 Then
        MsgBox "E' necessario selezionare una cella nella colonna A", vbInformation
        Exit Sub
    End If
  
    ' se la cella è vuota, annulla
    If Trim(ActiveCell) = "" Then
        MsgBox "Questa cella è vuota", vbInformation
        Exit Sub
    End If
  
    ' chiedo conferma
    If MsgBox("Eliminare le righe uguali nei due fogli?", vbYesNo) = vbNo Then
        Exit Sub
    End If
  
    Set sh1 = ThisWorkbook.Sheets(1) ' imposta il foglio1
    Set sh2 = ThisWorkbook.Sheets(2) ' imposta il foglio 2
  
    With sh1.Range(ActiveCell.Address)
        ' cerco il valore in sh2
        Set riga = sh2.Range(ActiveCell.Address).Find(ActiveCell.Value, LookIn:=xlValues)
        If Not riga Is Nothing Then
            ' elimina in foglio 1
            sh1.Range(ActiveCell.Address).EntireRow.Delete xlShiftUp
            ' elimina in foglio 2
            riga.EntireRow.Delete xlShiftUp
        Else
            MsgBox "Riga " & ActiveCell.Value & " non trovata"
        End If
    End With
End Sub
 

Allegati

Ultima modifica:

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!