Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

macro per riconoscere giorno e incollare

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro per riconoscere giorno e incollare

Postdi Barbonss » 10/11/19 10:09

Salve a tutti,
me la cavicchio con excel ma sono alle primissime armi con vsb percio' vorrei chiedere un aiuto dato che con le formule non sono riuscito a risolvere il mio problema:
avrei bisogno di una macro che mi tagli e incolli il valore di una cella del foglio "Giornaliero" nella cella del foglio "scarico" nella data prestabilita e cosi' a continuare giorno dopo giorno......!
Per essere piu' esatti: vorrei che se nella cella A1 ci fosse la data di oggi ( 10/11/2019 ), la macro mi tagli il contenuto della cella E15 del foglio "Giornaliero" e me lo incolli nella cella del 10/11/2019 del foglio "scarico" in cui c'è una tabella con i giorni del mese da novembre a maggio, e ovviamente domani lo incollasse nel 11 novembre e cosi' via.
Grazie in anticipo a chi mi riesca a dare una mano.
Michele.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Sponsor
 

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 10/11/19 14:50

La presenza di un file dimostrativo, con cui tra l'altro poter fare le prove, avrebbero reso piu' definita la richiesta...

Assodato che hai un foglio "Giornaliero" in cui evidentemente si inserisce in A1 la data odierna e in E15 un valore da stiricizzare nel foglio "Scarico"; assodato pure che nel foglio "Scarico" hai un elenco di date; non hai detto quale e' l'area in cui le date sono posizionate; infine hai scritto che vorresti inserire il valore di Giornaliero-E15 nella cella che ora contiene la data, cosa ovviamente deprecabile perche' non consente nessun tracciamento di quanto risulta nel foglio Scarico.

Supponendo che le date siano in colonna A di Scarico, e che il valore vada copiato in colonna B della riga che contiene quella data, allora potresti usare una macro come questa:
Codice: Seleziona tutto
Sub DayStor()
Dim DaySh As Worksheet, StoreSh As Worksheet, DateCol As String, StorCol As String
Dim I As Long, myMatch
'
'I dati:
Set DaySh = ThisWorkbook.Sheets("Giornaliero")      '<<< Il foglio Giornaliero
Set StoreSh = ThisWorkbook.Sheets("Scarico")        '<<< Il foglio su cui storicizzare
DateCol = "A"                                       '<<< La colonna dove trovo le Date
StorCol = "B"                                       '<<< La colonna in cui copiare il valore
'
On Error Resume Next
myMatch = Application.Match(CLng(DaySh.Range("A1").Value), StoreSh.Cells(1, DateCol).Resize(1000, 1), False)
On Error GoTo 0
If IsError(myMatch) Or IsEmpty(myMatch) Then
    rispo = MsgBox("Non allocabile: " & DaySh.Range("A1").Text, 0, "ERRORE!")
Else
    StoreSh.Cells(myMatch, StorCol).Value = DaySh.Range("E15")
End If
End Sub

Le righe marcate <<< servono per impostare i parametri di lavoro; modificali quindi se le mie assunzioni non sono aderenti alla tua situazione.
Il codice va inserito in un Modulo standard del vba (vedi viewtopic.php?f=26&t=103893&p=647675#p647675), poi all'occorrenza devi lanciare la macro DayStor (vedi viewtopic.php?f=26&t=103893&p=647675#p647678)

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 10/11/19 15:00

Grazie Mille per la risposta, ho provato ad allegare il file ma ci sono riuscito. Chiedo scusa per le inesattezze ma non riuscendo ad allegare il file ci ho messo un po per capire come cercar di spiegare cosa voler fare......appena torno a casa ci lavoro su....
grazie ancora!!
Come posso allegare file dato che non trovo niente che me lo faccia fare?
Michele
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 10/11/19 15:13

Prova quando puoi.
Per allegare un file vedi viewtopic.php?f=26&t=103893
In particolare: viewtopic.php?f=26&t=103893&p=605487#p605487
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea


Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 10/11/19 15:28

Ciao Anthony, grazie ancora per gli indirizzi....
ho allegato il file prova dove la cella E16 del foglio "Giornaliero" vorrei che venisse riportata giorno dopo giorno nel foglio "scarico" al giorno corrispondente.
Spero di essere stato un po piu' chiaro di prima! :)
Michele.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 13/11/19 13:50

Mi ero perduto il tuo ulteriore messaggio...

Adesso che la struttura dati su Scarico e' piu' chiara si puo' abbozzare quest'altra macro, in sostituzione della precedente:
Codice: Seleziona tutto
Sub DayStor2()
Dim DaySh As Worksheet, StoreSh As Worksheet
Dim myMatchM, myMatchD, Rispo
'
'I dati:
Set DaySh = ThisWorkbook.Sheets("Giornaliero")      '<<< Il foglio Giornaliero
Set StoreSh = ThisWorkbook.Sheets("Scarico")        '<<< Il foglio su cui storicizzare
'
On Error Resume Next
    myMatchM = Application.Match(Format(DaySh.Range("C1").Value, "mmmm"), StoreSh.Range("A1:A30"), False)
    myMatchD = Application.Match(Day(DaySh.Range("C1").Value), StoreSh.Range("A1:AZ1"), False)
On Error GoTo 0
If IsError(myMatchM) Or IsError(myMatchD) Or IsEmpty(myMatchM) Or IsEmpty(myMatchD) Then
    Rispo = MsgBox("Non allocabile: " & DaySh.Range("C1").Text, 0, "ERRORE!")
Else
    StoreSh.Cells(myMatchM, myMatchD).Value = DaySh.Range("E16")
End If
End Sub
Il codice va inserito in un Modulo standard del vba, poi all'occorrenza devi lanciare la macro DayStor2

Prova e fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 13/11/19 15:21

Gazie mille Anthony, funziona perfettamente.
Mi permetto di chiederti: per far si che nel giornaliero si riesca a riconoscere la voce "da pagare" e copiare la relativa riga nel foglio "da pagare"....posso rielaborare la stessa macro o ne devo assegnare una nuova alla quale ci sto gia lavorando?
Grazie ancora per il grosso aiuto che gia' mi hai dato.
Michele.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 14/11/19 00:20

Se la struttura dati del foglio "da pagare" e' analoga a quella di "Scarico" allora la macro puo' essere riciclata al 100%, cambiando solo i nomi dei fogli e gli intervalli su cui lavorare.
Se e' tutta un'altra cosa allora dovrai elaborare un algoritmo tutto nuovo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 14/11/19 14:22

Ciao Anthony, la struttura del foglio non è analoga all' altra, anzi non è una vera e propria struttura in quanto io vorrei che se accanto ad ogni inserimento ( nel caso dell' esempio del file allegato si tratta delle celle G3:G13 del foglio "Gionaliero" compaia la scritta "da pagare"), la macro copia il rigo corrispondente con data e lo incolli nel foglio "da pagare" che è un semplice elenco a mò di database.
Per ora, con la ia scarsissima conoscenza ma la tanta voglia di imparare, ho tirato giu' questo:

Sub CopiaIncollaprova()
If Worksheets("Giornaliero").Range("G3") = "da pagare" Then
Worksheets("Giornaliero").Range("C1").Copy
Worksheets("da pagare").Range("A2").PasteSpecial
Worksheets("Giornaliero").Range("D3:F3").Copy
Worksheets("da pagare").Range("B2:D2").PasteSpecial
End If
End Sub

dal quale partire per capire come poterlo eseguire ad ogni riga inserita nel Giornaliero e far si che venga copiato nella prima riga libera del foglio "da pagare".
Mi piacerebbe avere del materiale su cui studiare ed imparare percio' se dovessi postarmi la macro pronta come la volta scorsa.....mi daresti anche delle indicazioni per dove poter studiare cio' che scrivi?
Ti ringrazio anticipatamente.
Michele.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 14/11/19 16:21

Se non dici quale e' la struttura del foglio allora ti serve un corso per vba...

Elaborando su quello che hai abbozzato (che non collima con la struttura del foglio "Giornaliero" che avevi pubblicato), suggerirei:
Codice: Seleziona tutto
Sub CopiaIncollaprova()
Dim myNext As Long
If Worksheets("Giornaliero").Range("G3") = "da pagare" Then
    myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row         'Prima riga libera
    Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
    Worksheets("da pagare").Cells(myNext, "B").Resize(1, 3).Value = Worksheets("Giornaliero").Range("D3:F3").Value
End If
End Sub


Le colonne su foglio "da pagare" vanno formattate secondo la natura dei dati che andranno ad ospitare

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 15/11/19 10:10

CIao ANthony, il foglio da pagare è uno dei fogli del file che avevo allegato e pensavo gli avessi dato un occhiata......per questo non ho spiegato la struttura....mi spiace! ora provo il codice e poi ti dico!
Grazie ancora.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 15/11/19 10:32

Ho provato il codice e funziona perfettamente ma solo per il range D3:F3 del foglio " Giornaliero", io vorrei che esaminasse il range D3:F13 del foglio "Giornaliero" e che mi riporti nel foglio "da pagare" le righe che rispettano l' IF. Ora per non saper ne leggere ne scrivere, ho ricopiato tante volte quante sono le righe ( 11 per l'esattezza ) la funzione IF modificando i relativi range e copia si il numero di righe che rispettano la funzione ma riportando sempre lo stesso rigo......
questo è quello che ho fatto:

Sub CopiaIncollaprova()
Dim myNext As Long
If Worksheets("Giornaliero").Range("G3") = "da pagare" Then
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row 'Prima riga libera
Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
Worksheets("da pagare").Cells(myNext, "B").Resize(1, 3).Value = Worksheets("Giornaliero").Range("D3:F3").Value
End If
If Worksheets("Giornaliero").Range("G4") = "da pagare" Then
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row 'Prima riga libera
Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
Worksheets("da pagare").Cells(myNext, "B").Resize(2, 3).Value = Worksheets("Giornaliero").Range("D4:F4").Value
End If
If Worksheets("Giornaliero").Range("G5") = "da pagare" Then
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row 'Prima riga libera
Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
Worksheets("da pagare").Cells(myNext, "B").Resize(3, 3).Value = Worksheets("Giornaliero").Range("D5:F5").Value
End If
If Worksheets("Giornaliero").Range("G6") = "da pagare" Then
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row 'Prima riga libera
Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
Worksheets("da pagare").Cells(myNext, "B").Resize(4, 3).Value = Worksheets("Giornaliero").Range("D6:F6").Value
End If
If Worksheets("Giornaliero").Range("G7") = "da pagare" Then
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row 'Prima riga libera
Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
Worksheets("da pagare").Cells(myNext, "B").Resize(5, 3).Value = Worksheets("Giornaliero").Range("D7:F7").Value
End If
End Sub


ovviamente mi son fermato al rigo 5 per vedere se funzionava.....
Spero di essermi riuscito a spiegare.
scusami per l' impazzimento.
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 15/11/19 13:08

Alla cieca, se su "Giornaliero" bisogna esaminare la colonna G, da G3 a G13, e copiare nel foglio "da pagare" la data (in C1) e quanto presente in D-E-F delle righe che (in G) contengono la stringa "da pagare" allora potrebbe funzionare questa:
Codice: Seleziona tutto
Sub CopiaIncollaprova2()
Dim myNext As Long
For I = 3 To 13
    If Worksheets("Giornaliero").Cells(I, "G") = "da pagare" Then
        myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row         'Prima riga libera
        Worksheets("da pagare").Cells(myNext, "A").Value = Worksheets("Giornaliero").Range("C1").Value
        Worksheets("da pagare").Cells(myNext, "B").Resize(1, 3).Value = Worksheets("Giornaliero").Cells(I, "D").Resize(1, 3).Value
    End If
Next I
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per riconoscere giorno e incollare

Postdi Barbonss » 15/11/19 14:36

Ciao Anthony,
ho provato la tua macro ma mi copia solo un rigo e non il primo.....allego il file in modo che possa vedere di cosa avrei bisogno....e ti ringrazio tanto per la pazienza!
https://wetransfer.com/downloads/7ff822 ... 841/a7efa0
Buona serata....Michele!
Barbonss
Newbie
 
Post: 9
Iscritto il: 10/11/19 09:58

Re: macro per riconoscere giorno e incollare

Postdi Anthony47 » 15/11/19 20:06

E' sbagliata la riga che calcola myNext :oops: , deve essere
Codice: Seleziona tutto
myNext = Worksheets("da pagare").Cells(Rows.Count, 1).End(xlUp).Row + 1       'Prima riga libera

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16573
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "macro per riconoscere giorno e incollare":


Chi c’è in linea

Visitano il forum: Nessuno e 26 ospiti