Condividi tramite

Copiare e ordinare dati da un foglio ad un altro

Anonimo
2023-03-10T14:55:38+00:00

Preciso che i pc che utilizziamo al lavoro hanno installato EXCEL 2000; nella P.A. non siamo molto aggiornati.

Nel file “Ferie” ho due fogli di lavoro che ho chiamato “Inserimento” e “DBase”.

In “Inserimento” utilizzo solo 2 celle: “A2” (con valori TESTO) e “B2” (DATA, formato “gg/mm/aaaa”); entrambe utilizzano una combo di convalida.

Sto cercando inutilmente e da tempo di:

copiare i valori di “Inserimento.A2” e di “Inserimento.B2” (quindi testo e data, non la convalida o la formattazione) nel foglio “DBase” nelle colonne “A” e “B” in successione dalla riga 2 alla riga 1001 (la 1° riga di “DBase” contiene le intestazioni di campo),

inserire automaticamente nelle celle “DBase.C2:C1001” la data di sistema nel formato (“gg-mm-aaaa, hh:mm”) al momento della copia dei valori di “Inserimento.A2” e di “Inserimento.B2”,

post inserimento ordinare dal valore minore a quello maggiore le celle della tabella in base ai valori prima di “DBase.C2:C1001” (data automatica nel formato “gg-mm-aaaa, hh:mm”) e poi di “DBase.B2:B1001” (valori formato data copiati da “Inserimento.B2”),

bloccare e proteggere progressivamente, in seguito all’inserimento, solo le celle popolate delle colonne A, B e C di “DBase” (le altre contenenti un sacco di formule correlate fra loro sono normalmente bloccate e protette),

far comparire un msgbox (vbyesonly) con conseguente interruzione della sub se o “Inserimento.A2” o “Inserimento.B2” sono senza valori al momento dell’inserimento dati nel foglio “DBase” per evitare di caricare dati incompleti.

Il risultato finale del foglio DBase dovrebbe essere una tabella di questo tipo:

**** A B C ****
1 PERSONALE DATA FERIE DATA RICHIESTA FERIE ****
2 Ciccio Formaggio 20/03/2023 10-03-2023 20:30 celle bloccate e protette
3 Pippo 20/03/2023 10-03-2023 20:35 celle bloccate e protette
4 Pluto 21/03/2023 10-03-2023 20:40 celle bloccate e protette
5 celle sbloccate

Scopiazzando e cercando di personalizzare ciò che ho letto e capito sul web sono riuscito a far funzionare (molto, molto malamente, anzi uno schifo!) le singole operazioni; non sono in grado di far funzionare, le mie conoscenze di VBA sono prossime allo 0 Kelvin, il tutto in maniera fluida utilizzando un solo pulsante da posizionare chiaramente nel foglio “Inserimento”.

Grazie per l’aiuto,

Carlo

Microsoft 365 e Office | Excel | Per il lavoro | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

1 risposta

Ordina per: Più utili
  1. Anonimo
    2023-03-10T15:53:42+00:00

    Ciao Carlo,

    Preciso che i pc che utilizziamo al lavoro hanno installato EXCEL 2000; nella P.A. non siamo molto aggiornati.

    Nel file “Ferie” ho due fogli di lavoro che ho chiamato “Inserimento” e “DBase”.

    In “Inserimento” utilizzo solo 2 celle: “A2” (con valori TESTO) e “B2” (DATA, formato “gg/mm/aaaa”); entrambe utilizzano una combo di convalida.

    Sto cercando inutilmente e da tempo di:

    copiare i valori di “Inserimento.A2” e di “Inserimento.B2” (quindi testo e data, non la convalida o la formattazione) nel foglio “DBase” nelle colonne “A” e “B” in successione dalla riga 2 alla riga 1001 (la 1° riga di “DBase” contiene le intestazioni di campo),

    inserire automaticamente nelle celle “DBase.C2:C1001” la data di sistema nel formato (“gg-mm-aaaa, hh:mm”) al momento della copia dei valori di “Inserimento.A2” e di “Inserimento.B2”,

    post inserimento ordinare dal valore minore a quello maggiore le celle della tabella in base ai valori prima di “DBase.C2:C1001” (data automatica nel formato “gg-mm-aaaa, hh:mm”) e poi di “DBase.B2:B1001” (valori formato data copiati da “Inserimento.B2”),

    bloccare e proteggere progressivamente, in seguito all’inserimento, solo le celle popolate delle colonne A, B e C di “DBase” (le altre contenenti un sacco di formule correlate fra loro sono normalmente bloccate e protette),

    far comparire un msgbox (vbyesonly) con conseguente interruzione della sub se o “Inserimento.A2” o “Inserimento.B2” sono senza valori al momento dell’inserimento dati nel foglio “DBase” per evitare di caricare dati incompleti.

    Il risultato finale del foglio DBase dovrebbe essere una tabella di questo tipo:

     

    **** A B C ****
    1 PERSONALE DATA FERIE DATA RICHIESTA FERIE ****
    2 Ciccio Formaggio 20/03/2023 10-03-2023 20:30 celle bloccate e protette
    3 Pippo 20/03/2023 10-03-2023 20:35 celle bloccate e protette
    4 Pluto 21/03/2023 10-03-2023 20:40 celle bloccate e protette
    5 celle sbloccate

     

    Scopiazzando e cercando di personalizzare ciò che ho letto e capito sul web sono riuscito a far funzionare (molto, molto malamente, anzi uno schifo!) le singole operazioni; non sono in grado di far funzionare, le mie conoscenze di VBA sono prossime allo 0 Kelvin, il tutto in maniera fluida utilizzando un solo pulsante da posizionare chiaramente nel foglio “Inserimento”.

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook 
    
    Dim SrcSH As Worksheet, destSH As Worksheet 
    
    Dim srcRng As Range, destRng As Range 
    
    Dim LRow As Long 
    
    Const sFoglio\_Sorgente As String = "Inserimento" 
    
    Const sFoglio\_Destinazione As String = "DBase" 
    
    Const sPassword As String = "Pippo"                           '<<=== Modifica 
    
    Set WB = ThisWorkbook 
    
    With WB 
    
        Set SrcSH = .Sheets(sFoglio\_Sorgente) 
    
        Set destSH = .Sheets(sFoglio\_Destinazione) 
    
    End With 
    
    Set srcRng = SrcSH.Range("A2:B2") 
    
    With destSH 
    
        LRow = LastRow(destSH, .Columns("A")) 
    
        Set destRng = .Range("A" & LRow + 1) 
    
    End With 
    
    With srcRng 
    
        If IsEmpty(.Cells(1).Value) Or IsEmpty(.Cells(2).Value) Then 
    
            Call MsgBox(Prompt:="Questa procedura richiede che siano compilate entrambe " \_ 
    
                & "le celle A2 e B2 del foglio " & sFoglio\_Sorgente & "!" \_ 
    
                & vbNewLine & "Riprova!", \_ 
    
                Buttons:=vbCritical, \_ 
    
                Title:="REPORT") 
    
            Exit Sub 
    
        End If 
    
        destSH.Unprotect Password:=sPassword 
    
        .Copy Destination:=destRng 
    
        destRng.Offset(0, 2).Value = Format(Now, "dd/mm/yyyy h:mm") 
    
    End With 
    
    With destSH 
    
        .Range("A2").CurrentRegion.Sort Key1:=.Range("C2"), \_ 
    
            Order1:=xlAscending, \_ 
    
            Header:=xlGuess, \_ 
    
            OrderCustom:=1, \_ 
    
            MatchCase:=False, Orientation:=xlTopToBottom 
    
        .Range("A2").CurrentRegion.Sort Key1:=.Range("B2"), \_ 
    
            Order1:=xlAscending, \_ 
    
            Header:=xlGuess, \_ 
    
            OrderCustom:=1, \_ 
    
            MatchCase:=False, Orientation:=xlTopToBottom 
    
        .Protect Password:=sPassword 
    
    End With 
    
    Call MsgBox(Prompt:="Dati copiati!", \_ 
    
        Buttons:=vbInformation, \_ 
    
        Title:="REPORT") 
    

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

    Optional Rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If Rng Is Nothing Then 
    
        Set Rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = Rng.Find(What:="\*", \_ 
    
        After:=Rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow < minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '<<========

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento