Risolto UNIRE 2 MACRO

Stef69

Utente junior
15 Marzo 2019
42
8
365
1
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
18.842
113
Como
2011MAC 2016WIN
353
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
42
8
365
1
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
42
8
365
1
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
18.842
113
Como
2011MAC 2016WIN
353
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
42
8
365
1
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.



[CODE="vb"]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

[/CODE]
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.842
113
Como
2011MAC 2016WIN
353
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!