Risolto Unire due macro

Stef69

Utente junior
15 Marzo 2019
88
8
365
3
Salve mi trovo difronte ad un problema che non riesco a risolvere con un file con due macro..
la prima macro funziona perfettamente ,ma anche la seconda funziona se inserisco la parola "ORDINA" manualmente e
mi crea una copia della riga in un altro foglio ,mentre se questa parola la faccio sviluppare da un formula non funziona
allego un file di esempio sperando che qualcuno mi aiuti a capire.

grazie fin d'ora
 

Allegati

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
21.644
1.733
Como
2011MAC 2016WIN
462
Ciao,
ma in pratica tu vorresti che scrivi "ORDINA" nella colonna K del Foglio1 riporti nella colonna A e F del Foglio2, nella corrispondente riga, i nomi presenti nella colonna A e F del Foglio1?

Beh, se è così basterebbe che nel modulo del Foglio2 metti questa macro ( e cancella la tua macro legata all'evento Change)
Visual Basic:
Private Sub Worksheet_Activate()
    Cells.ClearContents
    With Sheets("Foglio1")
        uR = .Cells(Rows.Count, "K").End(xlUp).Row
        For j = 1 To uR
            If .Cells(j, "K") = "ORDINA" Then
                Cells(j, "A") = .Cells(j, "A")
                Cells(j, "F") = .Cells(j, "F")
            End If
        Next
    End With
End Sub
 

Stef69

Utente junior
15 Marzo 2019
88
8
365
3
Ciao Ges,
grazie per il riscontro , ho provato velocemente il tuo file ho eliminato la funzione di cancellazione che a me non serve volendo avere entrambi i dati nei 2 fogli e il tutto funziona bene.Mi manca solo una cosa e vorrei riuscirci da solo, che nel foglio 2 mi copi dalla prima cella vuota.
grazie ancora per la tua risposta
 

Stef69

Utente junior
15 Marzo 2019
88
8
365
3
Ciao Ges,
L'evento "ORDINA" foglio1 avviene in modo causale nelle righe, io ho bisogno che in foglio2 vengano copiati in ordine continuo indipendente dal foglio1 senza lasciare righe vuote , l'ultima riga del foglio2 mi deve dare l'ultima operazione avvenuta.
Avevo guardato un po troppo velocemente la tua macro, allego un nuovo file di esempio.
 

Allegati

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
21.644
1.733
Como
2011MAC 2016WIN
462
Mi manca solo una cosa e vorrei riuscirci da solo
Pensavo ci riuscivi da solo, comunque non è difficile.
Imposta una variabile col numero di riga (per esempio x =1) e poi incrementala dopo che scrive ciascuna riga
Il tutto così
Visual Basic:
Private Sub Worksheet_Activate()
    With Sheets("Foglio1")
    x = 1
        uR = .Cells(Rows.Count, "K").End(xlUp).Row
        For j = 1 To uR
            If .Cells(j, "K") = "ORDINA" Then
                Cells(x, "A") = .Cells(j, "A")
                Cells(x, "B") = .Cells(j, "B")
                Cells(x, "C") = .Cells(j, "C")
                Cells(x, "D") = .Cells(j, "D")
                x = x + 1
            End If
        Next
    End With
End Sub
 
  • Like
Reactions: Stef69

Stef69

Utente junior
15 Marzo 2019
88
8
365
3
Ciao Ges
grazie per la tua disponibilità avevo già risolto il problema ti allego il codice finale del mio file operativo a cui sono arrivato.
la tua macro è molto buona l'unica pecca che se non apri il foglio2 non aggiorna l'evento del foglio1 e a catena non mi genera la stampa del foglio3.
ti ringrazio calorosamente per l'opzione che mi hai proposto.


Codice:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    Dim sh As Worksheet
    Dim lRiga
    Set sh = ThisWorkbook.Worksheets("Foglio2")
    lRiga = sh.Range("A" & Rows.Count).End(xlUp).Row
    If Target.Cells.Count > 1 Then Exit Sub
    If Cells(Target.Row, "K") = "OK" Then
       Me.Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Copy _
          Destination:=sh.Range("A" & lRiga + 1)
          Application.ScreenUpdating = False
         Sheets("Foglio3").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    Sheets("Foglio1").Select
  End If
    Set sh = Nothing
    Application.ScreenUpdating = True
   
End Sub
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
21.644
1.733
Como
2011MAC 2016WIN
462
Ok,
l'importante è che hai risolto.

Giusto una sistematina al tuo codice
Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sh As Worksheet
    Dim lRiga As Long
    Set sh = ThisWorkbook.Worksheets("Foglio2")
    lRiga = sh.Range("A" & Rows.Count).End(xlUp).Row
    With Application
        .ScreenUpdating = False
        If Target.Cells.Count > 1 Then Exit Sub
        If Cells(Target.Row, "K") = "OK" Then
            .EnableEvents = False
            Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Copy _
                sh.Range("A" & lRiga + 1)
            Sheets("Foglio3").PrintOut Copies:=1, Collate:=True
        End If
        Set sh = Nothing
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
 
  • Like
Reactions: Stef69

Sostieni ForumExcel

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