| | Post: 1 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
17/09/2018 10:23 | |
Salve a tutti,
chiedo il vostro aiuto per avere un excel che ordini automaticamente una colonna in base alla data e che a quel punto ordini tutta la riga in base alla data.
E' molto piu facile se aprite il file allegato. La mia idea è quella di non curarmi dell'ordine cronologigo delle rige ma di poter inserire in una qualsiasi riga il contenuto e questo di ordina automaticamente in base alla colonna A.
Grazie per l'aiuto
Toomy |
|
| | Post: 1.919 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
17/09/2018 10:30 | |
Ciao
puoi farlo con vba:
sfrutta l'evento change del foglio, mirato alla colonna A; ad ogni variazione fai un sort della tabella per tale colonna.
(Suggerimento: la data inseriscila per ultimo).
conosci qualcosa di programmazione??
saluti
[Modificato da dodo47 17/09/2018 10:40] Domenico
Win 10 - Excel 2016 |
| | Post: 1 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
17/09/2018 12:32 | |
dodo47, 17/09/2018 10.30:
Ciao
puoi farlo con vba:
sfrutta l'evento change del foglio, mirato alla colonna A; ad ogni variazione fai un sort della tabella per tale colonna.
(Suggerimento: la data inseriscila per ultimo).
conosci qualcosa di programmazione??
saluti
Aime 0 di programmazione, io credevo che questo treath http://www.freeforumzone.com/discussione.aspx?idd=11183090 facesse al caso mio ma non sono comunque capace di utilizzalro.
Per adesso utilizzo la funzione " ordina e Filtra " ma lo devo fare ogni volta che scrivo una riga e non è cosi comodo, con il rischio che se ne scrivo molte ( di righe ) e non le seleziono correttamente non le ordino correttamente.
Toomy |
| | Post: 3.918 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
17/09/2018 15:34 | |
Ciao
Prova con questa macro da inserire nel modulo di QuestaCartelladilavoro
vb Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
La data in colonna A va inserita come ultimo dato.
Alfredo |
| | Post: 2 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
17/09/2018 17:19 | |
alfrimpa, 17/09/2018 15.34:
Ciao
Prova con questa macro da inserire nel modulo di QuestaCartelladilavoro
vb Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
La data in colonna A va inserita come ultimo dato.
Mi viene il testo rosso come se commettessi errori di sintassi, se non chiedo troppo potresti provare te ad inserirlo nell'excel che ho allegato al mio primo messaggio?
Toomy |
| | Post: 3 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
17/09/2018 17:26 | |
No non so come e adesso funziona.
Effettivamente la macro da te suggerita ordina in maniera automatica la data della colonna A, e sempre come da te suggerito devo mettere la data come ultimo dato in quanto ordina la riga in cui sto scrivendo la data e se non ho compilato gli altri campi rischio di scrivere la data in una riga ( che poi si ordinera automaticamente ) mentre il resto in una riga senza data.
Gia cosi è veramente un ottimo file di excel che mi evita di dover fare "inserisci" e correggere la ( pur stupida ) somma.
Ma esiste un modo di far andare il cursore alla casella vuota a dx della data appena inserita?
Mi spiego meglio, ipotizzando di dover inserire una riga che alla fine dovrà infilarsi tra 2 date esistenti, se inserisco per primo la data ( abbiamo gia detto che non dovrei farlo ) quella va gia a posto ma a prescindere da quello che io clicco ( invio, oppure il tasto destro ) non mi ritrovo mai a scrivere a destra di quella data,ecco è possibile correggere questa cosa?
Grazie mille Toomy |
| | Post: 1.190 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
17/09/2018 19:45 | |
farru, 9/17/2018 5:26 PM:
Mi spiego meglio,
a prescindere da quello che io clicco ( invio, oppure il tasto destro ) non mi ritrovo mai a scrivere a destra di quella data,ecco è possibile correggere questa cosa?
Grazie mille
ciao,
non ho 2013 ma prova a dare un'occhiata in
Opzioni Excel > Impostazioni avanzate > Opzioni Modifica
dovresti trovare qualcosa di simile a
"Sposta la selezione dopo la pressione tasto INVIO"
tieni conto che la variazione avrà effetto su tutti i file di Excel
diversamente rimane il Vba.
Scegli Tu
ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 1.712 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
18/09/2018 10:42 | |
ciao
non sono esperto di VBA
comunque
partendo dal presupposto che in colonna B
non ci siano vuote se non quella appena filtrata
( se hai una data in colonna B sicuramente hai almeno un zero)
prova questa
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ur1 = Range("b" & Rows.Count).End(xlUp).Row
For RR = 12 To ur1
If Range("b" & RR).Value = "" Then
Range("b" & RR).Select
Exit Sub
End If
Next RR
End If
End Sub
la parte in rosso è l'aggiunta che ho fatto.
Sicuramente si può migliorare ma è un'idea
ora se scrivi una data in colonna A
viene filtrata e viene selezionata la cella corrispondente in B
[Modificato da federico460 18/09/2018 10:45] |
| | Post: 4 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
18/09/2018 14:47 | |
federico460, 18/09/2018 10.42:
ciao
non sono esperto di VBA
comunque
partendo dal presupposto che in colonna B
non ci siano vuote se non quella appena filtrata
( se hai una data in colonna B sicuramente hai almeno un zero)
prova questa
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ur1 = Range("b" & Rows.Count).End(xlUp).Row
For RR = 12 To ur1
If Range("b" & RR).Value = "" Then
Range("b" & RR).Select
Exit Sub
End If
Next RR
End If
End Sub
la parte in rosso è l'aggiunta che ho fatto.
Sicuramente si può migliorare ma è un'idea
ora se scrivi una data in colonna A
viene filtrata e viene selezionata la cella corrispondente in B
Intanto ringrazio davvero tutti per lo sforzo profuso, io nemmeno mi potevo immaginare che si potessero fare cose del genere ma:
- La colonna B è vuota, o comunque potrebbero essere compilare quelle dalla riga 1 alla riga 100 ( per dire ) e vuote dalla 100 alla 200 ( per dire ). In ogni caso l'aggiunta da te fatta non funziona, con quel codice in piu non mette nemmeo piu in ordine la data
alfrimpa, 17/09/2018 15.34:
Ciao
Prova con questa macro da inserire nel modulo di QuestaCartelladilavoro
vb Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
La data in colonna A va inserita come ultimo dato.
Il problema principale di questa macro è che fino a quando compilo una riga che è possibile vedere a monitor senza scrollare funziona, nel momento in cui per scrivere devo scrollare quando metto la data quella va a posto ma io mi ritrovo selezionato la casella B:1 il che rende il foglio inutilizzabile perche corro il rischio di dover scrollare anche 700 righe, possibili soluzioni??
tanimon, 17/09/2018 19.45:
ciao,
non ho 2013 ma prova a dare un'occhiata in
Opzioni Excel > Impostazioni avanzate > Opzioni Modifica
dovresti trovare qualcosa di simile a
"Sposta la selezione dopo la pressione tasto INVIO"
tieni conto che la variazione avrà effetto su tutti i file di Excel
diversamente rimane il Vba.
Scegli Tu
ciao
Frank
si quello lo conoscevo ma non è cio che cercavo, io speravo che esistesse anche un impostazione che mi permettese ad esempio di spostarmi nella prima casella a destra vuota di quella che sto compilando premendo invio.
In ogni caso davvero grazie dell'aiuto
Toomy |
| | Post: 5 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
18/09/2018 14:58 | |
alfrimpa, 17/09/2018 15.34:
Ciao
Prova con questa macro da inserire nel modulo di QuestaCartelladilavoro
vb Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End Sub
La data in colonna A va inserita come ultimo dato.
A parziale correzione di quanto detto prima, in realtà è dopo che supero la riga 47/48 che appare questo problema.
Fino alla 47 tutto ok, inserisco date e queste fanno a posto da solo e il cursore premendo ok rimane sulla prima casella libera, passata la riga 47 quando do il comando invio il cursore si posiziona sulla casella B:1 rendendo difatto inutilizzabile l'excel, da cosa puo dipendere?
Toomy |
| | Post: 617 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
18/09/2018 15:37 | |
Salve a tutti
Io opererei in questo modo:
1°) mi posizionerei in A12 e bloccherei i riquadri;
2°) sostituirei la macro suggerita da alfrimpa (ciao Alfredo), ottima, con la seguente che tiene conto se una delle corrispondenti celle nelle colonne C:D oppure F:G non è vuota
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Long
If Not Intersect(Target, Range("A:A,C:D, F:G")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
rg = Target.Row
If Cells(rg, 1) <> "" And (Cells(rg, 3) <> "" Or Cells(rg, 4) <> "" Or _
Cells(rg, 6) <> "" Or Cells(rg, 7) <> "") Then
ur = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gennaio").Sort.SortFields.Add Key:=Range( _
"A13:A" & ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Gennaio").Sort
.SetRange Range("A12:H" & ur)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
End If
End Sub
Fai sapere. Ciao,
Mario |
| | Post: 1.715 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
18/09/2018 15:38 | |
ciao
ora vediamo di capirci
la colonna B se in A c'è una data è necessariamente piena.
visto che è il saldo iniziale
sarà 0 ma sarà scritta.
ora col la macro che ti ho scritto ( aggiunta)
come scrivi una data in A
te la posiziona nella giusta riga e viene selezionata
la cella B corrispondente
devi scrivere in A per prima
[Modificato da federico460 18/09/2018 15:39] |
| | Post: 6 | Registrato il: 26/04/2007
| Città: BORGO SAN LORENZO | Età: 39 | Utente Junior | 2013 | | ONLINE |
|
21/09/2018 16:40 | |
federico460, 18/09/2018 15.38:
ciao
ora vediamo di capirci
la colonna B se in A c'è una data è necessariamente piena.
visto che è il saldo iniziale
sarà 0 ma sarà scritta.
ora col la macro che ti ho scritto ( aggiunta)
come scrivi una data in A
te la posiziona nella giusta riga e viene selezionata
la cella B corrispondente
devi scrivere in A per prima
Questa funziona alla perfezione, mille grazie per gli sforzi profusi, grazie grazie
Toomy |
|
|