selezionare celle in sequenza



  • selezionare celle in sequenza
    di maxp72 data: 02/09/2013 11:46:03

    Salve su un foglio dovrei eseguire 3-4 operazioni su celle diverse, che pero' non sono adaicenti.
    Le celle sono:
    "C6", "D6", "C9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "B19", "C19", "B22", "C22", "B28", "C28", "B31", "C31"

    come faccio per farle giare tutte pensavo con un ciclo for/next
     
    
        
    For CELLA = 1 To 18
    
            ActiveCell.Select
            ActiveCell.ClearContents
            '...
    Next CELLA



  • di Grograman data: 02/09/2013 12:01:27

    Se non sono consecutive la vedo dura.
    Ma puoi snellire il tutto creando una macro che faccia le 4 operazioni che ti servono, a cui passare un argomento come Range.

    Poi per quelle consecutive tipo C9:C16 usi un ciclo, le altre le passi singolarmente:
     
    Option Explicit
    Sub richiamo()
    Dim i As Long
      For i = 9 To 16
        Call letueoperazioni(Cells(i, 3))
      Next i
      Call letueoperazioni([C6])
      Call letueoperazioni([D6])
    End Sub
    
    Sub letueoperazioni(ByVal Cella As Range)
      Cella.Interior.ColorIndex = 1
      Cella.Font.Bold = True
      ''ecc
      ''ecc
    End Sub



  • di maxp72 data: 02/09/2013 12:09:45

    con una "array" ? non so pero' come funzioni.



  • di Grograman data: 02/09/2013 12:15:42

    Postaci il codice di quello che vuoi fare su ogni cella che vediamo qual'è l'opzione migliore.

    Tipo:
     
    Option Explicit
    
    Sub celle()
    With Range("C6, D6, C9, c10, c11, c12, c13, c14, c15, c16, B19, C19, B22, C22, B28, C28, B31, C31")
     .ClearContents
    End With
    End Sub



  • di maxp72 data: 02/09/2013 12:23:50

    Su ogni cella devo :
    cancellarne il contenuto
    e lanciare le due macro sotto
    SCOLORA_CELLA e LISTA_NON_DISPONIBILE

    in pratica ogni cella deve essere vuota, bianca e non devo potergli scrivere nulla (pero' voglio che l'utente sia avvsiato che la scelta fatta "non e' disponibile")

     
    Sub SCOLORA_CELLA()
        'Elimino il colore della cella
        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End Sub
    
    LISTA_NON_DISPONIBILE:
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="NON DISPONIBILE"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ErrorMessage = "NON DISPONIBILE"
            .ShowInput = True
            .ShowError = True
        End With



  • di Grograman data: 02/09/2013 12:39:38

    Allora ecco due alternative, non ho dato le paternità ai range non sapendo dove come quando le lanci!
     
    PRIMA VERSIONE:
    Sub All_In()
      With Range("C6, D6, C9, c10, c11, c12, c13, c14, c15, c16, B19, C19, B22, C22, B28, C28, B31, C31")
        With .Interior
          .Pattern = xlNone
          .TintAndShade = 0
          .PatternTintAndShade = 0
        End With
        
        With .Validation
          .Delete
          .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="NON DISPONIBILE"
          .IgnoreBlank = True
          .InCellDropdown = True
          .ErrorMessage = "NON DISPONIBILE"
          .ShowInput = True
          .ShowError = True
        End With
      End With
    End Sub
    
    
    SECONDA VERSIONE, DUE SUB DIPENDENTI:
    
    Sub A_Pezzi()
      Call Pezzettoni(Range("C6, D6, C9, c10, c11, c12, c13, c14, c15, c16, B19, C19, B22, C22, B28, C28, B31, C31")) 'anche una cella alla volta
    End Sub
    
    Private Sub Pezzettoni(ByVal Cella As Range)
      With Cella
        With .Interior
          .Pattern = xlNone
          .TintAndShade = 0
          .PatternTintAndShade = 0
        End With
        
        With .Validation
          .Delete
          .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="NON DISPONIBILE"
          .IgnoreBlank = True
          .InCellDropdown = True
          .ErrorMessage = "NON DISPONIBILE"
          .ShowInput = True
          .ShowError = True
        End With
      End With
    End Sub
    



  • di maxp72 data: 03/09/2013 09:12:07

    ho allegato un file di esempio, in pratico vorrei che cliccando il pulsante sul folgio facesse le operazioni che ho indicato sopra.
    Ho provato la prima versione che hai messo richiamando due macro che avevo gia' ma pare non funzioni, probabilmente non ho fatto tutti i passaggi corretti.



  • di maxp72 (utente non iscritto) data: 03/09/2013 09:58:43

    ok risolto con un "for each", vedi file allegato (Cartel2-ok.zip)
     
      For Each cell In Range("C6, D6, C9, c10, c11, c12, c13, c14, c15, c16, B19, C19, B22, C22, B25, C25,B28, C28, B31, C31")
        
            cell.Select
            cell.ClearContents
            SCOLORA_CELLA
            LISTA_NON_DISPONIBILE
            
      Next cell



  • di maxp72 (utente non iscritto) data: 03/09/2013 10:28:08

    OK scherzavo...
    la macro funziona dal pulsante, ma dovrebbe funzionare anche quando cambio la cella b6, in quel caso invece non funziona...
    vedi allegato (Cartel3.zip)



  • di Grograman data: 03/09/2013 10:34:18

    Prova se così ti piace, da mettere nel modulo di classe del foglio in cui vuoi scatenare il controllo:
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Range("C6, D6, C9, c10, c11, c12, c13, c14, c15, c16, B19, C19, B22, C22, B28, C28, B31, C31")
        With .Interior
          .Pattern = xlNone
          .TintAndShade = 0
          .PatternTintAndShade = 0
        End With
        
        With .Validation
          .Delete
          .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="NON DISPONIBILE"
          .IgnoreBlank = True
          .InCellDropdown = True
          .ErrorMessage = "NON DISPONIBILE"
          .ShowInput = True
          .ShowError = True
        End With
      End With
    End Sub
    
    



  • di maxp72 data: 06/09/2013 13:54:50

    ok risolta, grazie x le info.
    Con il tuo metodo funziona.
    Quello che non ho capito e' perche' se invece di scirvere tutto il codice, come hai fatto tu, vado a richiamare le due macro (SCOLORA_CELLA e LISTA_NON_DISPONIBILE che riportano le stesse identiche istruzioni) non funionano...va beh, non rompo ulterirmente.
    Grazie mille.