Excel e gli applicativi Microsoft Office Macro per aggiungere più righe alla volta per più fogli (Excel)

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

    Buongiorno,

    avrei bisogno di capire come posso fare ad aggiungere più righe alla volta e allo stesso momento per 2 fogli contemporaneamente. In entrambi i fogli ogni riga è composta da 3 righe. Nel senso che io per "aggiungere una riga" lo intendo come "aggiungere 3 righe". In allegato metto il file Excel che spiega bene (o almeno spero) cosa bisognerebbe fare.

    Il file illustra la situazione iniziale e il risultato, che vorrei avere, di entrambi i fogli.

     

    Di seguito inserisco anche il codice VBA che illustra quello che vorrei fare ed è proprio il risultato che vorrei avere, ma il fatto sta che, tenendo questo codice, dopo un tot. di attivazioni, il processo della macro rallenterà e a me serve che il processo resti costante. (In allegato anche il file con la macro sottostante)

     

    Sub Inserire_riga()
    '
    ' Inserire_riga Macro
    '
    ' Scelta rapida da tastiera: CTRL+MAIUSC+I
    '
        ActiveCell.Offset(-4, -1).Range("A1:I5").Select
        Selection.Copy
        ActiveCell.Offset(3, 0).Range("A1").Select
        ActiveSheet.Paste
        ActiveCell.Offset(2, 2).Range("A1:F1").Select
        Selection.ClearContents
        ActiveCell.Offset(1, -1).Range("A1").Select
        Sheets("Situazione iniziale Foglio2").Select
        ActiveCell.Offset(-3, -1).Range("A1:M3").Select
        Selection.Copy
        ActiveCell.Offset(3, 0).Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveCell.Offset(3, 0).Range("A1").Select
        Sheets("Situazione iniziale Foglio1").Select
        ActiveCell.Offset(1, 0).Range("A1").Select
    End Sub

    Grazie in anticipo

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

    PMC77
    Partecipante
      18 pts

      Buongiorno a te!

      A prescindere che questo quesito andrebbe posto nella sezione VBA e non Applicativi Office...

      Detto questo, sicuramente la macro rallenterà a forza di aggiungere righe (fra l'altro quante realmente?)

      Poi la tua macro la capisco poco...

      Quali sono le condizioni di selezione e copia?

      Anche guardando i files non è che si capisca molto!

      Ti chiederei di essere più chiaro / esplicito

      Ciao

      Paolo

      #40969 Score: 0 | Risposta

      Scusa, non c'avevo fatto caso che c'era la sezione "VBA".

      Questo file bisognerà utilizzarlo in un anno, di conseguenza il massimo di righe che si aggiungeranno saranno 1.500 (ognuna composta da 3 righe, quindi effettivamente vengono aggiunte 4.500 righe).

       

      La selezione è riferita a tutta la "tabella" delle 3 righe, ogni 3 righe fanno una tabella (per dire) e quindi ogni tabella viene aggiunta sotto la terza riga di quest'ultima. Il codice dà la possibilità di copiare la tabella sopra la cella con scritto "MOUSE QUI" (mettere il mouse su quella cella), incollarla sotto quest'ultima tabella e poi "svuotare" le celle senza formule (che sono sempre le stesse, non hanno criteri e quindi non vanno in base alla tabella). Allo stesso momento vengono aggiunte anche le tre righe del foglio 2 che anch'esse possono essere definite tabella (ogni 3 righe), ma in questo caso viene applicato solo "incolla" (dopo aver copiato la tabella) dato che tutte le celle hanno una formula e non devono essere compilate manualmente

      #41142 Score: 0 | Risposta

      Come posso avere il consenso di postare la domanda su un altro forum?

      #41147 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Dipende da quello che c'è scritto nel regolamento dell'altro Forum.

        Prova a contattare un moderatore e illustra la tua richiesta.

        #41380 Score: 0 | Risposta

        alexps81
        Moderatore
          58 pts

          Non so se la richiesta è ancora in attesa di sviluppo...comunque ti giro una mia proposta e allego anche il file di esempio.

          Tieni presente che non ho capito bene la tua richiesta infatti mi sono limitato a creare in modo diverso quello che fa la tua macro.

          Ho notato che ci sono delle formule in alcune celle ma, ripeto, mi sono soffermato solo al tuo scopo finale. Per far ciò ho dovuto modificare un po' la struttura dei tuoi fogli. Ad esempio nel secondo foglio le colonne A e B non erano utilizzate. Per rendere il ciclo For Each funzionante ho fatto combaciare le tabelle create nei due fogli. Adesso entrambi iniziano dalla colonna B in poi.

          Ho sfruttato la colonna A per verificare la presenza del nr. 1 messo di fianco al nome dell'operatore. Quel numero è importantissimo (non tanto il numero ma quanto la presenza di un valore in quella cella della colonna A perché in questo modo mi ricavo l'ultimo rigo compilato....da lì in poi vengono effettuati i dovuti calcoli per raggiungere il tuo obiettivo).

           

          Prova a vedere se così va bene. Premi sul pulsante modulo "Copia e inserisci righe copiate" posto sul primo foglio

          Option Explicit
          
          Sub CopiaIncollaRighe()
          Dim ws As Worksheet
          Dim iUltimaRiga As Long
          Dim rRigheCopiate As Range
          
          On Error Resume Next
          
          Application.ScreenUpdating = False
          
              For Each ws In ThisWorkbook.Worksheets
                  
                  ws.Activate
                  iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                  Set rRigheCopiate = Range(Rows(iUltimaRiga - 2), Rows(iUltimaRiga))
          
                  With rRigheCopiate.Select
                      Selection.Copy
                      Range("A" & iUltimaRiga + 1).PasteSpecial
                      Application.CutCopyMode = False
                  End With
                  Cells(iUltimaRiga + 4, 1).Select
              
              Next ws
              
          Application.ScreenUpdating = True
          
          End Sub
          
          Allegati:
          You must be logged in to view attached files.
          #41386 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            alexps81 ha scritto:

            On Error Resume Next

            Il codice fa il suo lavoro ma la riga evidenziata, che impone di ignorare qualsiasi errore si verifichi, è potenzialmente pericolosa e mi sento di sconsigliarla a priori   

            #41388 Score: 0 | Risposta

            Il codice funziona perfettamente, anche togliendo quello che evidenziava @vecchio frac. Grazie mille @alexps81. L'unica cosa è che non svuota le celle. Dovrebbe svuotare alcune celle del foglio1, del foglio2 invece bisogna lasciarlo così com'è. E se è possibile che, dopo il processo, rimanga sul primo foglio (questo codice fa si che dopo il processo rimanga sul secondo foglio). Per ogni terza riga bisogna cancellare il contenuto delle celle C, D, F, e H. Quindi, le prime 2 righe bisogna lasciarle così come sono, la terza invece bisognerebbe togliere le celle che ho elencato.

            #41389 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              Adesso non sono davanti al pc e non posso verificare con esattezza. Ma il linea di massima per selezionare il foglio1 alla fine del ciclo basta che metti ws(1).Select dopo il Next ws.

              Quello che ha detto Vecchio_Frac è giusto. Togli On Error Resume Next

               

              Per la cancellazione delle celle, prova a dare uno sguardo al metodo ClearContents

              In pratica dopo i due cicli che copiano le righe, ritorna nel foglio1 con ws(1).Select e da lì lanci il metodo ClearContents alle celle che ti interessano.

              Prova a leggere il codice e capire come sfruttare le variabili rRigheCopiate e iUltimaRiga

              #41392 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                Dunque ti giro un nuovo esempio. Se devi modificare le celle da cancellare basta che agisci nel codice in fondo. Dovresti arrivarci da solo.

                #41399 Score: 0 | Risposta

                alexps81
                Moderatore
                  58 pts

                  Ti giro una nuova versione che più o meno è simile alla precedente ma il codice è leggermente diverso anche se poi il risultato è uguale

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

                  Scusate se rispondo adesso, ma ho avuto molto da fare al lavoro. @alexps81 grazie mille. Funziona benissimo. Avrei solo 3 domande:

                  1 - Io modificato il codice mettendo le celle che dovevo effettivamente cancellare e vorrei essere sicuro di aver scritto bene (ci sono 25 celle, per quello. E' giusto?

                  2 - C'è un problema, cioè che il secondo foglio, nel file originale, è l'ultimo foglio (il n. 7 per l'esattezza). Avrei dovuto specificarlo, ma non c'ho fatto caso. Me ne sono reso conto solo provando il codice. Come posso fare?

                  3 - Se le righe fossero 4 e non 3? (Scusate il cambio)

                   

                  di seguito il codice:

                  Sub CopiaIncollaRighe()
                  Dim ws As Worksheet
                  Dim iUltimaRiga As Long
                  Dim rRigheCopiate As Range
                  
                  Application.ScreenUpdating = False
                  
                      For Each ws In ThisWorkbook.Worksheets
                  
                          ws.Activate
                          iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                          Set rRigheCopiate = Range(Rows(iUltimaRiga - 2), Rows(iUltimaRiga))
                  
                          With rRigheCopiate.Select
                              Selection.Copy
                              Range("A" & iUltimaRiga + 1).PasteSpecial
                              Application.CutCopyMode = False
                          End With
                          Cells(iUltimaRiga + 4, 1).Select
                  
                      Next ws
                  
                  Application.ScreenUpdating = True
                      
                      Sheets(1).Select
                      
                      Range("C" & iUltimaRiga + 3 & ", D" & iUltimaRiga + 3 & _
                              ", E" & iUltimaRiga + 3 & ", F" & iUltimaRiga + 3 & ", G" & iUltimaRiga + 3 & _
                              ", H" & iUltimaRiga + 3 & ", I" & iUltimaRiga + 3 & ", J" & iUltimaRiga + 3 & _
                              ", K" & iUltimaRiga + 3 & ", L" & iUltimaRiga + 3 & ", M" & iUltimaRiga + 3 & _
                              ", N" & iUltimaRiga + 3 & ", O" & iUltimaRiga + 3 & ", P" & iUltimaRiga + 3 & _
                              ", R" & iUltimaRiga + 3 & ", S" & iUltimaRiga + 3 & ", T" & iUltimaRiga + 3 & _
                              ", U" & iUltimaRiga + 3 & ", V" & iUltimaRiga + 3 & ", W" & iUltimaRiga + 3 & _
                              ", X" & iUltimaRiga + 3 & ", Z" & iUltimaRiga + 3 & ", AA" & iUltimaRiga + 3 & _
                              ", AB" & iUltimaRiga + 3 & ", AC" & iUltimaRiga + 3).ClearContents
                  
                  End Sub

                   

                   

                  Grazie mille per l'aiuto

                   

                  Buona serata

                  #41437 Score: 0 | Risposta

                  alexps81
                  Moderatore
                    58 pts

                    Spero di aver inteso bene tutto quello che hai richiesto

                    Leggi bene il commentato nel codice che devi fare delle piccole modifiche per adattarlo al tuo.

                    Ciao.

                    `Option Explicit
                    
                    Sub CopiaIncollaRighe()
                    Dim iUltimaRiga As Long '-----a patto che i 2 fogli rispettano le stesse righe di partenza, altrimenti bisogna aggiungere un'altra variabile per il secondo foglio
                    Dim rRigheCopiate As Range
                    Dim iClear As Integer
                    Dim i As Integer, x As Integer, y As Integer
                    
                    Application.ScreenUpdating = False
                    
                    '-----CopiaIncolla righe nel foglio7
                          Sheets("Situazione iniziale Foglio1").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                          iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                          Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga))
                    
                          With rRigheCopiate.Select
                              Selection.Copy
                              Range("A" & iUltimaRiga + 1).PasteSpecial
                              Application.CutCopyMode = False
                          End With
                          Cells(iUltimaRiga + 5, 1).Select
                    
                    '-----CopaiIncolla righe nel foglio7
                          Sheets("Situazione iniziale Foglio2").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                          iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                          Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga))
                    
                          With rRigheCopiate.Select
                              Selection.Copy
                              Range("A" & iUltimaRiga + 1).PasteSpecial
                              Application.CutCopyMode = False
                          End With
                          Cells(iUltimaRiga + 5, 1).Select
                    
                    '-----Seleziona il primo foglio (quello principale)
                        Sheets("Situazione iniziale Foglio1").Select '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                        
                        iClear = iUltimaRiga + 4
                               
                    '---inizio cicli per la cancellazione nelle celle da C-P; R-X; Z-AC
                    '---da C a P
                        For i = 3 To 16
                            Cells(iClear, i).ClearContents
                        Next i
                        
                    '---da R a X
                        For x = 18 To 24
                            Cells(iClear, x).ClearContents
                        Next x
                    
                    '---da Z a AC
                        For y = 26 To 29
                            Cells(iClear, y).ClearContents
                        Next y
                    
                    Application.ScreenUpdating = True
                    
                    End Sub
                    `
                    #41439 Score: 0 | Risposta

                    Buongiorno, ho provato, ma mi evidenzia questo debug: " Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga)) "

                    Option Explicit
                    
                    Sub CopiaIncollaRighe()
                    Dim iUltimaRiga As Long '-----a patto che i 2 fogli rispettano le stesse righe di partenza, altrimenti bisogna aggiungere un'altra variabile per il secondo foglio
                    Dim rRigheCopiate As Range
                    Dim iClear As Integer
                    Dim i As Integer, x As Integer, y As Integer
                    
                    Application.ScreenUpdating = False
                    
                    '-----CopiaIncolla righe nel foglio7
                          Sheets("Operatore").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                          iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                          Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga))
                    
                          With rRigheCopiate.Select
                              Selection.Copy
                              Range("A" & iUltimaRiga + 1).PasteSpecial
                              Application.CutCopyMode = False
                          End With
                          Cells(iUltimaRiga + 5, 1).Select
                    
                    '-----CopaiIncolla righe nel foglio7
                          Sheets("A.F._2").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                          iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                          Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga)) 'QUESTO E' il DEBUG CHE MI DA
                    
                          With rRigheCopiate.Select
                              Selection.Copy
                              Range("A" & iUltimaRiga + 1).PasteSpecial
                              Application.CutCopyMode = False
                          End With
                          Cells(iUltimaRiga + 5, 1).Select
                    
                    '-----Seleziona il primo foglio (quello principale)
                        Sheets("Operatore").Select '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                        
                        iClear = iUltimaRiga + 4
                               
                    '---inizio cicli per la cancellazione nelle celle da C-P; R-X; Z-AC
                    '---da C a P
                        For i = 3 To 16
                            Cells(iClear, i).ClearContents
                        Next i
                        
                    '---da R a X
                        For x = 18 To 24
                            Cells(iClear, x).ClearContents
                        Next x
                    
                    '---da Z a AC
                        For y = 26 To 29
                            Cells(iClear, y).ClearContents
                        Next y
                    
                    Application.ScreenUpdating = True
                    
                    End Sub

                    Per rispondere a quello che hai scritto nel codice " a patto che i 2 fogli rispettano le stesse righe di partenza, altrimenti bisogna aggiungere un'altra variabile per il secondo foglio " :

                    - Al dire il vero entrambi i fogli hanno 3 righe ed entrambi iniziano dalla stessa riga, ma volevo capire se era possibile far sì che il primo foglio avesse 4 righe e il secondo 3. In questo caso però forse è meglio lasciare 3 righe ad entrambi per non complicare le cose. Troverò una soluzione per non dover utilizzare la quarta riga.

                     

                    #41440 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Alexandru339 ha scritto:

                      ma mi evidenzia questo debug: " Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga)) "

                      Riporta anche l'errore che ricevi.
                      Probabilmente in colonna A non ci sono dati dopo la riga 3 e quindi fallisce in quanto iUltimaRiga meno 3 diventa zero o negativo e questo non piace a Excel 🙂

                      #41442 Score: 0 | Risposta

                      In effetti la quarta riga ha la presenza di un valore solo nella colonna "P". In questo caso è meglio lasciare 3 righe. In questo caso come faccio? Al posto del "+5" devo mettere "+4"?

                      #41443 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        E' necessario che ci sia almeno un valore in colonna A dopo la terza riga. 

                        #41445 Score: 0 | Risposta

                        Ho messo un valore nella colonna "A" e non mi da più errore, ma mi aggiunge solo le righe del foglio "A.F._2" (settimo foglio). Il primo foglio "Operatore" restano solo le tre righe originali, anche se sia la terza che la quarta riga hanno nella colonna "A" un valore

                         

                        Vi allego la copia dell'originale (i fogli sono "Operatore" e "A.F._2") così è molto più chiaro come sono fatti i 2 fogli

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

                        alexps81
                        Moderatore
                          58 pts

                          4521

                          Allora ti rigiro una nuova versione.

                          Buongiorno, ho provato, ma mi evidenzia questo debug: " Set rRigheCopiate = Range(Rows(iUltimaRiga - 3), Rows(iUltimaRiga)) 

                          perché la colonna A dell'ultimo foglio (il settimo) è vuota (come dice infatti @Vecchio_Frac).

                           

                          Ho messo un valore nella colonna "A" e non mi da più errore, ma mi aggiunge solo le righe del foglio "A.F._2" (settimo foglio). Il primo foglio "Operatore" restano solo le tre righe originali, anche se sia la terza che la quarta riga hanno nella colonna "A" un valore

                          nel primo foglio, al contrario del settimo, sono presenti delle Formule in colonna A dal rigo 4521 in poi. Perciò non copia e incolla nulla. Perché la variabile  iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row

                          serve proprio a cercare la prima riga non vuota a partire dal basso verso l'alto del foglio elettronico. Se parte dalla fine e tornando su trova che nella cella A45xx c'è un valore o una formula, considera come ultima riga quella.

                          Comunque per far funzionare questo codice devi lasciare libera la colonna A di entrambi i fogli. Inserisci solo un valore a tuo piacere nella cella A6 per il primo foglio e nella cella A5 nel secondo foglio. Io per comodità gli ho messo il numero 1, ma tu puoi mettere quello che vuoi. Puoi anche nasconderla quella colonna o colorare i valori che metti di bianco così da non vederli...ma almeno in quelle due celle devi mettere qualcosa. Poi la Sub fa il resto anche per le righe inserire in seguito.

                          Per la cancellazione delle celle da C:P; R:X; Z:AC ho modificato il codice rispetto all'ultimo allegato. Ho avuto un suggerimento da @VF che non conoscevo ed ho utilizzato quello.

                          - Al dire il vero entrambi i fogli hanno 3 righe ed entrambi iniziano dalla stessa riga, ma volevo capire se era possibile far sì che il primo foglio avesse 4 righe e il secondo 3. In questo caso però forse è meglio lasciare 3 righe ad entrambi per non complicare le cose. Troverò una soluzione per non dover utilizzare la quarta riga.

                          se ho capito bene la richiesta...vedi se così funziona come vorresti.

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

                          Intanto vi ringrazio davvero tanto perchè mi avete aiutato tantissimo. Alla fine ho deciso di lasciare per entrambi 3 righe perchè mi sono accorto che, altrimenti, dovrei cambiare un po' di formule. Sono riuscito a metterci del mio, anche se poco, e cambiare il "+ 5 " con " + 4", il " + 4 " con il " + 3 " e in fine il " - 3 " con il " - 2 ". (Almeno a questo ci sono arrivato   (mi ci è voluto un po' per capirlo però)).

                           

                          PS: funziona alla perfezione. Grazie mille ancora e buona serata.

                           

                          Option Explicit
                          
                          Sub CopiaIncollaRighe()
                          Dim iUltimaRiga As Long '-----a patto che i 2 fogli rispettano le stesse righe di partenza, altrimenti bisogna aggiungere un'altra variabile per il secondo foglio
                          Dim rRigheCopiate As Range
                          Dim iClear As Integer
                          Dim i As Integer, x As Integer, y As Integer
                          
                          Application.ScreenUpdating = False
                          
                          '-----CopiaIncolla righe nel foglio7
                                Sheets("Operatore").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                                iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                                Set rRigheCopiate = Range(Rows(iUltimaRiga - 2), Rows(iUltimaRiga))
                          
                                With rRigheCopiate.Select
                                    Selection.Copy
                                    Range("A" & iUltimaRiga + 1).PasteSpecial
                                    Application.CutCopyMode = False
                                End With
                                Cells(iUltimaRiga + 4, 1).Select
                          
                          '-----CopaiIncolla righe nel foglio7
                                Sheets("A.F._2").Activate '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                                iUltimaRiga = Range("A" & Rows.Count).End(xlUp).Row
                                Set rRigheCopiate = Range(Rows(iUltimaRiga - 2), Rows(iUltimaRiga))
                          
                                With rRigheCopiate.Select
                                    Selection.Copy
                                    Range("A" & iUltimaRiga + 1).PasteSpecial
                                    Application.CutCopyMode = False
                                End With
                                Cells(iUltimaRiga + 4, 1).Select
                          
                          '-----Seleziona il primo foglio (quello principale)
                              Sheets("Operatore").Select '<<<<<-----inserisci il nome esatto del foglio tra le virgolette (e poi non cambiarlo più!)
                              
                              iClear = iUltimaRiga + 3
                                     
                          '---inizio cicli per la cancellazione nelle celle da C-P; R-X; Z-AC
                          '---da C a P
                              For i = 3 To 16
                                  Cells(iClear, i).ClearContents
                              Next i
                              
                          '---da R a X
                              For x = 18 To 24
                                  Cells(iClear, x).ClearContents
                              Next x
                          
                          '---da Z a AC
                              For y = 26 To 29
                                  Cells(iClear, y).ClearContents
                              Next y
                          
                          Application.ScreenUpdating = True
                          
                          End Sub
                          
                          #41465 Score: 0 | Risposta

                          alexps81
                          Moderatore
                            58 pts

                            È un peccato se ti devi adeguate e non sfruttare le potenzialità del codice. Se ti interessa avere 4 righe su un foglio e 3 su un altro, perché non lavorarci su? Se nom è una cosa complessa gira pure le richieste che vorresti ottenere nelle varie celle e vediamo cosa si può fare.

                            #41474 Score: 0 | Risposta

                            Grazie mille, non volevo chiedere più del necessario dato che vi ho già fatto tribullare tanto 😅, ma accetto l'aiuto. Grazie mille.

                             

                            Provo a spiegare esattamente cosa vorrei che succedesse.

                             

                            - Per il settimo foglio (A.F._2) le righe rimangono tre, ma per il primo foglio (Operatore) le righe sono quattro, ma non esattamente quattro, nel senso che la quarta riga ha solo una cella compilata (la cella della colonna "P" se non sbaglio).

                            - Io non voglio che ogni volta che si copia e si incolla io abbia 4 righe alla volta, ma:

                                      - Copio le 4 righe, ma quando vado               ad incollare queste 4 righe, non                 le incollo partendo dalla riga                     sotto (la quinta), ma sempre                       dalla quarta. Questo perché la                   quarta riga serve solamente per                 la riga soprastante e non per                       ogni riga.

                            - Di conseguenza quando si attiva la macro, si copiano le ultime quattro righe e se ne incollano, sempre 4, ma utilizzando la quarta riga.

                             

                            Provo a fare l'esempio:

                             

                                 A.      B.        C.       D.        E.       F. 

                            1 GH.     HD.     DJ.     DJ.      HD.    JE

                            2 YT.      YU.      UEI.   HSJ.    JDU.  JDI

                            3 HD.     DJ.       JD.     JDJ.     JE.     HD

                            4                         JD 

                            5

                            6

                            7

                            8

                             

                            Come vedete, in questo caso, solamente la cella della colonna "C" ha un valore per la quarta riga. Di seguito quello che dovrebbe succedere dopo che si aggiunge la riga:

                             

                            1 GH.     HD.     DJ.     DJ.      HD.    JE

                             

                            2 YT.      YU.      UEI.   HSJ.    JDU.  JDI

                             

                            3 HD.     DJ.       JD.     JDJ.     JE.     HD

                             

                            4 GH.     HD.     DJ.     DJ.      HD.    JE                  

                            5 YT.      YU.      UEI.   HSJ.    JDU.  JDI

                             

                            6 HD.     DJ.       JD.     JDJ.     JE.     HD

                             

                            7                         JD

                             

                            8

                             

                             

                            Come vedete le righe vengono incollate partendo dalla quarta riga, sovrapponendo il valore della cella "C" che poi verrà messo, in questo caso, nella settima riga essendo che l'opzione "incolla" viene applicata dalla quarta riga.

                             

                             

                            Spero di essermi spiegato (sono dal telefono in questo momento e non sono riuscito a dare un esempio migliore di questo.

                             

                             

                            Grazie mille

                            #41478 Score: 0 | Risposta

                            alexps81
                            Moderatore
                              58 pts

                              Sto cercando di capirci qualcosa ma faccio fatica. Ma per caso tu vuoi che nel foglio Operatore il quarto rigo iniziale scende sempre ogni volta che si copiano e incollano nuove righe? Cioè Copiamo le prime tre righe e le incolliamo inserendole dalla quarta in poi facendo scalare quella che era la quarta in settima posizione? E così via per i prossimi CopiaIncolla?

                               

                              Prova questa nuova versione e vedi se fa quello che vuoi.

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

                              Buongiorno @alexps81

                              E' giusto con una sola eccezione: la cella della quarta riga, come formula, tiene conto ancora della prima riga e non dell'ultima (tiene conto della prima selezione di 3 righe e non dell'ultima selezione di 3 righe), ma a me serve che tenga conto dell'ultima riga aggiunta.

                               

                              Spero di essermi spiegato, nel caso provo a fare un esempio

                              #41482 Score: 0 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                 la cella della quarta riga, come formula, tiene conto ancora della prima riga e non dell'ultima

                                Si si quello lo immaginavo già. Il mio esempio era solo per capire se il risultato del CopiaIncolla doveva essere così. Può essere che basti cambiare il riferimento delle celle da Assoluto a Relativo (togliere il simbolo $ prima del numero del rigo per interni). Cmq appena posso gli do uno sguardo.

                                 

                                Se per caso riesci a caricare un nuovo allegato originale (ma senza dati sensibili) come esempio è meglio, così abbiamo uno scenario reale con tutte le formule funzionanti. Quello che ho io ha perso tutti i riferimenti avendo effettuato tutti i CopiaIncolla di prova.

                                Magari si può ragionare a far lavorare solo il codice senza usare le formule.

                              Login Registrati
                              Stai vedendo 25 articoli - dal 1 a 25 (di 35 totali)
                              Rispondi a: Macro per aggiungere più righe alla volta per più fogli (Excel)
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: