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

    Ciao a tutti.

    Questa macro in thisworkbook

     

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    'per riga attiva colorata con formattazione nei fogli

    Target.Calculate '<<< per riga attiva colorata con formattazione

    End Sub

     

    abbinata poi in formattazione condizionale

    =CELLA("RIGA")=RIF.RIGA()

    è per evidenziare la riga in cui si lavora.

    E' possibile se per esempio ho selezionato 3 righe queste vengono evidenziate?

    Ora funziona solo per una riga.

    #45655 Score: 0 | Risposta

    alexps81
    Moderatore
      55 pts

      Buonasera @Franck_Ciccio,

      ma questo Thread fa per caso riferimento a questo indicato qui in basso sempre creato da te?

      modifica macro per controllo righe selezionate

      #45660 Score: 0 | Risposta

      Ciao alexis81,                                                                                                                                                                                       quello che chiedo in questo thread poi lo devo addattare con la macro dell'altro thread.                                               Siccome il range che devo controllare è di moltissime righe per velocizzare chiedevo se possibile modificare la macro, che ho inserito in questo thread, per evidenziare le righe.

      #45667 Score: 0 | Risposta

      alexps81
      Moderatore
        55 pts

        Prova questo codice e vedi se può andar bene. Elimina però la Formattazione Condizionale

        Option Explicit
        
        Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        If Target.EntireRow.Interior.ColorIndex <> 36 Then
            Target.EntireRow.Interior.ColorIndex = 36
        Else
            Target.EntireRow.Interior.ColorIndex = xlNone
        End If
        
        End Sub
        

        se vuoi un colore diverso consulta l'indice dei ColorIndex. Trovi la tabella sul Web. Oppure se cerchi un colore particolare utilizza il metodo RGB(red, green, blue) così lo crei come preferisci.

        #45668 Score: 0 | Risposta

        Grazie alexps81 non è quello che pensavo.

        La riga viene evidenziata da A  fino alla fine XFD, invece come la formattazione vorrei solo per righe presenti.

         

        #45669 Score: 0 | Risposta

        alexps81
        Moderatore
          55 pts

          Allora si deve impostare un range. Qual è la zona delle righe che t'interessa evidenziare?

          #45670 Score: 0 | Risposta

          Come per la formattazione è variabile secondo il range delle righe.

          Ora è A2:I500

          #45673 Score: 0 | Risposta

          alexps81
          Moderatore
            55 pts

            Prova questo allora:

            Option Explicit
            
            Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
            Dim zona As Range
            Dim ur As Long
            
            If Target.Count > 1 Then Exit Sub
            
            ur = Cells(Rows.Count, "A").End(xlUp).Row
            
            Set zona = Range("A2:I" & ur)
            
            If Not Intersect(Target, zona) Is Nothing Then
            
                If Target.Interior.ColorIndex <> 36 Then
                    Range(Cells(Target.Row, "A"), Cells(Target.Row, "I")).Interior.ColorIndex = 36
                Else
                    Range(Cells(Target.Row, "A"), Cells(Target.Row, "I")).Interior.ColorIndex = xlNone
                End If
            
            End If
            
            Set zona = Nothing
            
            End Sub
            #45675 Score: 0 | Risposta

            alexps81
            Moderatore
              55 pts

              Se la vuoi leggermente più dinamica prova questa:

              Option Explicit
              
              Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
              Dim zona As Range
              Dim ur As Long
              
              If Target.Count > 1 Then Exit Sub
              
              ur = Cells(Rows.Count, "A").End(xlUp).Row
              
              Set zona = Range("A2:I" & ur)
              
              If Not Intersect(Target, zona) Is Nothing Then
              
                  If Target.Interior.ColorIndex <> 36 Then
                      Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 36
                  Else
                      Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = xlNone
                  End If
              
              End If
              
              Set zona = Nothing
              
              End Sub
              

              in pratica se vuoi estendere la lunghezza del rigo oltre la colonna "I", ti basta modificare la variabile ZONA. Stesso discorso se vuoi ridurre la lunghezza.

              #45676 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                frank_ciccio ha scritto:

                abbinata poi in formattazione condizionale

                =CELLA("RIGA")=RIF.RIGA()

                è per evidenziare la riga in cui si lavora.

                E' possibile se per esempio ho selezionato 3 righe queste vengono evidenziate?

                Potresti allegare un file di esempio (coerente con l'originale) per capire l'ambiente in cui stiamo operando (range, formati celle particolari,  etc.).

                #45679 Score: 0 | Risposta

                Ciao a tutti.

                Grazie alexps81 la tua macro funziona, solo che le righe si evidenziano per tutti i fogli.

                Con la formattazione condizionale che ho postato in post#1 e che è anche nell'allegato si può fare per i fogli interessati.

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

                alexps81
                Moderatore
                  55 pts

                  Ciao,

                  Be' certo...tu all'inizio avevi detto che Questa macro in ThisWorkbook...

                  Io mi sono attenuto alla richiesta, ma nulla ti vieta di spostare la macro direttamente nel SelectionChange di un Foglio specifico.

                  Ora sono sprovvisto di PC, ma dovresti essere in grado di risolvere in autonomia.

                  Fammi sapere...poi ho letto l'altra richesta in merito al conteggio delle righe selezionate. Ma la devi inglobare in questa macro? Se è così poi ti giro un esempio appena riesco.

                  #45682 Score: 0 | Risposta

                  scossa
                  Partecipante
                    37 pts

                    Una domanda: che la riga selezionata resti evidenziata anche quando ne selezioni un'altra è una cosa voluta (dopo un po' avrai tutto evidenziato)?

                    #45684 Score: 0 | Risposta

                    Controllando bene la macro di alexps81 per togliere il colore bisogna ricliccare nelle righe colorate nel foglio1

                    Nel foglio2 c'è la formattazione condizionale, per una sola riga. Qui ad ogni spostamento c'è solo 1 riga evidenziata, quella attiva.

                    L'ideale sarebbe che anche per la macro di alex che si sia sempre  una riga evidenziata quella attiva e che se poi seleziono più righe queste siano evedenziate. Tolto la selezione delle righe sia poi evidenziata la riga attiva

                     

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

                    scossa
                    Partecipante
                      37 pts

                      frank_ciccio ha scritto:

                      Tolto la selezione delle righe sia poi evidenziata la riga attiva

                      Cosa significa "tolto la selezione"?

                      Mi spieghi passo-passo come selezioni più righe (mouse?, frecce?, menu?)

                      #45687 Score: 0 | Risposta

                      Nell'ultimo allegato foglio2 clicco nelle celle o numero riga questa si evidenzia.
                      Di solito per selezionare più righe si clicca con CTRL.
                      Io vorrei che siano poi evidenziate oltre alla riga attiva anche le altre che edenzio cliccando nel numero riga con CTRL , poi ricliccando in un'altra riga resta solo 1 riga evidenziata.

                      #45689 Score: 0 | Risposta

                      Raffaele53
                      Partecipante
                        21 pts

                        Ciao a tutti, approfitto della presenza di scossa per fargli vedere una mia problematica inerente al quesito. Usando questo VBA, visualizzo le righe RrI + RrF con valori giusti (posso selezionare diverse righe oppure selezionare una cella) però mi colora sempre una riga sotto e non capisco il motivo???

                        Option Explicit
                        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                        Dim zona As Range
                        Dim ur As Long, RrI As Long, RrF As Long
                        ur = Cells(Rows.Count, "A").End(xlUp).Row
                            Set zona = Range("A2:R" & ur)
                            zona.Interior.ColorIndex = xlNone
                            If Not Intersect(Target, zona) Is Nothing Then
                                RrI = Target.Offset(0, 0).Row
                                RrF = RrI + (Selection.Rows.Count - 1)
                                zona.Rows(RrI & ":" & RrF).Interior.ColorIndex = 6
                            End If
                        Set zona = Nothing
                        End Sub
                        #45690 Score: 0 | Risposta

                        In rete ho trovato questa macro che è quasi come cerco io, solo che funziona per tutta la riga io cerco invece per il range presente e poi questa toglie tutti i colori delle celle.

                        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                        
                        Cells.Interior.ColorIndex = xlNone
                        With Selection
                        .EntireRow.Interior.ColorIndex = 40
                        End With
                        Selection.Interior.ColorIndex = xlNone
                        
                        End Sub
                        #45695 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          55 pts

                          Ciao @raffaele53,

                          provo a risponderti io   

                          Con il fatto che hai creato un range "zona" che va dal rigo 2 a ur allora per l'istruzione che hai scritto (zona.Rows(RrI & ":" & RrF).Interior.ColorIndex = 6)...se per caso selezioni il rigo 7, per il discorso di cui sopra, il settimo rigo risulta essere l'ottavo...perché il rigo 1 parte dal 2 (scusa il giro di parole). Per intenderci...se zona = Range("A4:R" & ur) ti ritroveresti 3 righe sotto.

                          In base alla variabile zona...io suggerisco di modificare il codice così:

                          zona.Rows(RrI - 1 & ":" & RrF - 1).Interior.ColorIndex = 6

                           

                          #45696 Score: 0 | Risposta

                          alexps81
                          Moderatore
                            55 pts

                            Ciao @franck_ciccio,

                            ti giro un codice ma prima di cantar vittoria vorrei il benestare di @scossa   

                            In pratica attraverso un API (GetKeyState) andiamo ad intercettare il tasto CTRL premuto. Io speravo che funzionasse tenendo premuto CTRL e selezionando le righe ma purtroppo così non è forse perché va in conflitto con il fatto che nativamente premendo CTRL e facendo click con il mouse su una cella, non fai altro che selezionarla in aggiunta a quella/e già selezionata.

                            Ora ho notato che se tieni premuto contemporaneamente SHIFT + CTRL e click del mouse su una cella, allora la macro funziona. Però ti dico la verità...non so come mai e sinceramente la cosa di non saperlo non mi fa impazzire...perciò chiedo lumi a qualche esperto in materia.

                            Cmq tu per ora prova e dimmi cosa ne pensi. In pratica, fai click con il mouse su una cella e il rigo si seleziona, se fai click su un'altra cella, succede che il rigo selezionato si deseleziona e il rigo della cella selezionata si seleziona. Se invece tieni premuto SHIFT + CTRL e fai click su un'altra cella allora il rigo precedente rimane selezionato e in più si seleziona anche il rigo della nuova cella selezionata.

                            Metti questo in un MODULO:

                            Option Explicit
                            
                            'GetKeyState
                            Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

                            e quest'altro nel foglio:

                            Option Explicit
                            
                            Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                            
                            Dim zona As Range
                            Dim ur As Long
                            
                            ur = Cells(Rows.Count, "A").End(xlUp).Row
                            
                            Set zona = Range("A2:R" & ur)
                            
                            If Not Intersect(Target, zona) Is Nothing Then
                            
                                If GetKeyState(17) < 0 Then 'tasto ctrl
                                    Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32
                                    Exit Sub
                                End If
                            
                                If Target.Interior.ColorIndex <> 32 Then
                                    zona.Interior.ColorIndex = xlNone
                                    Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32
                                End If
                            
                            End If
                            
                            Set zona = Nothing
                            
                            End Sub
                            #45697 Score: 0 | Risposta

                            scossa
                            Partecipante
                              37 pts

                              Ciao, 

                              questa il codice che ho pensato per la tua esigenza:

                              Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
                                Dim rTable As Range, rRow As Range, nRows As Long
                                
                                If Sh.Name = "Foglio3" Then
                                  Set rTable = Intersect(Sh.UsedRange, Sh.UsedRange.Offset(3))
                                  If Not Intersect(Target, rTable) Is Nothing Then
                                    rTable.Interior.ColorIndex = xlNone
                                    For Each rRow In Selection.Areas
                                      With rRow
                                        Intersect(.EntireRow, rTable).Interior.ColorIndex = 8
                                      End With
                                    Next rRow
                                  End If
                                Else
                                  Target.Calculate  '<<< per riga attiva colorata con formattazione
                                End If
                              
                              End Sub

                              Se .UsedRange eccede la tua tabella sostituisci 

                              Set rTable = Intersect(Sh.UsedRange, Sh.UsedRange.Offset(3))

                              con 

                              Set rTable = Intersect(Sh.UsedRange, Sh.Range("A4:L10000"))

                              dove 10000 è un valore a piacere purché maggiore del numero di righe previsto possa occupare in futuro la tabella

                              #45701 Score: 0 | Risposta

                              Raffaele53
                              Partecipante
                                21 pts

                                @alexps81, grazie
                                Per l'utente mi sembra da quanto abbia capito che sia la soluzione.

                                @scossa
                                Perchè >>>Workbook_SheetSelectionChange<<< che non capisco?  Cosa dovrebbe fare?

                                #45702 Score: 1 | Risposta

                                scossa
                                Partecipante
                                  37 pts

                                  alexps81 ha scritto:

                                  Ora ho notato che se tieni premuto contemporaneamente SHIFT + CTRL e click del mouse su una cella, allora la macro funziona. Però ti dico la verità...non so come mai e sinceramente la cosa di non saperlo non mi fa impazzire..

                                  Ciao,

                                  il problema nel tuo codice è qui:

                                      If GetKeyState(17) < 0 Then 'tasto ctrl
                                          Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32
                                          Exit Sub
                                      End If

                                  dove in  Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32

                                  fai riferimento a Target ma, se selezioni con ctrl premuto, Target resta sempre la prima cella che hai selezionato; ti basterà sostituire Target con ActiveCell e risolvi.

                                   

                                  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                                  
                                  Dim zona As Range
                                  Dim ur As Long
                                  
                                  ur = Cells(Rows.Count, "A").End(xlUp).Row
                                  
                                  Set zona = Range("A2:R" & ur)
                                  
                                  If Not Intersect(Target, zona) Is Nothing Then
                                  
                                      If If GetKeyState(17) < 0 Then 'tasto ctrl
                                          Cells(ActiveCell.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32
                                          Exit Sub
                                      End If
                                  
                                      If Target.Interior.ColorIndex <> 32 Then
                                          zona.Interior.ColorIndex = xlNone
                                          Cells(Target.Row, 1).Resize(1, zona.Columns.Count).Interior.ColorIndex = 32
                                      End If
                                  
                                  End If
                                  
                                  Set zona = Nothing
                                  
                                  End Sub
                                  

                                  N.B.: poiché in VBA True vale -1 l'istruzione If GetKeyState(17) < 0 Then può semplificarsi in If GetKeyState(17)  Then

                                  #45704 Score: 0 | Risposta

                                  scossa
                                  Partecipante
                                    37 pts

                                    Raffaele53 ha scritto:

                                    @scossa Perchè >>>Workbook_SheetSelectionChange<<< che non capisco?  Cosa dovrebbe fare?

                                    scusa, ho dimenticato di specificarlo: visto che frank_ciccio parlava di poter applicare l'evidenza ad alcuni fogli in particolare, ho usato l'evento Workbook_SheetSelectionChange che viene richiamato quando si seleziona una cella di qualsiasi foglio, folgio che viene passato con l'argomento Sh. Quindi basta decidere per quali fogli attivare il codice senza doverlo scrivere in tutti i fogli.

                                    Ovviamente per quei fogli andrà eliminato il codice di evento Worksheet_SelectionChange().

                                    #45705 Score: 1 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      scossa ha scritto:

                                      ho usato l'evento Workbook_SheetSelectionChange

                                      E per essere chiarissimi, quel codice va nel modulo di ThisWorkbook perche' e' un evento del Workbook (non di un foglio, ne' a se stante in un modulo di codice).

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