Sviluppare funzionalita su Microsoft Office con VBA togliere colore riga non vuota

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

    Ciao a tutti.

    Nella macro nel workbook allegato nel foglio1 c'è una macro che se aggiungo un valore nella colonna B toglie il colore alla riga.

    E' possibile che se tolgo un valore dalla colonna B mi rimette il colore?

     

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then
      
           Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone
     
    End If
    
    End Sub
    
    Allegati:
    You must be logged in to view attached files.
    #47142 Score: 0 | Risposta

    gianfranco55
    Partecipante
      90 pts

      ciao

      Option Explicit
      
      Private Sub Worksheet_Change(ByVal Target As Range)
      
      If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then
      If Target.Value <> "" Then
        
             Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone
             Else
             Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234)
       End If
      End If
      
      End Sub
      #47143 Score: 0 | Risposta

      alexps81
      Moderatore
        55 pts

        Ciao @frank_ciccio

        hai una serie di richieste ancora aperte. In quelle in cui hai avuto riscontro positivo, dovresti segnarle come RISOLTO

        Altrimenti c'è rischio che ti vengano bloccate le nuove richieste.

        Grazie.

        #47144 Score: 0 | Risposta

        Ciao mi dà tipo non corrispondente qui

        If Target.Value <> "" Then

        non nel file allegato, ma in un'altro.

         

         

        #47145 Score: 0 | Risposta

        gianfranco55
        Partecipante
          90 pts

          ciao

          mi dispiace

          non nel file allegato, ma in un'altro.

          mica abbiamo visto l'altro 

          la risposta è inerente al file che hai allegato

          dovresti allegare i file esattamente come sono nell'originale

           

          alex

          fermo restante che hai ragione

          Altrimenti c'è rischio che ti vengano bloccate le nuove richieste.

          che mi risulti sono regole di altri forum non di questo

          (onestamente ne conosco solo uno che applica il blocco)

          sempre che non mi sia sfuggito qualche cosa del regolamento

          il paragrafo 7 e 12 non parlano di blocchi ma invitano a chiudere le discussioni

          #47146 Score: 0 | Risposta

          alexps81
          Moderatore
            55 pts

            gianfranco55 ha scritto:

            sono regole di altri forum non di questo

            Be' in realtà sono regole presenti anche in questo forum. Poi non ci sono vere e proprie sanzioni...infatti ho scritto che dovrebbe chiudere le altre. Di certo applicare un esclusione dal forum è evidente che sia eccessivo, ma il blocco temporale di una nuova richiesta è per far intendere che bisogna dare prima un senso a chi ha offerto del suo tempo al richiedente e al forum.

            #47148 Score: 0 | Risposta

            Il file è un file aziendale

            #47150 Score: 0 | Risposta

            gianfranco55
            Partecipante
              90 pts

              ciao

              Il file è un file aziendale

              verifica che le celle siano realmente vuote

               

              alex

              c'è un malinteso

              mai pensato all'esclusione da forum ma al blocco temporaneo della nuova domanda.

              gentilmente però mi dici in che articolo è scritto?

              (ripeto che hai ragione e richiedere la spunta sul RISOLTO)

              #47152 Score: 0 | Risposta

              alexps81
              Moderatore
                55 pts

                Ciao @gianfranco55

                cerco di spiegarmi meglio...purtroppo dietro a una tastiera non è mai semplice   

                Quando hai detto: "che mi risulti sono regole di altri forum non di questo"...non so a quale forum ti riferisca ma se è quello che penso io, in verità non è proprio vero. Nel senso che non sono regole ma c'è un giudizio insindacabile dei moderatori.

                In un regolamento, qualunque esso sia, in parallelo agli articoli, ci devono essere delle sanzioni...altrimenti che regolamento sarebbe?

                Nei circa 20 articoli del regolamento di questo forum, come hai ben citato, ci sono i seguenti:

                7) Dare un riscontro sulla domanda
                Non lasciare la tua domanda "in sospeso" dopo aver trovato la soluzione giusta. Una volta trovata una risposta utile, la discussione va marcata come "risolta" premendo l'apposito pulsante in fondo alla discussione.

                -------------------------------------------------------------------------------------------------------------------------

                12) Chiudere le discussioni aperte
                Quando una discussione è chiusa, è bene impostarla su "Risolta" mediante l'apposito menu a tendina in cima alla prima discussione. Solo gli utenti registrati possono marcare come risolta una discussione; pertanto gli utenti non registrati dovranno chiedere che ciò venga fatto per loro. 

                Quindi il regolamento prevede che l'OP debba ottemperare a quanto scritto, ma se non lo fa dovrebbe incorrere in una sanzione, proprio perché ha violato un regolamento. Ora, sempre nel regolamento, c'è questo articolo:

                15) Mutua collaborazione
                Una Comunità è un luogo virtuale dove “convivono” centinaia di persone, per questo sono necessarie delle regole.
                I Moderatori e, più in generale il gruppo di Staff, composto da Amministratore e Moderatori, hanno l’ingrato compito di far rispettare il presente regolamento.
                Tutti sono tenuti ad ottemperare a quanto richiesto dallo Staff, perché spesso dietro una osservazione ci sono delle motivazioni anche tecniche di gestione del portale. E’ questo un impegno che il Team porta avanti nel tempo libero. Essere collaborativi è utile perché fa perdere meno tempo a tutti e consente una gestione efficace e puntuale della Comunità di ExcelVBA.

                Come vedi in grassetto ho evidenziato il fatto che le regole vanno rispettate e che i Moderatori hanno il compito di farle rispettare.

                Siccome non esistono vere e proprie sanzioni ma allo stesso tempo c'è bisogno di farle rispettare, allora i Moderatori possono applicare, laddove sia necessaria, la giusta sanzione, proprio per far rispettare il regolamento.

                Gli unici modi per poterlo fare sarebbero:

                - avviso

                - richiamo

                - blocco della richiesta

                - blocco dell'utente

                - cancellazione dell'utente

                Quindi in conclusione, non esistono vere è proprie sanzioni scritte in questo forum ma si ha comunque facoltà, in base all'art. 15, di trovare un modo per farle rispettare...chiaramente partendo da un semplice avviso, così com'è stato fatto.

                Scusa la disamina prolissa ma volevo essere il più chiaro possibile.   

                #47153 Score: 0 | Risposta

                Ho estrapolato una parte di file e nell'allegato ora ci sono 2 macro.

                La macro che crea problemi alla macro di gianfranco55 post#47142 è

                eliminarigaselezionata1_input

                nel modulo1.

                Questa macro serve per eliminare righe selezionate.

                (seleziona una riga nel foglio1 > clicca nel pulsante giallo)

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

                gianfranco55
                Partecipante
                  90 pts

                  ciao

                  è perchè eliminando una riga vengono toccate più celle

                  e mandano in debug la macro messa nel foglio1

                  (if not intersect.........va in debug se selezioni più celle)

                  ovviamo al problema così

                  `Option Explicit
                  
                  
                  Private Sub Worksheet_Change(ByVal Target As Range)
                  On Error GoTo ex
                  
                  If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then
                  
                  If Target.Value <> "" Then
                    
                         Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone
                         Else
                         Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234)
                   End If
                  End If
                  ex:  Exit Sub
                  End Sub`

                  ho visto che hai protetto il foglio

                  ma se la colonna B deve essere usata perchè non la escludi dalla protezione

                  poi il pulsante ha scritto cancella ma di fatto elimina non cancella

                   

                  #47156 Score: 0 | Risposta

                  gianfranco55
                  Partecipante
                    90 pts

                    ciao Alex

                    tutto giusto

                    a dire il vero l'articolo 1 lo prevede ma ma parla di off topic

                    1) Rimanere in argomento
                    Messaggi concernenti argomenti fuori tema (OT, Off Topic) sono tollerati, ma senza abusarne.
                    I Moderatori sono autorizzati ad intervenire per reprimere i comportamenti scorretti (con il blocco della discussione o, nel caso estremo, anche con la cancellazione dei messaggi interessati).

                     

                    ma è la prima volta che leggo su questo forum un leggerissimo

                    avvisto di blocco se non si chiudono le discussioni.

                     

                    Io onestamente non ho mai bloccato nessuno passata una settimana  chiudo io la discussione.

                    (anche altri fanno come me specialmente in microsoft)

                     comunque non è importante è solo il mio pensiero

                     

                     

                     

                     

                    #47158 Score: 0 | Risposta

                    Ora con questa funzione nella macro

                    On Error GoTo ex

                    non funziona più correttamente, non toglie il colore ad ogni modifica delle celle colonna B

                     

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

                    gianfranco55
                    Partecipante
                      90 pts

                      ciao

                      certo che non capisco perchè se elimini la riga

                      e la cella B è vuota non colori di grigio

                       

                      #47162 Score: 0 | Risposta

                      Nel file post#47158

                      colore_riga_input_2

                      ho aggiunto una macro

                      ordina_ascendente_archivio_input

                      per elimiare la riga vuota dopo aver cliccato nel pulsante giallo, questa sale di un posto.

                      Ora se scivi in una cella vuota della colonna B questa non cambia di colore, resta grigia

                       

                      #47163 Score: 0 | Risposta

                      gianfranco55
                      Partecipante
                        90 pts

                        ciao

                        è la protezione  che impedisce  la macro

                        nel tuo file metti

                         

                         

                        Private Sub Worksheet_Change(ByVal Target As Range)
                        On Error GoTo ex
                        
                        
                        If Not Intersect(Target, Range("B5:B" & Rows.Count)) Is Nothing Then
                        ActiveSheet.Unprotect "987654"
                        
                        If Target.Value <> "" Then
                          
                               Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = xlNone
                               Else
                               Range("A" & Target.Row & ":Q" & Target.Row).Interior.Color = RGB(234, 234, 234)
                             ActiveSheet.Protect "987654"
                         End If
                        End If
                        ex:  Exit Sub
                        End Sub

                         

                        #47164 Score: 0 | Risposta

                        Si ora toglie il colore grigio ad ogni inserimento.

                        Un problema se ora eliminino una riga, questa sale di un posto ma no si sposta la parte di range grigia che è vuota.

                        Resta una riga bianca o più righe bianche se elimino più di una riga. Deve restare tutto grigio dopo l'ultima riga non vuota.

                        #47166 Score: 0 | Risposta

                        gianfranco55
                        Partecipante
                          90 pts

                          ciao

                          prova questa e si sistema la colorazione

                          `Rows(n).EntireRow.ClearContents 'elimina solo una riga
                          Rows(n).EntireRow.Interior.Color = xlNone 'toglie colori
                          Range(Cells(n, 1), Cells(n, 17)).Interior.Color = RGB(234, 234, 234)`
                          Allegati:
                          You must be logged in to view attached files.
                          #47169 Score: 0 | Risposta

                          LucaSR
                          Partecipante
                            15 pts

                            Il maestro delle formule @gianfranco55 è passato al VBA   

                            #47171 Score: 0 | Risposta

                            gianfranco55
                            Partecipante
                              90 pts

                              ciao

                              Luca

                              è solo un'eccezione alla regola  

                              se sono cosette semplici riesco a smanettarci

                               

                               

                              #47173 Score: 0 | Risposta

                              Oscar
                              Partecipante
                                45 pts

                                Io avrei lasciato tutto come all'inizio e avrei modificato solo la macro ordina

                                 

                                `Sub ordina_ascendente_archivio_input() 'data creazione
                                Dim I
                                'foglio archivio input abbin. elimina righe
                                
                                    ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Clear
                                    ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Add Key:=Range( _
                                        "B5:B303"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                                        xlSortNormal
                                    With ActiveWorkbook.Worksheets("Archivio_input").Sort
                                        .SetRange Range("A4:Q303")
                                        .Header = xlYes
                                        .MatchCase = False
                                        .Orientation = xlTopToBottom
                                        .SortMethod = xlPinYin
                                        .Apply
                                    End With
                                    
                                 For I = 5 To 303
                                     If Range("B" & I) = "" Then
                                        Range("A" & I & ":Q" & I).Interior.Color = RGB(234, 234, 234)
                                 End If
                                 Next
                                 
                                 ActiveSheet.Protect "987654"
                                End Sub`
                                Allegati:
                                You must be logged in to view attached files.
                                #47180 Score: 0 | Risposta

                                Grazie oscar e  gianfranco55 è ok per tutti e due.

                                #47181 Score: 0 | Risposta

                                alexps81
                                Moderatore
                                  55 pts

                                  Ciao @frank_ciccio

                                  secondo me non hai bisogno di tutto quel codice. Ti basta la Formattazione Condizionale.

                                  Allora prova a seguire questi passaggi:

                                  1) Elimina innanzitutto ogni codice negli eventi dei Fogli

                                  2) Seleziona l'intervallo A5:Q fino alla fine del foglio (per farlo velocemente, dopo che hai selezionato il range A5:Q5, tieni premuto SHIFT + CTRL e premi la freccia direzionale verso il basso. Premi tante volte finché non arrivi all'ultimo rigo del Foglio.

                                  3) Selezionato il range, colora il fondo di grigio

                                  4) Sempre a range selezionato, vai in scheda Home --> Formattazione Condizionale --> Nuova Regola --> Scrivi questo =$B5<>"" nel rigo delle formule --> Poi premi su "OK"

                                  adesso vedrai che quando scrivi qualcosa in una cella incolonna "B" , quel rigo, da A a Q, diventa bianco. Se cancelli ciò che è scritto, sempre in colonna "B", il rigo torna grigio.

                                  5) Inserisci questo codice al posto di quello che hai già in tuo possesso:

                                  Option Explicit
                                  
                                  Sub eliminarigaselezionata1_input()
                                  Dim avviso As Byte
                                  
                                  If ActiveCell.Row < 5 Then
                                      MsgBox "Le prime 4 righe non possono eliminare!!!", vbCritical, "ATTENZIONE!"
                                      Exit Sub
                                  End If
                                  
                                  If Trim(Range("A5")) = "" Then
                                      MsgBox "Non c'è niente da eliminare!", vbExclamation, "AVVISO"
                                      Exit Sub
                                   End If
                                  
                                  avviso = MsgBox("elimino riga < " & ActiveCell.Row & " > selezionata?", vbYesNo + vbQuestion, "ATTENZIONE!")
                                  If avviso = vbNo Then Exit Sub
                                  
                                  Application.ScreenUpdating = False
                                  ActiveSheet.Unprotect "987654"
                                  
                                  ActiveCell.EntireRow.ClearContents 'elimina solo una riga
                                  
                                  Call ordina_ascendente_archivio_input
                                  
                                  ActiveCell.Offset(1).Select '<-- nuova riga inserita
                                  
                                  ActiveSheet.Protect Password:="987654", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
                                  
                                  Application.ScreenUpdating = True
                                  
                                  End Sub
                                  
                                  Sub ordina_ascendente_archivio_input() 'data creazione
                                  'foglio archivio input abbin. elimina righe
                                  
                                      ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Clear
                                      ActiveWorkbook.Worksheets("Archivio_input").Sort.SortFields.Add Key:=Range( _
                                          "B5:B303"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                                          xlSortNormal
                                      With ActiveWorkbook.Worksheets("Archivio_input").Sort
                                          .SetRange Range("A4:Q303")
                                          .Header = xlYes
                                          .MatchCase = False
                                          .Orientation = xlTopToBottom
                                          .SortMethod = xlPinYin
                                          .Apply
                                      End With
                                      
                                  End Sub

                                  Poi altra cosa...come avviene la protezione del Foglio? Lo fai manualmente la prima volta oppure all'avvio del File nell'evento Open del WorkBook c'è l'istruzione che protegge?

                                  Se così fosse, puoi evitare ogni qual volta di inserire nelle varie macro Unprotect e poi Protect.

                                  Quando fai ricorso al metodo Worksheet.Protect, tra i parametri opzionale esiste UserInterfaceOnly che se lo imposti a TRUE fai sì che il Foglio rimane comunque protetto ma le macro restano libere di agire su di esso. Così ti eviti ogni volta di sproteggere e proteggere il Foglio.

                                  #47182 Score: 0 | Risposta

                                  gianfranco55
                                  Partecipante
                                    90 pts

                                    🤣

                                    lo sapevo che smanettando la macro

                                    attivavo i VBAISTI😂😂😂😂

                                    #47201 Score: 0 | Risposta

                                    Grazie anche a te alexps81

                                  Login Registrati
                                  Stai vedendo 25 articoli - dal 1 a 25 (di 30 totali)
                                  Rispondi a: togliere colore riga non vuota
                                  Gli allegati sono permessi solo ad utenti REGISTRATI
                                  Le tue informazioni: