Condividi:        

Automatizzare cancellazione celle e immissione dati

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

Automatizzare cancellazione celle e immissione dati

Postdi project4 » 09/11/18 10:58

Buongiorno, quesito del venerdì :P (win10+office2010)

Ho un file composto da quasi un centinaio di fogli che uso per tenere aggiornate le schede dei clienti mensilmente.

In tutti i fogli (uno per cliente) ho una casella con il nome del mese a cui si riferisce la scheda (il range è sempre "A3:C6")

Tutti i mesi copio il file del mese precedente e lo rinomino al mese successivo, dopodichè lo devo preparare: devo quindi aprire tutti i fogli, cancellare tutti i valori immessi in un determinato range di righe che è variabile da scheda a scheda e tenere conto che queste righe contengono anche celle con formule bloccate e protette, quindi sostituire il nome del mese in ogni singolo foglio.

Con registra macro ho cercato di ottimizzare il processo andando a registrare una macro con ciò che faccio in preparazione del mese successivo ma mi mancano alcuni passaggi per migliorare il tutto:
1) Vorrei poter inserire il mese nelle celle (A3:C6) in automatico, immagino mi si apra una finestra dove chiede di inserire il mese, digito ad esempio Febbraio e la macro lo riporta su tutti i fogli.
2) In realtà ho 3/4 piccole eccezzioni di clienti che hanno una fatturazione ogni 2 mesi, quindi dovrei prevedere di escludere solo quelle schede dalla modifica del mese.
3) Registrando la macro mi crea l'operazione con i nomi dei singoli fogli, se io aggiungo un foglio di un nuovo cliente (solitamente lo faccio creando una copia di un cliente già eistente) la macro andrà riaggiornata? non so se è possibile automatizzare questo passaggio.
4) Nel cancellare tutta l'area da "azzerare" (nell'esempio il range è (A8:I19)) devo tenere conto che questa è variabile sia per numero di righe che colonne e che in diverse schede ho delle colonne in più con oltretutto delle formule inserite che naturalmente non vanno cancellate

Non posto il codice creato perchè contiene i nomi dei clienti e perchè non so quanto sia utile avere ripetizioni su ripetizioni, metto un file con 2 fogli estrapolati dal mio file e il codice ricreato su questo miniprogetto ripercorrendo i passaggio di cui parlo sopra.

Immagino che far sì che sia tutto "automatizzato" sia difficile ma non so neppure fino a dove si possa arrivare quindi chiedo lumi a chi ha conoscenze molto superiori alle mie in questo ambito.
Come sempre un sentito ringraziamento e anche un buon weekend a tutti!

Codice: Seleziona tutto
Sub NuovoMese()
'
' NuovoMese Macro
    Range("A3:C6").Select
    Selection.ClearContents
    Range("A8:I19").Select
    Selection.ClearContents
    Sheets("Pallino").Select
    Range("A3:C6").Select
    Selection.ClearContents
    Range("A8:I19").Select
    Selection.ClearContents
End Sub

http://www.filedropper.com/macromese1
Win10+excel 2010
project4
Utente Junior
 
Post: 30
Iscritto il: 07/11/18 08:45

Sponsor
 

Re: Automatizzare cancellazione celle e immissione dati

Postdi project4 » 09/11/18 15:00

aggiungo anche di tener presente che il file è protetto, la password di quello che ho allegato al precedente messaggio è 1234
Win10+excel 2010
project4
Utente Junior
 
Post: 30
Iscritto il: 07/11/18 08:45

Re: Automatizzare cancellazione celle e immissione dati

Postdi Anthony47 » 09/11/18 15:54

Hai voluto sostituire con un foglio excel le vecchie schede cartacee dove si riportavano i movimenti mensili... un approccio "minimalista" (ed e' un eufemismo).
Quello che dovresti creare e' un foglio dove riporti le movimentazioni annuali con tutte le informazioni che servono a qualificarle (es Cliente /Data /ddt /Materiale /Peso /Prot. /Note /Trasporto); da questo analitico estrai mensilmente, trimestralmente, annualmente le informazioni che ti servono, dandogli il look piu' idoneo.

Cio' detto, continuando con quello che hai fatto, penso che dovrebbe funzionare una macro come questa:
Codice: Seleziona tutto
Sub NuovoMese1()
Dim Eccez, I As Long
'
' NuovoMese Macro
nmese = Application.InputBox("Nome del mese (Vuoto per annullare)", , Format(Now + 16, "mmmm"), , , , , 2)
If Len(nmese) < 5 Or nmese = False Then
    Beep
    MsgBox ("Processo interrotto")
    Exit Sub
End If
Eccez = Array("Cliente1", "Cliente33")  '<<< L'elenco dei FOGLI da ignorare; in questo formato
'Eccez = Array("ZNESSUNO")                '<<< Per "lavorare" tutti i fogli
For I = 1 To Worksheets.Count
    Sheets(I).Select
    If IsError(Application.Match(Sheets(I).Name, Eccez, False)) Then
        Range("A3").Value = WorksheetFunction.Proper(nmese)
        Range("A8:I19").ClearContents       'Azzera l'area
        'Ripetere per altre aree da cancellare
    End If
Next I
Sheets(1).Select
MsgBox ("Completato...")
End Sub

Nella riga "Eccez =" vanno segnalati quali fogli non devono essere ripuliti (ma il nome mese deve cambiare??).
Poi ti crei una copia della macro che chiami Sub NuovoMeseTutti, con la riga Eccez = Array("ZNESSUNO") (senza apostrofo iniziale), e la userai quando invece vuoi prendere in considerazione tutti i fogli (dando per scontato che non ne hai uno chiamato "ZNessuno")

Non so se ci sono altre aree da ripulire, eventualmente aggiungile seguendo l'esempio.

Per quanto riguarda la protezione fogli, se le aree da cancellare fossero protette (e sarebbe strano) allora usa Unprotect /Protect come spiegato nell'altra discussione

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

Re: Automatizzare cancellazione celle e immissione dati

Postdi project4 » 12/11/18 16:47

Onestamente non ho capito bene se con approccio "minimalista" intendevi che si poteva fare di più o che ho chiesto molto, in ogni modo lo scopo che vorrei raggiungere tramite questo file è duplice:
1) Avere un report fatturazione pronto a fine mese
2) Avere l'andamento aziendale in tempo diretto, infatti appena sistemato questi file (sono 3 differenti suddivisi in base al tipo di cliente) vorrei creare una macro per estrapolare su un altro file i dati dare/avere di ogni cliente e vedere in tempo reale la situazione aziendale.

Detto ciò credo che l'automazione di questa macro sia piuttosto macchinosa.
Provandola e adattandola al mio file posso confermarti che funziona correttamente l'immissione del mese, ma la cancellazione dell'area che mi interessa no per 2 fattori:
1) (credo sia risolvibile) mi da come errore 1004: impossibile cancellare un parte di una cella unita.
2) (credo di dover adattare foglio per foglio) mi sono reso conto che le aree da cancellare sono troppo variabili, alcuni fogli hanno 5 colonne altri 10 che devono essere cancellati.

Per il primo errore credo (spero) che velocemente sai come ovviare.
Per il secondo punto ho già capito come passare foglio per foglio e indicare ad ognuno l'area che voglio mi venga cancellata.

Come sempre grazie!!
Win10+excel 2010
project4
Utente Junior
 
Post: 30
Iscritto il: 07/11/18 08:45

Re: Automatizzare cancellazione celle e immissione dati

Postdi Anthony47 » 13/11/18 00:58

Per "minimalista" intendevo che hai usato il pc per sostituire la carta e la matita, usandoli come la carta e la matita (invece di pensare a una automazione che migliorasse il processo)
Quello che secondo me dovevi creare e' quello che scrivi al punto "2)" del tuo messaggio, cioe' la registrazione dei dati analitici del tuo business, e da questo poi calcolare giornalmente gli indicatori che ti servono ed estrarre mensilmente o con la frequenza voluta i dati che ora inserisci direttamente sulle schede.

Quanto all'errore che ottieni, evidentemente hai unito delle celle in un'area aggregata (es D4:H6) e poi pretendi di cancellare con la macro solo D4; basta quindi che nella macro gli intervalli richiamati siano quelli effettivamente selezionati sul foglio.
Quindi (ad esempio) non Range("D4").ClearContents ma Range("D4:H6").ClearContents

Oppure usi la proprieta' MergeArea:
Codice: Seleziona tutto
Range("D4").MergeArea.ClearContents
(ma questo va fatto a livello di singola cella unita)

Sull'altro problema prendo atto che hai gia' a mente una soluzione... L'alternativa e' conoscere la regola secondo cui va ripulita l'area A oppure l'Area B.

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


Torna a Applicazioni Office Windows


Topic correlati a "Automatizzare cancellazione celle e immissione dati":


Chi c’è in linea

Visitano il forum: Nessuno e 83 ospiti