› Sviluppare funzionalita su Microsoft Office con VBA › ripulire celle anche se varia il range
-
AutoreArticoli
-
Buon pomeriggio a tutti
mi ritrovo a richiedere il vostro aiuto.
il file che allego mi serve per registrare le ore dei dipendenti e dei costi vitto e alloggio.
ho creato una macro che mi duplica il foglio e con l'ImputBox attribuisco al foglio duplicato il nome che voglio.
e fin qui tutto ok.
poi ho creato una macro che al duplicare del foglio (vedere Modulo 2) mi ripulisce l'area evidenziata in giallo.
e anche qui tutto funziona tutto bene.
ora vi spiego di cosa mi occorre.
se l'area gialla cambia, cioè se inserisco delle righe,
al cliccare sul comando copia foglio gli ultimi dati al difuori del range del modulo 2 non mi si ripuliscono;
quello che mi occorre, e se qualcuno di voi e così gentile da darmi una mano.
mi occorre un codice che anche se inserisco delle righe mi ripulisce i campi tutti i campi dell'intervallo in giallo.
premetto che le celle le ho evidenziate per far capire l'area di riferimento.
spero di esser stato chiaro
ringrazio
Allegati:
You must be logged in to view attached files.ho omesso di dire che deve ripulire i campi della copia del foglio e non del foglio di origine.
e premetto anche che una volta creato la copia del foglio andrò sempre in avanzamento senza più passare dal foglio originale.
con il comando copia foglio mi riporto dietro sempre il comando.
quindi la pulizia delle celle deve avvenire sulla copia del foglio che creo.
forse non ero stato chiaro nell'esporre di cio che mi occorre.
scusate
Invece di mettere un range fisso da cella "X" a cella "Y" devi trovare un modo di capire quale sia l'area da copiare e poi pulire (un ciclo di scansione delle righe che le copia o pulisce fino che … ???)
Paolo
Ciao PMC77
Ti ringrazio per aver risposto. Il problema e che copio l'intero foglio. E qusta cosa si ripete ogni mese. Ma le righe possono aimentare in funzione degl operai presenti in cantiere. Quindi il range puo cambiare in piu o in meno.
Per quello mi serviva, se c'era un modo. Un codice che riconosce il range da ripulire. Per far capire avevo evidenziato in gisllo le celle xhe devo ripulire ogni volta che faccio una copi del foglio.
Ma come detto quel range puo cambiare. Sarebbe interessante avere un codice che blocca la cella iniziale e finale e se inserisco righe il range si ampliala butto la, potresti settare un range sfuttando il colore delle celle(giallo)
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros.
Le celle le ho evidenziate per far capire. Ma il file e struttirato che a fine mese filtro per colore. E quindi il riquadrp che ho evidenziato a alcune righe colorate. Io ho evidenziato in giallo solo per far capire il range che mi interessa ripulire. Ma come detto alcune righr hanno gia una formattazione a colori. Per aiutarmi a filtrare alcuni dati a fine mese.tu nel file che hai postato, il range di color giallo arriva fino alla riga 154, quando inserisci nuovi dati questa riga si sposta automaticamente verso il basso ho l'aggiungi tu?
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros. Grazie per le risposte.
In pratica se aggiungo righe facciamo un esempio. Inserisco 2 righe ovvio che si sposta tutto in giu. E se ho dei dati nell'ultima riga che era la 154 e ora e diventata 156 per il codice che ho scritto nel modulo 2 la pulizia si ferma fino alla riga 154.
Quindi qulo che mi serviva era se c'era un modo per riconoscere l'ultima riga e se nel range inserivo le righe la pulizia deve essere per l'intero range modificatodal file che hai allegato, si vede che tutte le righe della colonna C contengono un valore, se è cosi , potresti cercare l'ultima riga della colonna C è settare il range di conseguenza
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Potresti essere cosi gentile per
Darmi delle ind8cazioni o meglio dire se puoi formularmi il codice.
Perche ho capito cosa vuoi dire ma non so come fare a far capire al codice poi fino a che colonna ripulire.se tu trovi l'ultima cella della colonna C che contiene un dato tipo
finalrow=cells(rows.count,3).end(xlup).rowe dopo setti un range che va dalla cella "D9" alla alla "AH &finalrow)
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Mmmmm.
Sei molto gentile a darmi le dritte.
Ma te ne sarei molto grato se mi
Dai il codice completo. Percge non saprei come individuare il range.
Onestamemte non so come fare in quanto dilettante.
Te ne sarei davvero grato se mi aiuti con l'intero codice.Grazie mille sempre per la vostra disponibilita' e aiuto.
Allora:
ho modificato la tua routine come il codice che ti posto
Sub RipulisciFoglio() lastrow = Cells(Rows.Count, 3).End(xlUp).Row totale = 0 For a = 8 To lastrow If Cells(a, 4).Interior.ColorIndex = 6 Then totale = totale + 1 End If Next totale = totale + 7 Range("$D$7:AH$" & totale).Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-135 Range("D6").Select End Subpresupposto importane è che le celle siano che tu vuoi cancellare siano di colore giallo, altrimenti devi sostituire il valore colorindex.
lastrow trova l'ultima cella della colonna "C" che contiene un dato, ho inizializzato una variabile "totale" a zero, mi servira per memorizzare il numero delle celle di color giallo,poi ho inserito un ciclo che va dalla riga"8" al valore lastrow, se il colore della cella corrisponde al colore giallo(in questo caso)aumenta di una unita la variabile "totale", quando ha finito il ciclo, per trovare l'ultima cella di color giallo, aumento di "7" la variabile "totale", ha questo punto setto il range col valore della riga "totale".
Se ho capito, fai sapere
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Se il range varia di dimensione ma la struttura è sempre la stessa io partirei dal basso colonna A e salirei con un end(xlup) e poi con un offset mi sposterei fino a cella che mi interessa.
Quanto sopra vale se la parte sopra e sotto le celle in giallo non cambia
Sub LucaCanc() With Sheets("Originale") .Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Select '.Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).ClearContents End With End Subil codice di luca(saluto), mi va in errore, sostituendo la riga
.Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Selectcon
.Range(.Cells(8, 34), .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Selectfunziona.
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Come vedi da solo nel primo caso metti come range "AH8" - "n"
Nel secondo "8" - "34"
Io toglierei "AH" dal pezzo sopra
Ciao,
Io l'avevo testato (e l'ho testato or ora di nuovo) e funzionava, comunque la soluzione di Albatros (che ringrazio per la correzione di cui contraccambio il saluto) è equivalente e inoltre più bella da vedere in quanto omogenea...
Non è la prima volta che uso quel tipo di scrittura e non mi aveva mai dato problema,.....Chissa perchè???
Aggiungo inoltre di fare particolare attenzione all'offset in quanto di primo approccio avevo spostato di 3 righe in quanto da "A" a "D" invece l'offset vuole solo un 1 in quanto si parte da una cella Unita(A-B-C).
Ciao
Luca
Ciao Albatros
il codice che mi hai scritto funziona perfettamente,
ma come avevo scritto ; il range che io ho evidenziato in giallo era solo per far capire in quale area il comando deve ripulire,
in pratica le celle e righe nel range che io ho evidenziato in giallo hanno una formattazione diversa e cioè alcune righe sono di colore diverso, perchè a fine mese devo filtrare alcuni dati e come ricerca uso il comando filtra per colore.
quindi il codice che hai scritto te va bene così come l'hai formulato, ma si può non far riferimento al colore?
per Luca che ringrazio; il codice che hai scritto te invece fa sempre riferimento al foglio di origine (Originale) invece come detto ogni mese vado in avanzamento senza ripassare più dal foglio iniziale ( originale)
ringrazio tutti per l'aiuto, ma il codice che più assomiglia alla mia esigenza è quello di Albatros, con l'unica eccezione di evitare di riconoscere il range tramite colore.
si può fare qualcosa? o meglio dire
questa parte di codice by passarlo?
If Cells(a, 4).Interior.ColorIndex = 6 Then totale = totale + 1 End If
evitare di riconoscere il range tramite colore?
ma riconoscere solo il range?
grazie mille intanto
Ciao ho visto ora la tua macro che lavora sul foglio aativo pertanto basta modificare la macro come:
`Sub LucaCanc() Range(Cells(8, 34), Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).ClearContents End Sub`Ciao Luca il tuo codice mi va in errore, sbaglio io qualcosa?
potresti formularmi il codice corretto?
grazie

Togli il punto davanti a cells Me lo sono dimenticato nella modifica..
Grazie infinitamente,
funziona tutto perfettamente.
ringrazio tutti per l'aiuto
-
AutoreArticoli
