Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Ordinamento Automatico tabella

Ultimo Aggiornamento: 21/09/2018 16:40
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

Re:
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

Re:
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

Re:
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 [SM=g27827]

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

Re:
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 [SM=g27827]

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

Re:
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

Re:
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 12:47. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com