TRASFERIRE FORMULA DA CELLA A VBA

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
BORUX83
00domenica 31 gennaio 2016 15:36
Ciao ragazzi avendo non pochi problemi con la protezione di alcune colonne e righe e il conseguente malfunzionamento delle macro, vorrei sapere se è possible traferire in vba le formule che ho in alcune colonne e non usare quindi la protezione foglio.

Faccio un esempio nella colonna "C" ho le formule A5+B5 che danno il risultato in C5, quindi A6+B6 in C6 e cosi via sino C1000.

Per evitare di inserire la protezione foglio vorrei trasferire le formule in vba in modo che sulla colonna "C" se accidentalmente si cambi valore non venga comunque modificata la formula.. è possible?
rollis13
00domenica 31 gennaio 2016 16:51
Non credo che i problemi di protezione di un foglio siano tali da creare problemi con le macro (mai visto). Nella macro basta mettere (con sintassi corretta e nel punto giusto) all'inizio un "UnProtect" e poi alla fine della macro un "Protect" e tutto si svolge in modo fluido (da sempre).

Tornando alla richiesta, ipotizzando che le formule siano tutte uguali e vuoi rimetterle a posto, potresti lanciare la macro che ti riporto che nell'esempio rimette le formule nelle celle da C5 a C30 nel formato =Ax+Bx (dove x = da 5 a 30) ad ogni apertura del file o tramite un apposito pulsante.
Option Explicit

Sub inserisci_formula()
    
    Dim x As Long
    
    For x = 5 To 30     'adeguare in base al numero riga delle celle da aggiornare
        Range("C" & x).FormulaR1C1 = "=RC[-2]+RC[-1]"
    Next x
    
End Sub
BORUX83
00domenica 31 gennaio 2016 18:29
sicuramente la mia inesperienza mi ha fatto spiegare male..faccio un esempio..

(Non so se questo sia possibile)

nella cella "A1" ho il valore "5" e in "B1" il valore "3", vorrei che nella cella "C1" ci sia la somma ma che venga visualizzato solo il valore 8. Se uno fa doppio clik sulla cella "C1" visualizza solo il numero 8 senza formule.

Se chiunque per sbaglio cambia il numero 8 in 7 vorrei che la formula impostata su vb mi restituisca sulla cella "C1" il numero "8". Questo per evitare che si modifichino le formule.



Altrimenti come suggerivi (se è più semplice) si potrebbe realizzare un comando che impedisca all'utente di poter modificare 5 colonne (che sono la F,G,H,I,J, quelle dove ci sono le formule) e la prime righe (che sarebbero quelle dei subtotali e dei filtri) ma che allo stesso tempo mi faccia aggiungere o cancellare righe nel foglio.

Sarebbe ovvio e scontato utilizzare la "protezione foglio" proteggendo appunto le celle e le colonne interessate ma se il foglio è protetto non mi permette di aggiungere o cancellare righe.

allego il file incriminato
BORUX83
00mercoledì 3 febbraio 2016 19:22
stavo leggendo un pò qua e la.. mi è sembrato di capire che in excel proteggere colonne e poi inserire righe è una delle pochissime che non si possono fare.. nonostante nella protezione abbia messo la spunta a tutte le eccezioni..

Forse quello che vorrei fare è irrealizzabile.. [SM=x423068]
alfrimpa
00mercoledì 3 febbraio 2016 19:37
Si infatti è così ma non è irrealizzabile.

Con una macro si sprotegge il foglio si inserisce la riga (o si fa qualsiasi altra cosa) e si riprotegge il foglio.

L'utente finale non si accorge di nulla.
BORUX83
00mercoledì 3 febbraio 2016 19:49
grazie è un sollievo che si possa realizzare, anche se per me credo sia ancora irraggiungibile creare una macro così complessa..
raffaele1953
00mercoledì 3 febbraio 2016 22:55
Tanto per provare,ho fatto alcune modifiche
1) Foglio protetto
2) Bottone che elimina riga(Ti posizioni sulla riga e premi)
3) (Ti posizioni solo sulla cella/riga),in userform tasto Richiama
Puoi modificare eventuali errori e premi il tasto Salva
BORUX83
00sabato 6 febbraio 2016 16:12
Grazie mi è stato di grandissimo aiuto la tua macro. L ho modificata a piacere ho inserito il comando che rimuove la protezione, mette in ordine alfabetico il nome appena inserito, rimette la protezione attivando la spunta in tutte le eccezioni.

Ogni mese copio il foglio (ad esempio gennaio) e rinomino (febbraio), cancello solo gli importi e il resto rimane tutto uguale . Quindi rimangono uguali anche i comandi delle macro.


Se voglio che applichi la macro a tutti i fogli che creo uso il comando " activesheet ".

E tutto va bene.

Ogni volta che rinomino il foglio però assegna un nuovo nome alla tabella. E quindi i comandi della macro riferiti alla tabella non funzionano.

Domanda: esiste un comando tipo "activetable" (da sostituire alla voce "tabella75") o che comunque abbia la stessa funzione che activesheet ha sui fogli?

Vi scrivo la parte di comando che mi sta facendo impazzire
(funziona solo nel foglio dove c'è la tabella 75):

'TOGLIE PROTEZIONE METTE IN ORDINE ALFABETICO
'

'
    ActiveSheet.Unprotect
    ActiveSheet.ListObjects("tabella75").Sort.SortFields. _
        Clear
    ActiveSheet.ListObjects("tabella75").Sort.SortFields. _
        Add Key:=Range("tabella75[[#All],[COGNOME]]"), SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.ListObjects("tabella75").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
alfrimpa
00sabato 6 febbraio 2016 16:29
Ciao Borux

Non ho seguito la discussione quindi perdona se dico cavolate ma se tu hai questa istruzione

ActiveSheet.ListObjects("tabella75").Sort.SortFields


quindi è normale che funzioni solo se trova una tabella denominata "tabella75" nel foglio attivo.

Se nel foglio attivo tale tabella non c'è non può funzionare.
BORUX83
00sabato 6 febbraio 2016 17:20
Si si è giusto..infatti vorrei sostituire tabella75 con un comando che esegua la macro in ogni foglio e quindi in ogni tabella. Solo che non conosco il comando..
BORUX83
00sabato 6 febbraio 2016 20:36
mi arrendo.. le ho provate tutte..non riesco a trovare un comando [SM=x423054]
BORUX83
00sabato 6 febbraio 2016 23:08
[SM=x423035] [SM=x423028] risoltoooo!!! Domani posto il comando potrebbe servire a qualche altro utente.. buona serata!!
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 21:42.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com