Sviluppare funzionalita su Microsoft Office con VBA ripulire celle anche se varia il range

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

    Dodi
    Partecipante
      2 pts

      Buon pomeriggio a tutti

      mi ritrovo a richiedere il vostro aiuto. 

       

      il file che allego mi serve per registrare le ore dei dipendenti e dei costi vitto e alloggio.

      ho creato una macro che mi duplica il foglio e con l'ImputBox attribuisco al foglio duplicato il nome che voglio.

      e fin qui tutto ok. 

      poi ho creato una macro che al duplicare del foglio (vedere Modulo 2) mi ripulisce l'area  evidenziata in giallo. 

      e anche qui tutto funziona tutto bene. 

      ora vi spiego di cosa mi occorre. 

      se l'area gialla cambia, cioè se inserisco delle righe, 

      al cliccare sul comando copia foglio gli ultimi dati al difuori del range del modulo 2 non mi si ripuliscono; 

      quello che mi occorre, e se qualcuno di voi e così gentile da darmi una mano. 

      mi occorre un codice che anche se inserisco delle righe mi ripulisce i campi tutti i campi dell'intervallo in giallo. 

      premetto che le celle le ho evidenziate per far capire l'area di riferimento. 

      spero di esser stato chiaro 

       ringrazio 

       

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

      dodi

        ho omesso di dire che deve ripulire i campi della copia del foglio e non del foglio di origine. 

        e premetto anche che una volta creato la copia del foglio andrò sempre in avanzamento senza più  passare dal foglio originale. 

        con il comando copia foglio mi riporto dietro sempre il comando. 

        quindi la pulizia delle celle deve avvenire sulla copia del foglio che creo. 

         

        forse non ero stato chiaro nell'esporre di cio che mi occorre.

        scusate

         

        #23647 Score: 0 | Risposta

        PMC77
        Partecipante
          18 pts

          Invece di mettere un range fisso da cella "X" a cella "Y" devi trovare un modo di capire quale sia l'area da copiare e poi pulire (un ciclo di scansione delle righe che le copia o pulisce fino che … ???)

          Paolo

          #23669 Score: 0 | Risposta

          Dodi

            Ciao PMC77
            Ti ringrazio per aver risposto. Il problema e che copio l'intero foglio. E qusta cosa si ripete ogni mese. Ma le righe possono aimentare in funzione degl operai presenti in cantiere. Quindi il range puo cambiare in piu o in meno.
            Per quello mi serviva, se c'era un modo. Un codice che riconosce il range da ripulire. Per far capire avevo evidenziato in gisllo le celle xhe devo ripulire ogni volta che faccio una copi del foglio.
            Ma come detto quel range puo cambiare. Sarebbe interessante avere un codice che blocca la cella iniziale e finale e se inserisco righe il range si amplia

            #23673 Score: 0 | Risposta

            albatros54
            Moderatore
              89 pts

              la butto la, potresti settare un range sfuttando il colore delle celle(giallo)

               

              Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
              Sempre il mare, uomo libero, amerai!
              ( Charles Baudelaire )
              #23674 Score: 0 | Risposta

              Dodi

                Ciao Albatros.
                Le celle le ho evidenziate per far capire. Ma il file e struttirato che a fine mese filtro per colore. E quindi il riquadrp che ho evidenziato a alcune righe colorate. Io ho evidenziato in giallo solo per far capire il range che mi interessa ripulire. Ma come detto alcune righr hanno gia una formattazione a colori. Per aiutarmi a filtrare alcuni dati a fine mese.

                #23676 Score: 0 | Risposta

                albatros54
                Moderatore
                  89 pts

                  tu nel file che hai postato, il range di color giallo arriva fino alla riga 154, quando inserisci nuovi dati questa riga si sposta automaticamente verso il basso ho l'aggiungi tu?

                   

                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  #23678 Score: 0 | Risposta

                  Dodi

                    Ciao Albatros. Grazie per le risposte.
                    In pratica se aggiungo righe facciamo un esempio. Inserisco 2 righe ovvio che si sposta tutto in giu. E se ho dei dati nell'ultima riga che era la 154 e ora e diventata 156 per il codice che ho scritto nel modulo 2 la pulizia si ferma fino alla riga 154.
                    Quindi qulo che mi serviva era se c'era un modo per riconoscere l'ultima riga e se nel range inserivo le righe la pulizia deve essere per l'intero range modificato

                    #23679 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      dal file che hai allegato, si vede che tutte le righe della colonna C  contengono un valore, se è cosi , potresti cercare l'ultima riga della colonna C è settare il range di conseguenza

                       

                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )
                      #23686 Score: 0 | Risposta

                      Dodi

                        Potresti essere cosi gentile per
                        Darmi delle ind8cazioni o meglio dire se puoi formularmi il codice.
                        Perche ho capito cosa vuoi dire ma non so come fare a far capire al codice poi fino a che colonna ripulire.

                        #23701 Score: 0 | Risposta

                        albatros54
                        Moderatore
                          89 pts

                          se tu trovi l'ultima cella della colonna C che contiene un dato tipo

                          finalrow=cells(rows.count,3).end(xlup).row

                          e dopo setti un range che va dalla  cella "D9" alla alla "AH &finalrow)

                           

                           

                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                          Sempre il mare, uomo libero, amerai!
                          ( Charles Baudelaire )
                          #23704 Score: 0 | Risposta

                          Dodi

                            Mmmmm.
                            Sei molto gentile a darmi le dritte.
                            Ma te ne sarei molto grato se mi
                            Dai il codice completo. Percge non saprei come individuare il range.
                            Onestamemte non so come fare in quanto dilettante.
                            Te ne sarei davvero grato se mi aiuti con l'intero codice.

                            Grazie mille sempre per la vostra disponibilita' e aiuto.

                            #23710 Score: 0 | Risposta

                            albatros54
                            Moderatore
                              89 pts

                              Allora:

                              ho modificato la tua routine come il codice che ti posto

                              Sub RipulisciFoglio()
                                  lastrow = Cells(Rows.Count, 3).End(xlUp).Row
                                  totale = 0
                                  For a = 8 To lastrow
                                      If Cells(a, 4).Interior.ColorIndex = 6 Then
                                          totale = totale + 1
                                      End If
                                  Next
                                  totale = totale + 7
                                  Range("$D$7:AH$" & totale).Select
                                  Selection.ClearContents
                                  ActiveWindow.SmallScroll Down:=-135
                                  Range("D6").Select
                              
                              End Sub

                              presupposto importane è che le celle siano che tu vuoi cancellare siano di colore giallo, altrimenti devi sostituire il valore colorindex.

                              lastrow trova l'ultima cella della colonna "C" che contiene un dato, ho inizializzato una variabile "totale" a zero, mi servira per memorizzare il numero delle celle di color giallo,poi ho inserito un ciclo che va dalla riga"8" al valore lastrow, se il colore della cella corrisponde al colore giallo(in questo caso)aumenta di una unita la variabile "totale", quando ha finito il ciclo, per trovare l'ultima cella di color giallo, aumento di "7" la variabile "totale", ha questo punto setto il range col valore della riga "totale".

                              Se ho capito, fai sapere

                               

                               

                              Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                              Sempre il mare, uomo libero, amerai!
                              ( Charles Baudelaire )
                              #23712 Score: 0 | Risposta

                              Luca73
                              Partecipante
                                58 pts

                                Ciao Se il range varia di dimensione ma la struttura è sempre la stessa io partirei dal basso colonna A e salirei con un end(xlup) e poi con un offset mi sposterei fino a cella che mi interessa.

                                Quanto sopra vale se la parte sopra e sotto le celle in giallo non cambia

                                Sub LucaCanc()
                                With Sheets("Originale")
                                    .Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Select
                                    '.Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).ClearContents
                                End With
                                End Sub
                                

                                 

                                #23713 Score: 0 | Risposta

                                albatros54
                                Moderatore
                                  89 pts

                                  il codice di luca(saluto), mi va in errore, sostituendo la riga

                                  .Range("AH8", .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Select

                                  con

                                  .Range(.Cells(8, 34), .Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).Select

                                  funziona.

                                   

                                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                  Sempre il mare, uomo libero, amerai!
                                  ( Charles Baudelaire )
                                  #23714 Score: 0 | Risposta

                                  PMC77
                                  Partecipante
                                    18 pts

                                    Come vedi da solo nel primo caso metti come range "AH8" - "n"

                                    Nel secondo "8" - "34"

                                    Io toglierei "AH"  dal pezzo sopra

                                    #23717 Score: 0 | Risposta

                                    Luca73
                                    Partecipante
                                      58 pts

                                      Ciao,

                                      Io l'avevo testato (e l'ho testato or ora di nuovo) e funzionava, comunque la soluzione di Albatros (che ringrazio per la correzione di cui contraccambio il saluto) è equivalente e inoltre più bella da vedere in quanto omogenea...  

                                      Non è la prima volta che uso quel tipo di scrittura e non mi aveva mai dato problema,.....Chissa perchè???  

                                      Aggiungo inoltre di fare particolare attenzione all'offset in quanto di primo approccio avevo spostato di 3 righe in quanto da "A" a "D" invece l'offset vuole solo un 1 in quanto si parte da una cella Unita(A-B-C).

                                      Ciao

                                      Luca

                                      #23718 Score: 0 | Risposta

                                      dodi

                                        Ciao  Albatros

                                        il codice che mi hai scritto funziona perfettamente, 

                                        ma come avevo scritto ; il range che io ho evidenziato in giallo era solo  per far capire in quale area il comando deve ripulire, 

                                        in pratica le celle e righe nel range che io ho evidenziato in giallo hanno una formattazione diversa e cioè alcune righe sono di colore diverso, perchè  a  fine mese devo filtrare alcuni dati e come ricerca  uso il comando  filtra per colore. 

                                        quindi il codice che hai scritto te va bene così come l'hai formulato, ma si può non far riferimento al colore? 

                                         

                                        per Luca che ringrazio; il codice che hai scritto te invece fa sempre riferimento al foglio di origine (Originale) invece come detto ogni mese vado in avanzamento senza ripassare più dal foglio iniziale ( originale) 

                                         

                                        ringrazio tutti per l'aiuto, ma il codice che più assomiglia alla mia esigenza è quello di Albatros, con l'unica eccezione di evitare   di riconoscere il range tramite colore. 

                                         

                                        si può fare qualcosa?  o meglio dire 

                                        questa parte di codice by passarlo?

                                        If Cells(a, 4).Interior.ColorIndex = 6 Then totale = totale + 1 End If

                                        evitare di riconoscere il range tramite colore?

                                        ma riconoscere solo il range?  

                                        grazie mille intanto 

                                         

                                        #23720 Score: 0 | Risposta

                                        Luca73
                                        Partecipante
                                          58 pts

                                          Ciao ho visto ora la  tua macro che lavora sul foglio aativo pertanto basta modificare la macro come:

                                          `Sub LucaCanc()
                                          Range(Cells(8, 34), Cells(Rows.Count, 1).End(xlUp).Offset(-11, 1)).ClearContents
                                          End Sub`
                                          #23721 Score: 0 | Risposta

                                          Dodi
                                          Partecipante
                                            2 pts

                                            Ciao Luca il tuo codice mi va in errore, sbaglio io qualcosa? 

                                            potresti formularmi il codice corretto? 

                                            grazie

                                             

                                             

                                             

                                            #23722 Score: 0 | Risposta

                                            Luca73
                                            Partecipante
                                              58 pts

                                              Togli il punto davanti a cells Me lo sono dimenticato nella modifica..

                                               

                                              #23723 Score: 0 | Risposta

                                              dodi

                                                Grazie infinitamente, 

                                                funziona tutto perfettamente. 

                                                ringrazio tutti per l'aiuto 

                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: ripulire celle anche se varia il range
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: