Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Lasciare una riga vuota ad una condizione

Ultimo Aggiornamento: 08/02/2018 11:19
Post: 1
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
30/01/2018 12:16

Buongiorno sono nuovo nel forum mi scuso per eventuali errori. Vorrei gentilmente un aiuto, Ho un file txt generato da un pannello operatore, questo file contiene dei dati di temperatura (PT 100), portata (Flussimetro)e Ph (Phmetro), essendo memorizzati in modo poco comprensibile, ho creato una macro su una cartella excel, che appena apro questa cartella mi fa selezionare il file txt e lo copia nel foglio documento che si trova all’interno della cartella excel, dopo di che in automatico mi copia i valori di temperatura nel foglio temperatura, quelli del flusso nel foglio flussimetro e quelli di Ph nel foglio Ph,fogli che ho creato io dentro la cartella excel. Quadro si arresta la lavorazione il pannello scrive nell’ultima riga “$RT_DIS$”, in quanto si arresta la memorizzazione dei dati e poi alla successiva lavorazione continua a salvare i dati a seguire sullo stesso file txt, subito dopo la riga con scritto “$RT_DIS$”. Quindi quello che mi servirebbe è che sui fogli, temperatura, flussimetro e Ph mi lasciasse un rigo vuoto alla fine di ogni lavorazione cioe quando trova la parola “$RT_DIS$”, così io capisco che li finiscono i dati relativi alla prima lavorazione e poi dopo la riga vuota iniziano i dati della seconda lavorazione e così via. Spero di essere stato chiaro e comprensibile. Grazie mille. Ho allegato il file txt contenente i dati da sistemare ed il file excel con la macro che sistema i dati del file txt e che ovviamente non lascia la riga libera. Grazie ancora.
Post: 1.769
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
30/01/2018 19:07

Ciao
nel tuo caso non puoi applicare il filtro per poi copiare nei singili fogli.

Devi pertanto eseguire un loop così come hai fatto, del foglio dati e, per ogni voce cercare tutte le corrispondenze nel foglio Documento, e copiare riga per riga nei vari fogli; nel momento in cui trovi quella stringa, prima di copiare, inserisci la riga vuota.

saluti
Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
30/01/2018 19:30

Sara facile mai non riesco a farlo puoi gentilmente madificare il file excel che ho inviato in allegato? Grazie mille [SM=x
Post: 2
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
30/01/2018 19:30

Sara facile mai non riesco a farlo puoi gentilmente madificare il file excel che ho inviato in allegato? Grazie mille [SM=x
Post: 1.771
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
31/01/2018 12:40

ciao
evidentemente mon è farina del tuo sacco.

Comunque la macro dovr ebbe essere all'incirca così; se ricontri errori, modifica.

saluti

Sub Macro_2()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim rng As Range
Dim lRiga As Long, RDati As Long
Dim sCriterio As String, sFoglio As String
    Set sh1 = ThisWorkbook.Worksheets("Documento")
    ur = sh1.Range("A" & Rows.Count).End(xlUp).Row
    With Sheets("Dati")
        RDati = 2 'inizia da riga 2
        Do While .Cells(RDati, 2) <> "" 'ripeti finchè trovi valori in colonna B
            sFoglio = .Cells(RDati, 2) 'il nome del foglio è nella colonna B del foglio Dati
            Set sh2 = ThisWorkbook.Worksheets(sFoglio)
            sCriterio = .Cells(RDati, 3) 'in colonna C c'è il criterio di filtro
            lRiga = sh2.Range("A" & sh2.Rows.Count).End(xlUp).Row
            With sh1
                For i = 2 To ur
                    If .Cells(i, 1) = sCriterio Then
                        lRiga = lRiga + 1
                        .Cells(i, 1).EntireRow.Copy
                        sh2.Range("A" & lRiga).PasteSpecial
                        Application.CutCopyMode = False
                    ElseIf .Cells(i, 1) = "$RT_DIS$" Then
                        lRiga = lRiga + 1
                    End If
                Next
            End With
            RDati = RDati + 1
        Loop
    End With
    Set sh1 = Nothing
    Set sh2 = Nothing
End Sub

Domenico
Win 10 - Excel 2016
Post: 3
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
01/02/2018 01:56

Grazie mille dado47, la macro funziona perfettamente. Era possibile colorare di rosso le righe vuote, quelle righe lasciate vuote quando nel file txt c'è la parola "$RT_DIS$". Grazie ancora.
[Modificato da Project75 01/02/2018 02:02]
Post: 1.133
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
01/02/2018 07:15

Re:
Project75, 2/1/2018 1:56 AM:

Grazie mille dado47, la macro funziona perfettamente. Era possibile colorare di rosso le righe vuote, quelle righe lasciate vuote quando nel file txt c'è la parola "$RT_DIS$". Grazie ancora.




mai sentito parlare di crossposting?

http://www.forumexcel.it/forum/7-domande-su-excel-vba-e-macro/13891-lasciare-una-riga-libera-ad-una-condizione







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 1.772
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/02/2018 10:43

Grazie Tanimon

lo avevo trovato, ma nell'altro forum la richiesta è stata fatta il 24/1/2018 e rimasta senza soluzione.

Nella sub, dopo:
ElseIf .Cells(i, 1) = "$RT_DIS$" Then
lRiga = lRiga + 1

inserisci:

Cells(lRiga, 1).EntireRow.Interior.ColorIndex = 3

saluti


[Modificato da dodo47 01/02/2018 10:54]
Domenico
Win 10 - Excel 2016
Post: 4
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
01/02/2018 13:30

ciao ho provato ad inserire quella riga che mi hai inviato però la riga la colora di rosso nella pagina documento del file Excel, ma in realtà dovrebbe colorare la riga vuota nei singoli fogli, quelli dei flussimetri, temperatura e ph. allego allegato cosi vedi realmente cosa succede. grazie mille
Post: 1.775
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/02/2018 17:12

Programmazione proprio zero zero eh?

Devi anteporre all'istruzione il foglio di destinazione, quindi:

sh2.Cells(lRiga, 1).EntireR..................

saluti


NB: ti suggerisco vivamente di iniziare a studiare un po' di vba



[Modificato da dodo47 01/02/2018 17:14]
Domenico
Win 10 - Excel 2016
Post: 5
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
01/02/2018 22:30

Grazie mille per l'aiuto, e possibile far diventare rossa la riga fino alla colonna E (compresa)?
Post: 1.776
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
02/02/2018 09:43

si, ma prova a fare qualche tentativo tu e poi lo sottoponi anche non funzionante.

I forum non sono dei dispensatori di soluzioni, ci deve pur essere dall'altra parte una pur minima conoscenza...

saluti


Domenico
Win 10 - Excel 2016
Post: 6
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
02/02/2018 12:38

ciao ho provato e questo è il risultato (vedi allegato)
Post: 1.777
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
02/02/2018 17:17

Ciao
scusami, anche per farti capire, se per esempio tu volessi colorare di rosso le celle da A1 a E1, faresti:
range("A1:E1").Interior. ColorIndex=3

Ora al posto dei due 1, nel tuo caso devi mettere il numero della riga da colorare.

Tale numero è nella variabile lRiga, pertanto:

sh2.Range("A" & lRiga & ":E" & lRiga).Interior.ColorIndex = 3

saluti


[Modificato da dodo47 02/02/2018 17:24]
Domenico
Win 10 - Excel 2016
Post: 7
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
03/02/2018 03:27

Ciao dodo47, grazie mille per la disponibilità e la pazienza ad aiutarmi, vorrei gentilmente chiederti un'altra cosa: nel foglio "Dati" della cartella Excel al primo rigo c'è scritto che voglio ricopiare nel "Foglio2", chiamato "Flussimetro H2O", tutti i valori che hanno la scritta "Impostazioni PID valvola alimentazione acqua_Valore di lettura Flussimetro alimentazione Acqua", infatti nella colonna "A" del foglio "Flussimetro H2O" ricopierà la dicitura "Impostazioni PID valvola alimentazione acqua_Valore di lettura Flussimetro alimentazione Acqua", come devo fare a ricopiare solo la parte "Valore di lettura Flussimetro alimentazione Acqua" ed escludere la parte "Impostazioni PID valvola alimentazione acqua_"? ovviamente vale anche per gli altri valori. Ti invio 2 file in allegato, giusto per farmi capire meglio. Il "File 1" è il risultato attuale che si ottiene con l'esecuzione della cartella Excel, il "File 2" è, invece, il risultato che vorrei ottenere quando eseguo la cartella excel. In poche parole quando ricopia i dati nei singoli fogli, dovrebbe ricopiare solo quello che c'è dopo il trattino basso"_". grazie mille ancora.
[Modificato da Project75 03/02/2018 08:09]
Post: 1.778
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
03/02/2018 10:19

Ciao
per evitare pastrocchi di programmazioni, queste cose andrebbero dette prima di sviluppare il progetto.

comunque, sostituisci:

.....
            With sh1
                For i = 2 To ur
                    If .Cells(i, 1) = sCriterio Then
                        lRiga = lRiga + 1
                        .Cells(i, 1).EntireRow.Copy
                        sh2.Range("A" & lRiga).PasteSpecial
                        Us = InStr(sh2.Cells(lRiga, 1), "_") + 1
                        sh2.Cells(lRiga, 1) = Mid(sh2.Cells(lRiga, 1), Us, Len(sh2.Cells(lRiga, 1)))
                        Application.CutCopyMode = False
                    ElseIf .Cells(i, 1) = "$RT_DIS$" Then
                        lRiga = lRiga + 1
                        sh2.Range("A" & lRiga & ":E" & lRiga).Interior.ColorIndex = 3
                    End If
                Next
            End With
.....


Saluti


Domenico
Win 10 - Excel 2016
Post: 8
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
04/02/2018 22:33

Grazie mille dado47, grazie per l'aiuto e la pazienza ad ogni mia richiesta, hai perfettamente ragione che le richieste vanno fatte all'inizio e non un po' per volta, ma il problema è che a me li fanno di volta in volta, pertanto son costretto anch'io a farli di conseguenza, comunque mi servirebbe ancora un'altra cosa, spero non andrai su tutte le furie, vorrei creare una riga verde con scritto INIZIO LAVORAZIONE nella seconda riga dei fogli dove vengono sistemati i file ed una riga rossa con scritto FINE LAVORAZIONE quando c'è la scritta "$RT_DIS$", poi di nuovo riga verde con scritto INIZIO LAVORAZIONE, ed una riga rossa con scritto FINE LAVORAZIONE quando c'è la scritta "$RT_DIS$, e così via, giusto per delimitare l'intervallo di lavorazione, ovviamente per tutti i fogli. Ti allego il "File1" con il risultato di quello che viene fuori ora, ed il "File2" con il risultato di quello che serve a me. Infinitamente grazie e buona notte.
[Modificato da Project75 04/02/2018 22:36]
Post: 1.785
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/02/2018 10:11

Ciao
almeno inviami il foglio con la macro e tutte le modifiche successive

saluti


Domenico
Win 10 - Excel 2016
Post: 9
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
06/02/2018 15:12

Ok, ancora grazie mille. Come da tua richiesta ti invio l'ultimo file Excel ovviamente con le ultime modifiche, ed il file txt da sistemare. Vedrai anche tu, che, con l'esecuzione del file Excel otterrai il "File 1" che ti ho inviato nel messaggio precedente, insieme al "File 2" che sarebbe il risultato che vorrei ottenere. Grazie ancora buona giornata.
Post: 1.789
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/02/2018 17:13

Ecco la rettifica.

Per quanto mi riguarda non accetto altre richieste se non mostri un po' di buona volontà, accedendo man mano al mondo della programmazione.

Non me ne avere ma i forum servono per aiutare, indirizzare e non per sfornare codici belli e pronti... Pertanto sottoponi qualora nel futuro accadesse, un tuo tentativo di codice.

saluti

Sub Macro_3()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim rng As Range
Dim lRiga As Long, RDati As Long
Dim sCriterio As String, sFoglio As String
    Set sh1 = ThisWorkbook.Worksheets("Documento")
    ur = sh1.Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Documento" And Sheets(i).Name <> "Dati" Then
            Sheets(i).Range("A3:E" & Rows.Count).ClearContents
            Sheets(i).Range("A3:E" & Rows.Count).Interior.ColorIndex = xlNone
        End If
    Next i
    With Sheets("Dati")
        RDati = 2 'inizia da riga 2
        Do While .Cells(RDati, 2) <> "" 'ripeti finchè trovi valori in colonna B
            sFoglio = .Cells(RDati, 2) 'il nome del foglio è nella colonna B del foglio Dati
            Set sh2 = ThisWorkbook.Worksheets(sFoglio)
            sCriterio = .Cells(RDati, 3) 'in colonna C c'è il criterio di filtro
            lRiga = sh2.Range("A" & sh2.Rows.Count).End(xlUp).Row
            With sh1
                For i = 2 To ur
                    If .Cells(i, 1) = sCriterio Then
                        lRiga = lRiga + 1
                        .Cells(i, 1).EntireRow.Copy
                        sh2.Range("A" & lRiga).PasteSpecial
                        Us = InStr(sh2.Cells(lRiga, 1), "_") + 1
                        sh2.Cells(lRiga, 1) = Mid(sh2.Cells(lRiga, 1), Us, Len(sh2.Cells(lRiga, 1)))
                        Application.CutCopyMode = False
                    ElseIf .Cells(i, 1) = "$RT_DIS$" Then
                        lRiga = lRiga + 1
                        sh2.Range("A" & lRiga & ":E" & lRiga).Interior.ColorIndex = 3
                        sh2.Range("A" & lRiga) = "FINE LAVORAZIONE"
                        lRiga = lRiga + 1
                        sh2.Range("A" & lRiga & ":E" & lRiga).Interior.ColorIndex = 4
                        sh2.Range("A" & lRiga) = "INIZIO LAVORAZIONE"
                    End If
                Next
            End With
            RDati = RDati + 1
            sh2.Range("A" & lRiga & ":E" & lRiga).Interior.ColorIndex = xlNone
            sh2.Range("A" & lRiga) = ""
        Loop
    End With
    Set sh1 = Nothing
    Set sh2 = Nothing
End Sub





[Modificato da dodo47 06/02/2018 17:14]
Domenico
Win 10 - Excel 2016
Post: 10
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
06/02/2018 18:13

E tutto perfetto tranne il primo rigo che dovrebbe essere verde e con scritta INIZIO LAVORAZIONE vedi allegato. ho mandato solo una pagina ovviamente la vorrei in tutte. Grazie mille gentilissimo, seguirò il tuo consiglio.
Post: 1.791
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
06/02/2018 18:47

Si suppone che nella prima riga ci siano le intestazioni e la seconda riga (colore verde) abbia già scritto: INIZIO LAVORAZIONE in considerazione del fatto che dalla 3^ riga in poi iniziano le varie descrizioni.

Tu non devi cancellare nulla dei fogli perchè pensa la macro, ad ogni esecuzione, a cancellare i risultati precedenti a partire da riga 3 in poi eliminando anche i colori.

Infine leggi bene le prime due righe del mio precedente post.

saluti


[Modificato da dodo47 06/02/2018 18:49]
Domenico
Win 10 - Excel 2016
Post: 11
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
06/02/2018 19:16

Hai ragione la prima riga ci sono le intestazioni ma dalla seconda iniziano i dati, invece io avrei bisogno la seconda verde con scritta INIZIO LAVORAZIONE e a seguire la terza dovrebbero iniziare i dati. Se provi ad eseguire il file Excel con l'ultima rettifica che mi hai mandato vedrai tu stesso che alla seconda riga iniziano i dati, invece della riga verde con scritto INIZIO LAVORAZIONE come vorrei io. Grazie mille
[Modificato da Project75 07/02/2018 03:38]
Post: 1.134
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
07/02/2018 07:34

dodo47, 2/6/2018 5:13 PM:

Ecco la rettifica.

Per quanto mi riguarda non accetto altre richieste se non mostri un po' di buona volontà, accedendo man mano al mondo della programmazione.

Non me ne avere ma i forum servono per aiutare, indirizzare e non per sfornare codici belli e pronti... Pertanto sottoponi qualora nel futuro accadesse, un tuo tentativo di codice.

saluti




Project75, 2/6/2018 7:16 PM:

Hai ragione la prima riga ci sono le intestazioni ma dalla seconda iniziano i dati, invece io avrei bisogno la seconda verde con scritta INIZIO LAVORAZIONE e a seguire la terza dovrebbero iniziare i dati. Se provi ad eseguire il file Excel con l'ultima rettifica che mi hai mandato vedrai tu stesso che alla seconda riga iniziano i dati, invece della riga verde con scritto INIZIO LAVORAZIONE come vorrei io. Grazie mille




Lo sò, sono curioso........... che sai scrivere l'ho visto.

Per caso sai ANCHE leggere????

ciao
Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 12
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
07/02/2018 09:26

Buongiorno non vorrei essere insistente, ho letto i consigli di dodo47, e come mi aveva Detto, mi avrebbe dato l'ultima rettifica, quindi volevo precisare che quest'ultima non funziona come avevo chiesto io, inquanto manca, ogni pagina, dopo la riga A1, la riga A2 verde con scritto Inizio lavorazione, di conseguenza i dati dovrebbero iniziare dalla riga A3 e non dalla A2 come avviene ora. Solo questo volevo specificare. Grazie mille buona giornata.
Post: 1.792
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
07/02/2018 10:58

ce la devi scrivere tu una tantum. Spero che così sia più chiaro.


Domenico
Win 10 - Excel 2016
Post: 13
Registrato il: 30/01/2018
Città: MILANO
Età: 48
Utente Junior
Excel 2016
OFFLINE
07/02/2018 17:44

Ho fatto qualche prova ma senza risultato, se gli aiuti sono arrivati al culmine, grazie mille lo stesso
Post: 1.794
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
08/02/2018 11:19

Project, cos'è che non ti è chiaro della frase: "ce la devi scrivere tu una tantum." ??

Vediamo se riesco a spiegartela meglio (non devi fare nulla di programmazione):

- sulla riga1 di tutti i fogli hai le intestazioni
- sulla riga2 di tutti i fogli ci devi scrivere "INIZIO LAVORAZIONE" dando colore verde; questo solo una volta.

Quindi tratta la riga 2 come se fosse una seconda riga di intestazioni.

E' chiaro??

Poi la procedura, ogni volta che verrà eseguita, cancellerà i dati precedenti a partire da riga 3 (lasciando le intestazioni e la riga verde) e poi li riscriverà a partire da riga 3.

saluti


[Modificato da dodo47 08/02/2018 11:49]
Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Ciao (1 messaggio, agg.: 15/08/2014 17:59)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 06:21. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com