Seleziona celle specifiche con invio



  • Seleziona celle specifiche con invio
    di Gerry (utente non iscritto) data: 12/04/2014 19:27:35

    Salve a tutti dovrei risolvere un problema tramite una macro, ma non sò come fare.
    Ho la cella J19 selezionata, ogni volta che clicco il tasto invio e possibile selezionare le celle in questo ordine:
    J19 Invio
    I24 Invio
    I25 Invio
    I26 Invio
    M26 Invio
    cella successiva
    Grazie spero che sia possibile



  • di Mister_x (utente non iscritto) data: 12/04/2014 23:27:38

    ciao

    da inserire nel foglio

    ciao
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J19,I24,I25,I26")) Is Nothing Then Exit Sub
    On Error Resume Next
    Application.EnableEvents = False
      If Target.Address(False, False) = "J19" Then
        Range("I24").Select
      ElseIf Target.Address(False, False) = "I24" Then
        Range("I25").Select
      ElseIf Target.Address(False, False) = "I25" Then
        Range("I26").Select
      ElseIf Target.Address(False, False) = "I26" Then
        Range("M26").Select
      End If
    Application.EnableEvents = True
    End Sub






  • di Gerry (utente non iscritto) data: 13/04/2014 09:22:12

    Ciao Mister_x il codice segnalato funziona, solo che c'è un altro problema, perchè io non mi sono spiegato bene.
    nel foglio ci sono altre celle che io seleziono tramite invio, il codice da te segnalato dovrebbe iniziare a funzionare solo quando la cella selezionata e la J19, praticamente quando seleziono la cella J19 appena premo invio dovrebbe entrare in azione la Runtime da te segnalata e selezionare le celle nell'ordine specificato, alla fine di M26 uscire dalla runtime e seguire la selezione normalmente.
    spero che sia possibile ciao e grazie



  • di gaetanopr data: 13/04/2014 11:41:07

    Ciao, prova in questo modo
    il primo codice va inserito nel modulo del foglio, il secondo in un modulo standard
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("J19,I24,I25,I26")) Is Nothing Then
    Application.EnableEvents = False
      Application.OnKey "~", "VaiACella"
    Else
    Application.OnKey "~"
    End If
    
    Application.EnableEvents = True
    End Sub
    
    Sub VaiACella()
    
    Rng = Array("J19", "I24", "I25", "I26", "M26")
    For i = 0 To UBound(Rng)
     If ActiveCell.Address(False, False) = Rng(i) Then
        Range(Rng(i + 1)).Select
        Exit For
     End If
    Next i
    End Sub



  • di gaetanopr data: 13/04/2014 11:43:27

    Allego un piccolo esempio
    Application_OnKey.xlsm



  • di gaetanopr data: 13/04/2014 11:53:52

    Ho riletto meglio la tua richiesta, quindi se mi trovo in I23 e passo in I24 la sub non deve attivarsi, in quanto non viene rispettata la giusta sequenza?



  • di gaetanopr data: 13/04/2014 17:37:25

    Ho modificato le macro, in modo da entrare in funzione solo quando viene rispettata la sequenza che inizia con la selezione della cella J19.
    File Application_OnKey2.xlsm



  • di Gerry (utente non iscritto) data: 14/04/2014 11:22:03

    Ciao gaetanopr ho controllato i file allegati c'è solo un problema da risolvere il codice deve entrare in funzione appena la cella J19 è attiva, da questo momento appena premo invio si devono attivare le celle in sequenza I24, I25, I26, M26.
    Il tutto serve per stabilire un ordine di tabulazione delle celle , Sarebbe ancora meglio se si possono stabilire dei nomi per Aree diverse se l'area e selezionata entra in funzione la tabulazione specificata per quellarea.
    esempio:
    1 Area A6:D17 Definizione nome: Cassa
    Tabulazione
    B7,B9,C11,D13,A14,A16,C17

    2 Area I6:M26 Definizione nome: Vendita
    Tabulazione
    J19,I24,I25,I26,M26
    Spero che sia fattibile?
    grazie per l'aiuto



  • di Gerry (utente non iscritto) data: 14/04/2014 12:35:36

    Ciao gaetanopr ho controlla meglio i file allegati e ho notato che il codice funziona se il tasto invio cliccato e quello grande posizionato nella parte delle lettere, se invece clicco quello piccolo dalla parte dei numeri il codice non funziona come mai?
    Se possibile controlla se si possono definire delle aree specifiche assegando dei nomi, per stabilire la tabulazione
    Grazie Ancora.



  • di gaetanopr data: 14/04/2014 13:06:44

    i due tasti hanno codici diversi, ti basta consultare la guida in linea del metodo Application.OnKey per sapere il codice da applicare, per INVIO (tastierino numerico) devi usare il codice ENTER

    Ciao



  • di gaetanopr data: 14/04/2014 13:10:49

    Non ho capito se, nomi a parte, la macro soddisfa le tue esigenze o meno
    cit:"appena la cella J19 è attiva, da questo momento appena premo invio si devono attivare le celle in sequenza I24, I25, I26, M26"
    la macro fa esattamente questo, appena ti posizioni su J19, ad ogni invio selezioni le celle in sequenza



  • di Gerry (utente non iscritto) data: 14/04/2014 14:15:06

    Scusa gaetanopr se ho fatto un pò di confusione, la macro fa prorpio quello che volevo, il problema era che io premevo il tasto invio dalla parte dei numeri e la selezione non funzionava poi mi sono accorto che se premo il tasto invio dalla parte delle lettere funziona.
    Successivamento avevo chiesto se fosse possibile definire delle aree diverse per far entrare in funzione la selezione delle celle.
    Vedi esempio.
    Altra cosa è possibile far funzionare il codice sia con invio che con Enter

    Grazie ancora per l'aiuto



  • di gaetanopr (utente non iscritto) data: 14/04/2014 14:57:31

    Devi aggiungere il codice per l'altro codice, sia quando assegni una sub al tasto INVIO che quando si ripristina il normale funzionamento, prova a cambiare così, io sul portatile non ho il tastierino numerico

     
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("J19,I24,I25,I26")) Is Nothing Then
      Dim Rng(), i As Integer
      Rng = Array("", "J19", "I24", "I25", "I26", "M26")
          For i = 0 To UBound(Rng)
            If ActiveCell.Address(False, False) = Rng(i) Then
               If Precedente = Rng(i - 1) Then
                  Application.EnableEvents = False
                  Application.OnKey "~", "VaiACella"
                  Application.OnKey "{ENTER}", "VaiACella"
                  Exit For
               End If
            End If
          Next i
              Application.EnableEvents = True
     Else
           Application.OnKey "~"
           Application.OnKey "{ENTER}"
     End If
    End Sub
     



  • di Gerry (utente non iscritto) data: 14/04/2014 19:22:56

    Cia gaetanopr ho provato il codice e funziona a meraviglia sia con il tasto invio che con Enter, resta il problema dovendo creare diverse are di tabulazone tipo:

    1 Area I6:M26
    Tabulazione su invio o Enter
    J19,I24,I25,I26,M26

    1 Area A6:D17
    Tabulazione Su invio o Enter
    B7,B9,C11,D13,A14,A16,C17

    Come posso Fare?
    Grazie ancora per l'aiuto




  • di gaetanopr data: 14/04/2014 21:23:36

    Ciao, non vedo l'utilità nel definire due aree in quanto le celle non corrispondono alle celle interessate alla tabulazione(sono di meno).
    Ho modificato le macro in modo da considerare le due diverse aree.
    Sono queste due o ce ne sono altre?

    Allego il file



  • di gaetanopr data: 14/04/2014 21:24:47

    Application_OnKey3.xlsm



  • di Gerry (utente non iscritto) data: 14/04/2014 22:24:46

    Cia gaetanopr in realta ci sono altre due aree da definire, in quanto a l'utilità, il problema sta che ci sono alcune celle protette e quando premo invio non rispetta l'ordine da mè interessato, tieni conto che larea interessata è zummata per lavorare meglio.
    Il messagio che mi visualizza la cella selezionata si può togliere?
    Mi potresti definire altre due aree in modo che poi posso provare ad adattare il codice sul mio file
    Ti ringrazio sei stato molto gentile e paziente purtroppo non sono in gamba con VB. Grazie




  • di gaetanopr data: 14/04/2014 23:39:02

    Ho modificato la macro in modo tale da lavorare con i nomi definiti e con un sola macro “VaiACella”.
    Devi seguire queste operazioni
    1) definire gli altri nomi
    2) la macro VaiACella non deve essere modificata
    3) per ogni nome inserire queste istruzioni tra ELSEIF e ELSE della macro

    ElseIf Not Intersect(Target, Range("NOMEDEFINITO")) Is Nothing Then
    Rng = Array("", "B7", "B9", "C11", "D13", "A14", "A16", "C17", "C18")

    Indicare le celle nell'ordine di tabulazione, lasciando all'inizio “” e aggiungendo alla fine la cella successiva all'ultima nell'ordine di tabulazione, quindi se l'ultima cella è la C17, aggiungi C18.
    Allego la versione 4



  • di Gerry (utente non iscritto) data: 15/04/2014 12:24:09

    Cia gaetanopr ho provato il codice, funziona tutto a meraviglia ti ringrazio per l'aiuto e la pazienza grazie ancora, a presto.