Condividi:        

Premendo INVIO spostarsi sulle sole celle utili

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 18/12/10 11:41

Ciao a tutti!
Ho creato una griglia con intervallo A1:G21
La mia intenzione sarebbe di compilare le celle che mi interessano evitando di passare manualmente alla successiva
Esempio
Compilare B2 poi premendo invio saltare la C2 e passare alla D2
Compilare la D2 e premendo invio saltare alla B3, compilarla, poi con Invio saltare alla D3
Compilare la D3 e premendo invio saltare alla B4, compilarla, poi con Invio saltare alla D4
Eccetera fino ad arrivare all’ultima cella D21.
Si può fare?
Grazie
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Sponsor
 

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi CANAPONE » 18/12/10 16:44

Ciao: uso Excel 2000 Xp.

Nel menù strumenti/opzioni nella TaB modifica cerca "Sposta la selezione dopo Invio" e come Direzione: Destra. Conferma con l'OK
Nascondi temporaneamente la colonna C.
Seleziona l'area d'inserimento dati, inserisci e premi invio.
Non conoscendo il Visual Basic, questo potrebbe essere un sistema.

Saluti
---------------
Excel 2004 su Mac
Excel 2010 su Windows 8
CANAPONE
Utente Senior
 
Post: 430
Iscritto il: 22/11/10 15:43
Località: Firenze

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Flash30005 » 18/12/10 18:14

Inserirsci questo codice nel Foglio interessato (non nel modulo)

e prova a scrivere i dati

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
CheckAreaB = "B2:B21"
CheckAreaD = "D2:D21"
If Not Application.Intersect(Target, Range(CheckAreaB)) Is Nothing Then
            ActiveCell.Offset(-1, 2).Select
           
End If
If Not Application.Intersect(Target, Range(CheckAreaD)) Is Nothing Then
            ActiveCell.Offset(0, -2).Select
End If
End Sub


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 20/12/10 23:06

Ciao Canapone, ho usato la macro di Flash ma voglio comunque ringraziarti per la risposta.
Spero che la macro in questione, riadattandola possa essere utile anche te.

Ciao Flash,
grazie per l’attenzione e per avermi risolto il problema.
La macro che mi hai preparato velocizza l’inserimento dei dati nel foglio proprio come volevo.
Ho solo dovuto modificare un paio di cose per poterla utilizzare, infatti dopo la compilazione della cella B2 e la pressione di INVIO, la cella attiva diventava D1 e non D2 poi non avanzava più.
Con qualche prova sono arrivato a questo codice:
Private Sub Worksheet_Change(ByVal Target As Range)
CheckAreaB = "B2:B21"
CheckAreaD = "D2:D21"
If Not Application.Intersect(Target, Range(CheckAreaB)) Is Nothing Then
ActiveCell.Offset(0, 2).Select _________ AL POSTO DI (-1, 2)

End If
If Not Application.Intersect(Target, Range(CheckAreaD)) Is Nothing Then
ActiveCell.Offset(1, -2).Select__________AL POSTO DI (0, -2)
End If
End Sub
Grazie 1000 e alla prossima!
Paolo
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi ricky53 » 21/12/10 00:19

Ciao,
attenzione la macro di Flash funziona perfettamente infatti dopo "B2" va in "D2", B2 in D3, ecc.

Le modifiche cha hai fatto portano a questa sequenza
B2 - D3
B5 - D6
B8 - D9

CONTROLLA BENE !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Flash30005 » 21/12/10 13:51

Si infatti funziona se non sono state modificate le opzioni originali in excel che prevedono la selezione della cella successiva (riga inferiore) della cella appena digitata.

Se le opzioni sono state modificate (vedi post precedenti) allora il cursore si posiziona in una cella diversa da quella "prevista" da me.

Se Marte1503 ripristina l'azione originale dell'invio (che consiglio di fare) potrà utilizzare la macro postata

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 21/12/10 20:29

Ciao Ricky, ciao Flash.

Sì, ho modificato le impostazioni in modo che dopo l'INVIO la cella attiva rimanga la medesima dell'inserimento del dato.

Mi sono abituato così e trovo che sia comodo (preferirei continuare con questa soluzione.) Le conseguenze di questa scelta portano soltanto a problemi in caso di spostamenti di cella come quello che vi ho chiesto, o parlando di macro potrei incappare in disguidi d'altro genere?

Vi ringrazio per l'attenzione.
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Anthony47 » 21/12/10 23:31

Ma la cosa piu' prudente e' non usare ActiveCell.Offset(etc etc) ma Target.Offset(etc etc); "Target" infatti e' chiaro chi e' (la cella modificata), ActiveCell dipende dalle impostazioni di excel, quindi imprevedibili da pc a pc.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Flash30005 » 22/12/10 02:08

Ottimo il consiglio di Anthony infatti anche cambiando le impostazioni dello spostamento (Giù, Destra, etc)
la macro attiverà la cella voluta
ma bisogna modificare i valori riga dell'offset della macro precedente
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
CheckAreaB = "B2:B21"
CheckAreaD = "D2:D21"
If Not Application.Intersect(Target, Range(CheckAreaB)) Is Nothing Then
            Target.Offset(0, 2).Select
           
End If
If Not Application.Intersect(Target, Range(CheckAreaD)) Is Nothing Then
            Target.Offset(1, -2).Select
End If
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 22/12/10 22:34

Grazie Antony, grazie Flash! ;)
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 11/12/22 15:09

Ciao a tutti,
ho rispolverato questa vecchio post e ho provato a riadattare la macro di Flash con la correzione di Anthony, ma essendo cambiate le esigenze non riesco a fare lavorare la macro nell'ordine corretto..

Spiego le nuove caratteristiche del foglio

immetto un valore in B4, >>>>>>>>>>>>>>>>>>>>> premo invio
devo saltare nella cella D4, compilo >>>>>>>>>>> premo invio
devo saltare nella cella F4, compilo >>>>>>>>>>> premo invio
devo saltare nella cella B7, compilo >>>>>>>>>>> premo invio
devo saltare nella cella D7, compilo >>>>>>>>>>> premo invio
devo saltare nella cella F7, compilo >>>>>>>>>>> premo invio
devo saltare nella cella B10, compilo >>>>>>>>>>> premo invio
devo saltare nella cella D10, compilo >>>>>>>>>>> premo invio
devo saltare nella cella B13, compilo >>>>>>>>>>> premo invio
devo saltare nella cella D13, compilo >>>>>>>>>>> premo invio
devo saltare nella cella F13, che nella fattispecie è una cella unita con intervallo F10:H13

Ho creato questa Macro ma non lavora correttamente, nel senso che dopo aver compilato i primi 3 campi (fino ad F4) passa anche per H4 e non va bene... Provo a postarla e confido in un vostro aiuto

Codice: Seleziona tutto
CheckAreaB = "B4:B13"
CheckAreaD = "D4:D13"
CheckAreaF = "F4:F10"
CheckAreaH = "H7"

If Not Application.Intersect(Target, Range(CheckAreaB)) Is Nothing Then
            Target.Offset(0, 2).Select
            End If

If Not Application.Intersect(Target, Range(CheckAreaD)) Is Nothing Then
            Target.Offset(0, 2).Select
            End If

If Not Application.Intersect(Target, Range(CheckAreaF)) Is Nothing Then
            Target.Offset(3, -4).Select
            Target.Offset(0, 2).Select
            End If
           
If Not Application.Intersect(Target, Range(CheckAreaH)) Is Nothing Then
            Target.Offset(3, -6).Select
            End If
    End Sub



Questo codice l'ho inseriro in coda a quest'altro


Codice: Seleziona tutto

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Area As String, inArea As Range, myC As Range
'
Application.EnableEvents = False
If Target.Address = "$B$7" Then
    Range("D7, F7, H7, B10, D10, B13, F10:H13").ClearContents
ElseIf Target.Address = "$D$7" Then
    Range("F7, H7, B10, D10, B13, F10:H13").ClearContents
ElseIf Target.Address = "$B$4" Then
    Range("D4,F4").ClearContents
End If
Application.EnableEvents = True
'
Area = "B7"     '<<< l'area da convertire in maiuscolo
Set inArea = Application.Intersect(Target, Range(Area))
If Not inArea Is Nothing Then
    Application.EnableEvents = False
    For Each myC In inArea
        If myC.Value <> "" Then
            myC.Value = UCase(myC.Value)
        End If
    Next myC
    Application.EnableEvents = True
End If
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Anthony47 » 11/12/22 21:20

Ti propongo questa Worksheet_Change, da sostituire al tuo codice:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mySeq As String, mySplit, inList
'
mySeq = "B4,D4,F4,D7,F7,B10,D10,B13,D13,F10,B4"
mySplit = Split(Replace(mySeq, " ", "", , , vbTextCompare), ",", , vbTextCompare)
inList = Application.Match(Target.Cells(1, 1).Address(0, 0), mySplit, False)
If Not IsError(inList) Then
    Range(mySplit(inList + 0)).Select
End If
'
End Sub

La chiave e' nel contenuto della variabile mySeq, cioe' la sequenza delle selezioni da effettuare, con ritorno alla B4 di partenza.
Per le celle unite va usato l'indirizzo della prima cella, quindi nel tuo caso F10 per F10:H13

Prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 12/12/22 21:11

Ciao Anthony
garzie per la macro, sono riuscito ora a provarla
Funziona perfettamente :) , l'unica cosa che mi piacerebbe modificare è la posizione finale, invece di tornare a B4 preferirei che rimanesse posizionato nella cella finale (quella unita.)
Ho provato a modificare il codice ma non riesco a capire i comandi :(

Se non ti disturbo troppo mi piacerebbe che tu mi mettessi una breve spiegazione accanto ogni riga di codice, in modo da poter capire il significato e poterlo magari riutilizzare in futuro in autonomia.

Grazie 1000
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Anthony47 » 12/12/22 23:16

Se dopo F10 vuoi che rimanga in F10 allora sostituisci il B4 finale con ...F10
Ho aggiunto qualche commento:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mySeq As String, mySplit, inList
'
mySeq = "B4,D4,F4,D7,F7,B10,D10,B13,D13,F10,F10"                                    '<<< La sequenza di posizioni
mySplit = Split(Replace(mySeq, " ", "", , , vbTextCompare), ",", , vbTextCompare)   'da stringa crea matrice
inList = Application.Match(Target.Cells(1, 1).Address(0, 0), mySplit, False)        'cerca l'indirizzo nella matrice:
If Not IsError(inList) Then                 'Se e' presente allora inList contiene la posizione nella sequenza...
    Range(mySplit(inList + 0)).Select       '...che puo' essere usato come pointer alla prossima posizione
End If                                      'Se invece non e' presente allora non fara' niente
'
End Sub

Ricorda:
1)Application.Match e' l'equivalente della funzione CONFRONTA
2)Split restituisce una matrice con indice iniziale pari a 0
3)Pertanto la posizione N calcolata da Match puo' essere usato direttamente come pointer alla cella N+1
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi Anthony47 » 13/12/22 09:46

Pero' forse e' piu' semplice, ai fini del riutilizzo, una cosa piu' semplice anche se piu' noiosa:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cTarg As String
cTarg = Target.Cells(1, 1).Address(0, 0)
If cTarg = "B4" Then
    Range("D4").Select
ElseIf cTarg = "D4" Then
    Range("F4").Select
ElseIf cTarg = "F4" Then
    Range("D7").Select
ElseIf cTarg = "D7" Then
'etc etc
ElseIf cTarg = "F7" Then
'etc etc
'
End If
End Sub
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 13/12/22 20:49

Grazie Anthony,
tengo presente anche la seconda versione che mi hai scritto, più laboriosa ma probabilmente più semplice da applicare.

Volevo solo aggiungere che grazie a questa funzione che mi salta in automatico da una cella alla successiva (almeno... Suppongo sia per quello) ho fatto una piacevolissima scoperta che rende ancora più speedy l'inserimento dati

spiego..

Le celle che sono interessate da questa macro, vengono compilate tramite menù a tendina. Andando ad attivare la protezione del foglio ho notato che per far scendere il menù a tendina appunto, non serve andare a clickare la piccola linguetta con la freccia verso il basso che normalmente si usa per far scendere la tendina (linguetta che è piccola e occorre più attenzione per centrarla col mouse) ma è sufficiente clickcare direttamente sulla cella e si apre la tendina :D Comodissimo! :)

Ciao e... A presto presumo... :-?

Grazie!
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Premendo INVIO spostarsi sulle sole celle utili

Postdi marte1503 » 17/12/22 17:50

Ciao Anthony,
scusa se ti disturbo ancora per questa macro, ho modificato leggermente il tuo codice (prima versione) per adattarlo alle modifiche che ho fatto nel mio foglio, ma non so come fare per adattarlo a questa nuova caratteristica..
posto il codice attuale

Codice: Seleziona tutto
Dim mySeq As String, mySplit, inList

'Stabilisce in quale ordine si attiveranno le celle dopo aver premuto il pulsante INVIO

mySeq = "B4,D4,F4,B7,D7,F7,H7,J7,B10,D10,B13,D13,F13,H10,H10"
mySplit = Split(Replace(mySeq, " ", "", , , vbTextCompare), ",", , vbTextCompare)
inList = Application.Match(Target.Cells(1, 1).Address(0, 0), mySplit, False)
If Not IsError(inList) Then
    Range(mySplit(inList + 0)).Select
End If
'
End Sub



avrei bisogno di fare in modo che nel caso in cui, nella calla B13 ci fosse un valore ="Libera" alla pressione di INVIO passi direttamente alla cella H10, se fosse <>"Libera" prima di terminare in H10 dovrebbe fare gli step D13 e F13

Grazie...
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como


Torna a Applicazioni Office Windows


Topic correlati a "Premendo INVIO spostarsi sulle sole celle utili":


Chi c’è in linea

Visitano il forum: Nessuno e 135 ospiti