Unir dos codigos Private Sub Worksheet_Change(ByVal Target As Range)

Tengo los siguientes dos códigos

'Por. Dante Amor
'TRANSFERENCIA
    If Not Intersect(Target, Range("G:H")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "SI" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC DICIEMBRE 2015.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C:D")) Is Nothing Then
        If Cells(Target.Row, "C") <> "" And Cells(Target.Row, "D") <> "" Then
            Set r = Columns("C")
            Set b = r.Find(Cells(Target.Row, "C"), lookat:=xlWhole)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    If b.Row <> Target.Row Then
                        If Cells(b.Row, "D") = Cells(Target.Row, "D") Then
                            MsgBox "Factura y proveedor repetidos, en la fila " & b.Row, vbExclamation
                            Target.Select
                            Exit Do
                        End If

Los 2 codigos funcionan bien por separado, pero necesito unirlos

@aprendemos

1 Respuesta

Respuesta
1

H o l a:

Puedes poner las macros completas, necesito ver qué eventos tienen y supongo que los quieres en la misma hoja.

Hola Dante:

Los códigos van en la misma hoja. Son los siguientes

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
'TRANSFERENCIA
    If Not Intersect(Target, Range("G:H")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "SI" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC DICIEMBRE 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "SI" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            h2.Range("J" & u).Value = "SI"
            Application.CutCopyMode = False
        End If
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End If
    End If
'CHEQUE
    If Not Intersect(Target, Range("G:H")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "CHEQUE" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("CHEQUE")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            End If
    End If
'EFECTIVO
    If Not Intersect(Target, Range("G:H")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "EFECTIVO" Then
            '
            Application.ScreenUpdating = False
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("EFECTIVO")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            End If
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C:D")) Is Nothing Then
        If Cells(Target.Row, "C") <> "" And Cells(Target.Row, "D") <> "" Then
            Set r = Columns("C")
            Set b = r.Find(Cells(Target.Row, "C"), lookat:=xlWhole)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    If b.Row <> Target.Row Then
                        If Cells(b.Row, "D") = Cells(Target.Row, "D") Then
                            MsgBox "Factura y proveedor repetidos, en la fila " & b.Row, vbExclamation
                            Target.Select
                            Exit Do
                        End If
                    End If
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
        End If
    End If
End Sub

Gracias

H o l a:

Te anexo la macro unificada:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
'TRANSFERENCIA
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("G:H")) Is Nothing Then
        Application.ScreenUpdating = False
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "SI" Then
            '
            Set l2 = Workbooks("FACT CANC DICIEMBRE 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
        End If
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "SI" Then
            '
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
            h2.Range("J" & u).Value = "SI"
        End If
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "TRANSFERENCIA" And _
           UCase(Cells(Target.Row, "I")) = "" Then
            '
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("TRANSFERENCIA")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
        End If
'CHEQUE
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "CHEQUE" Then
            '
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("CHEQUE")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
         End If
'EFECTIVO
        If UCase(Cells(Target.Row, "G")) = "PAGO" And _
           UCase(Cells(Target.Row, "H")) = "EFECTIVO" Then
            '
            Set l2 = Workbooks("FACT CANC ENERO 2016.xlsm")
            Set h2 = l2.Sheets("EFECTIVO")
            u = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
            Range("B" & Target.Row & ":F" & Target.Row).Copy
            h2.Range("D" & u).PasteSpecial Paste:=xlPasteValues
        End If
        Application.CutCopyMode = False
    End If
'La otra parte
    If Not Intersect(Target, Range("C:D")) Is Nothing Then
        If Cells(Target.Row, "C") <> "" And Cells(Target.Row, "D") <> "" Then
            Set r = Columns("C")
            Set b = r.Find(Cells(Target.Row, "C"), lookat:=xlWhole)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    If b.Row <> Target.Row Then
                        If Cells(b.Row, "D") = Cells(Target.Row, "D") Then
                            MsgBox "Factura y proveedor repetidos, en la fila " & b.Row, vbExclamation
                            Target.Select
                            Exit Do
                        End If
                    End If
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
        End If
    End If
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas