Sviluppare funzionalita su Microsoft Office con VBA copia incolla tra 2 fogli

Login Registrati
Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
  • Autore
    Articoli
  • #46685 Score: 0 | Risposta

    Ciao a tutti.
    Nel workbook allegato ci sono 4 fogli
    input/produttività/archivio input/archivio altri

    seleziono 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 bene

    seleziono 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 verde

    il 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 B

    Spero ei essermi spiegato.

    Grazie

    Allegati:
    You must be logged in to view attached files.
    #46687 Score: 0 | Risposta

    alexps81
    Moderatore
      55 pts

      I codici di questo progetto presentano diversi errori di fondo. Tra i primi più importanti è l'utilizzo di On Error Resume Next che in questo caso va a scongiurare qualsiasi errore senza poterlo mai gestire. Poi vengono disabilitati gli eventi con Application.EnableEvents = False e se per caso, si seleziona una riga prima del rigo nr. 7, a causa della presenza di Exit 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 parametro UserInterfaceOnly a 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.

      #46688 Score: 0 | Risposta

      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 B

      #46689 Score: 0 | Risposta

      alexps81
      Moderatore
        55 pts

        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.

        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.

        #46690 Score: 0 | Risposta

        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

         

         

         

        #46691 Score: 0 | Risposta

        alexps81
        Moderatore
          55 pts

          frank_ciccio ha scritto:

          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?

          #46692 Score: 0 | Risposta

          Per il momento lasciamo se sono stati copiati 2 volte.

          #46698 Score: 0 | Risposta

          alexps81
          Moderatore
            55 pts

            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.

            #46699 Score: 0 | Risposta

            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

            #46700 Score: 0 | Risposta

            alexps81
            Moderatore
              55 pts

              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à.

              #46701 Score: 0 | Risposta

              Tolto protezione al foglio archivio altri  ma non cambia

              #46702 Score: 0 | Risposta

              alexps81
              Moderatore
                55 pts

                Hai poi messo una data nella colonna P in corrispondenza del rigo copiato?

                #46708 Score: 0 | Risposta

                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.

                 

                #46709 Score: 0 | Risposta

                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 Sub
                
                #46711 Score: 0 | Risposta

                Ho 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

                 

                #46718 Score: 0 | Risposta

                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.
              Login Registrati
              Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
              Rispondi a: copia incolla tra 2 fogli
              Gli allegati sono permessi solo ad utenti REGISTRATI
              Le tue informazioni: