› Sviluppare funzionalita su Microsoft Office con VBA › copia incolla tra 2 fogli
-
AutoreArticoli
-
Ciao a tutti.
Nel workbook allegato ci sono 4 fogli
input/produttività/archivio input/archivio altriseleziono un riga in input > clicco nel pulsante archivia 1 riga questa viene riportata nel foglio archivio input
questa viene riportata con la stessa formattazione e va beneseleziono un riga in produttività > clicco nel pulsante archivia 1 riga questa viene riportata nel foglio archivio altri
questa non viene riportata con la stessa formattazione se la riga è tutta verdeil colore verde della riga sia in input che produttivita si visualizza se nella cella P è presente una data.
La differenza tra le 2 macro nel pulsante archivia 1 riga è che nel foglio
foglio archivio input incolla da colonna A
foglio archivio altri incolla da colonna BSpero ei essermi spiegato.
Grazie
Allegati:
You must be logged in to view attached files.I codici di questo progetto presentano diversi errori di fondo. Tra i primi più importanti è l'utilizzo di
On Error Resume Nextche in questo caso va a scongiurare qualsiasi errore senza poterlo mai gestire. Poi vengono disabilitati gli eventi conApplication.EnableEvents = Falsee se per caso, si seleziona una riga prima del rigo nr. 7, a causa della presenza diExit Sub, gli eventi non vengono più abilitati. E questo non va bene. Poi altro errore è questo continuo rimbalzo da un Foglio all'altro con richieste di sproteggere e proteggere i fogli passati in rassegna. Per poter operare sui fogli attraverso le macro basta valorizzare il parametroUserInterfaceOnlya True del metodo Protect di Worksheet. A questo punto non è necessario proteggere e sproteggere ogni volta i Fogli. In oltre io fare il controllo del rigo selezionato ancor prima del MsgBox che chiede se Archiviare il contenuto della riga...così da evitare giri a vuoto del codice.Ancora...per stabilire dove incollare i nuovi dati, non serve un ciclo For che scorre dal rigo 5 in giù finché non trova un rigo nuovo. Basterebbe una variabile che, partendo dal basso, sale finché trova l'ultima cella piena, o comunque ci sono altri metodi per trovare il prossimo rigo vuoto. Sicuramente molto meglio di un ciclo For...Next.
Arrivando alla richiesta. Sembra che il problema nasca perché le celle dei fogli sono soggetti a Formattazione Condizionale. Non è che non si copia anche il colore di fondo delle celle, ma è che poi viene applicato il colore determinato dalla Formattazione Condizionale.
Comunque io consiglio di rivedere tutta la struttura del progetto, lasciando perdere per ora la Formattazione Condizionale ma concentrandosi piuttosto sul copia e incolla dei dati. Poi all'estetica si pensa dopo.
Ciao, purtroppo queste macro le ho ereditate da un file in ufficio di una persona che è in pensione e che sto cercando di correggere per il momento senza successo.
Quello che non capisco è che le macro sono uguali, cambia solo dove vengono incollate
foglio archivio input incolla da colonna A
foglio archivio altri incolla da colonna BIo se ho capito bene, tu vorresti, che con la stessa macro, hai la possibilità di copiare ed incollare range di celle da un foglio all'altro in base al foglio selezionato. Cioè ad esempio se la macro la lancio dal Foglio 1, deve copiare i dati ed incollarli nel Foglio 3. Se invece la macro la lancio dal Foglio 2 allora i dati copiati devono essere incollati nel Foglio 4. Vuoi copiare tutto, valori e formattazione (colore di fondo, FontSize, ecc...). Questi dati devono essere accodati a quelli già presenti nei Fogli di destinazione. Bisogna tener conto della presenza di una protezione con password su ogni Foglio interessato.
C'è un caso che non ho capito: cosa c'entra il discorso della data presente in cella P
Poi altra cosa: se i valori del rigo selezionato sono già presenti nel foglio di destinazione, cosa deve accadere? Incollarli di nuovo o interrompere il processo vista già la presenza di dati uguali?
Non so...io partirei da zero. Facendo un passo alla volta. Tanto alla fine saranno poche righe di codice.
Questo si
Io se ho capito bene, tu vorresti, che con la stessa macro, hai la possibilità di copiare ed incollare range di celle da un foglio all'altro in base al foglio selezionato. Cioè ad esempio se la macro la lancio dal Foglio 1, deve copiare i dati ed incollarli nel Foglio 3. Se invece la macro la lancio dal Foglio 2 allora i dati copiati devono essere incollati nel Foglio 4. Vuoi copiare tutto, valori e formattazione (colore di fondo, FontSize, ecc...). Questi dati devono essere accodati a quelli già presenti nei Fogli di destinazione. Bisogna tener conto della presenza di una protezione con password su ogni Foglio interessato.
-----------------------------------------------------
Questo
C'è un caso che non ho capito: cosa c'entra il discorso della data presente in cella P
serve per capire che il problema inserito nella riga è stato risolto mettendo la data diventa verde = risolto
-----------------------------------------------------
Questo
Poi altra cosa: se i valori del rigo selezionato sono già presenti nel foglio di destinazione, cosa deve accadere? Incollarli di nuovo o interrompere il processo vista già la presenza di dati uguali?
ad ogni inserimento nei fogli archivio i dati vengono incollati in una nuova riga
ad ogni inserimento nei fogli archivio i dati vengono incollati in una nuova riga
Si ma se hai già inserito quei dati e poi, o per errore o perché si ignora il fatto di averli già inseriti, lanci nuovamente la macro di in rigo già copiato ed incollato, in pratica accadrà che si inserirà un nuovo rigo con gli stessi dati già presenti. Questo è corretto? Va bene che inserisci più volte gli stessi dati?
Per il momento lasciamo se sono stati copiati 2 volte.
Premesso che non posso pubblicare un lavoro fatto e finito ma ci dovresti pensare tu...
il problema al tuo quesito è dato della Formattazione Condizionale presente nei Fogli Archivio. Sicuramente quei due fogli sono stati copiati dagli altri 2 e quindi hanno ereditato anche le Formazioni Condizionali.
In pratica anche se tu copi un range di celle colorate di verde e le incolli in un Foglio che ha una certa Formattazione Condizionale, quel colore di fondo non sarà più verde ma sarà uguale a quello dettato dall FC.
Il mio consiglio rimane sempre quello di rifare tutto daccapo. Però se non hai delle basi è difficile portare avanti anche solo un progetto così semplice. Aiutarti anche solo a provare a risolvere questo problema penso non sia corretto, visto che ci sono tanti difetti nel codice da sistemare.
Ciao alexps81.
Lasciamo le macro come sono.
Per questo
il problema al tuo quesito è dato della Formattazione Condizionale presente nei Fogli Archivio. Sicuramente quei due fogli sono stati copiati dagli altri 2 e quindi hanno ereditato anche le Formazioni Condizionali.
nei 2 fogli archivio non cè una formattazione condizionale prima di incollare i dati
Quello che non capisco perchè
nella macro archivia_1_input() funziona
nella macro archivia_1_no_input(nomeFile As String) non funziona
le macro sono praticamenti uguali con la differenza cha la prima incolla da colonna A la seconda da colonna B
Quando tu esegui un Copy di un range senza specificare nulla nei parametri SpecialPaste...in pratica tu copi tutto (Valori, Formule, Formattazione Condizionale, ecc...). Infatti nel Foglio Produttività tu hai una condizione sulle celle in colonna P. Se c'è un qualsiasi valore allora colora il rigo da A a P di verde. A quel punto quando fai Copy e lo incolli nel Foglio Archivio_altri ti porti indietro anche la Formattazione Condizionale. Ma nel foglio Archivio_altri tu non valorizzi la cella in colonna P, ma la data la metti in cella in colonna Q.
Prova a togliere la protezione al foglio e mettere un qualsiasi valore in cella in colonna P e vedi che magicamente la riga si colora di verde.
Ma questo non deve essere la soluzione al tuo problema...perché già so che risolvi questo poi te ne compariranno altri 10 come minimo più avanti. Il punto è capire quale sarebbe l'obiettivo finale del progetto. Se ci sono momenti in cui tu cancellerai i dati archiviati o se solo li manipolerai...perché poi da quel momento sei soggetto alla Formattazione Condizionale ormai presente nel Foglio Archivio_altri.
Poi io vedo che sempre in questo Foglio, nella colonna A è riportata più volte la scritta Produttività. Presumo che quella scritta dovrebbe comparire quando tu lanci la macro dal Foglio Produttività e che se per caso dovessi lanciarla da un altro Foglio (esempio Foglio "Esportazione") allora vorresti che dopo copiati tutti i dati, in colonna A, in corrispondenza del rigo appena copiato, ci sia scritto Esportazione. Io ho capito che quel Foglio servirà ad archiviare dati da diversi Fogli e non solo da quello Produttività.
Tolto protezione al foglio archivio altri ma non cambia
Hai poi messo una data nella colonna P in corrispondenza del rigo copiato?
La data nel foglio produttività nella riga riga colonna P è già inserita prima di copiarlo nel foglio archivio altri.
Ho provato a toglierla e poi inserirla manualmente nel foglio archivio altri ma non cambia, resta senza colore verde.
Ho pensato ad una macro che cambi il colore della riga quando viene incollata nel foglio archivio.
Non funziona tanto bene.
Dovrebbe ad ogni passaggio nel foglio archivio colorare la riga se è presente una data nella colonna Q del foglio archivio e la relativa cella A non è vuota
Private Sub Worksheet_Change(ByVal Target As Range) ' Verifica se la modifica è stata effettuata nell'intervallo desiderato (M3:N260) If Not Intersect(Target, Range("Q5:Q100")) Is Nothing Then Dim cell As Range For Each cell In Target If UCase(Trim(cell.Value)) <> "" Then Cells.Validation.Delete Cells.FormatConditions.Delete Me.Range("A" & cell.Row & ":Q" & cell.Row).Interior.Color = RGB(153, 255, 153) ' Colora da A a Q End If Next cell End If End SubHo visto l'errore della riga verde.
Nel foglio produttività cella della data P formattazione =$P6
dopo il copia incolla nel foglio archivio altri spostandosi di 1 colonna
nel foglio archivio altri cella della data Q formattazione =$P6 cambiando qui =$Q10
diventa verde da B a Q
probabilmente bisogna correggere nella macro del copia incolla che cambia la priorità colore verde, anche per l'altra macro, invertendo dopo il copia incolla, oppure correggere la nuova macro che ho inserito nel post #46709
In questo punto delle 2 macro archivia
=====================================================================
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '<<< a colori
'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False '<<< solo valori'------------------------------------------------------------
'se nella riga copiata cella P c'è una data '<<<<<<<<<
'colora tutta la riga da A a P di verde '<<<<<<<<<<<<<
'come nella macro che è in foglio archivio_altri '<<<<<<<<<<<
'------------------------------------------------------------Sheets("archivio_altri").Select 'riprotegge l'archivio
Range("B5:R500").Select
Selection.Locked = True
ActiveSheet.Protect "987654"
ActiveSheet.Protect Password:="987654", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=False, AllowInsertingHyperlinks:=False, AllowFiltering:=True=====================================================================
aggiungere la parte della macra che è in foglio archivio_altri per colorare la riga.
Allegati:
You must be logged in to view attached files. -
AutoreArticoli
