Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Incongruenza con "ordinamento decrescente" Opzioni
aetio
Inviato: Wednesday, July 06, 2011 10:16:11 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
ogni tanto mi capita questo fatto assai strano, e non sono ancora riuscito a trovare il "colpevole"...
PREMESSA
nel foglio di lavoro devo ordinare i dati di una tabella in modo decrescente, tenendo come riferimento dell'ordinamento i valori della col.A. Per fare questo a suo tempo il carissimo Amico a10n11 mi aveva dato una, ma che dico una...1.000.000 di mani inserendo nella macro questo codice:
Range("a3", Range("cn" & Rows.Count).End(xlUp)).Select
Selection.Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

in cui viene selezionato il Range della tabella (che parte da riga 3, col.A, ed è sempre variabile nel n. delle righe, ma mai nel n. delle colonne-l'ultima è la CN), viene posta la col.A quale riferimento in cui operare l'ordinamento decrescente.
PROBLEMA
tutto l'ambaradan funziona all perfezione, però ogni tanto ecco cosa succede:



in cella A3 anziché esserci il valore giusto ne compare un altro... ovviamente più piccolo.
Quale può essere il motivo?? Non riesco assolutamente a comprenderlo, perché facendo fare l'operazione in modo "tradizionale" (non via macro, ma con l'apposita opzione dal menù Modifica > Ordina e filtra > Ordinamento personalizzato > si apre il form Ordina in cui bisogna deselezionare l'opzione 'Dati con intestazioni' e poi Ordina per: col.A - Ordina in base a: Valori - Ordine dal più grande al più piccolo > dare l'OK) và tutto in porto in modo impeccabile.
Grazie infinite e buona giornata
eZio

Nota: se può essere utile per un confronto ecco cosa scrive il registratore di macro:
(qui la tabella và da A3 a CN266)

Sub Macro2()
Range("A3").Select
Range("A3:CN266").Select
ActiveWorkbook.Worksheets("Archivio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Archivio").Sort.SortFields.Add Key:=Range( _
"A3:A266"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Archivio").Sort
.SetRange Range("A3:CN266")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Sponsor
Inviato: Wednesday, July 06, 2011 10:16:11 AM

 
aetio
Inviato: Wednesday, July 06, 2011 10:43:37 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Nota aggiuntiva:
cannibalizzando e ibridando le due macro il tutto funziona, ma io sono un "perfettino" e mi piacciono alla follia le soluzioni di a10n11 (basta osservare la bellezza della sua essenzialità, rispetto a quella "ordinaria" che infila righe su righe di codice che poi in fondo fanno la stessa cosa... probabilmente in quella scritta sopra manca un riferimento che però è determinante), per cui il fatto che l'ibrido funzioni soddisfa sì il lavoro, ma certamente non me!! :)))))))))))))
ecco l'ibrido:
Sub Meticcio()
Range("a3", Range("cn" & Rows.Count).End(xlUp)).Select
ActiveWorkbook.Worksheets("Archivio").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Archivio").Sort.SortFields.Add Key:=Range( _
"A3"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Archivio").Sort
.SetRange Range("a3", Range("cn" & Rows.Count).End(xlUp))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub


Grazie assai e buona giornata
eZio
a10n11
Inviato: Wednesday, July 06, 2011 12:51:09 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
dalla descrizione non riesco a capire il nocciolo del problema.
un esempio concreto??

Che office hai?? esegui l'ordinamento per il riconoscimento fonetico cinese.

leggi quanto segue in merito alla proprietà SortMethod

...................
Può essere uno dei seguenti valori di XlSortMethod:

xlStroke . Applica l'ordinamento in base alla quantità di tratti in ciascun carattere.

xlPinYin . Ordinamento fonetico cinese per caratteri.

......................??
saluti
Giap

aetio
Inviato: Wednesday, July 06, 2011 2:03:58 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Ho in uso Office 2007. Non riesco a capire come, e dove, abbia potuto ordinargli di eseguire l'ordinamento per il riconoscimento fonetico cinese...?? O bella questa! Sicuramente è lo scherzo di qualche smanettone buontempone ahahaha

Il problema:
usando il codice scritto in apertura a volte- sottolineo solo a volte- esegue l'ordinamento in modo errato come si vede nell'immagine sopra: in cella A3 dovrebbe alloggiare il valore più alto, cioè 4848 e non 4792 che dovrebbe essere in A8 al posto di 4766 che a sua volta andrebbe in A9, e a scendere i valori via via minori fino all'ultima riga scritta in cui in una cella di col.A vi sarà scritto il valore più piccolo. Ovviamente tutta la tabella, con Range("a3", Range("cn" & Rows.Count).End(xlUp)), essendo stata selezionata verrebbe "riposizionata" seguendo pari pari l'ordinamento decrescente di col.A che è il 'capo commessa'.
Spero di avere un poco chiarito.
Guardando nelle Opzioni di Excel > Impostazioni generali > Personalizzazione della copia di MO > Impostazioni lingua > come lingua di modifica generale è impostato l'Italiano... bo??
Per favore, mi scrivi in che altro modo posso andare a controllare l'opzione che fà lavorare Excel in cinese per stroncargli la carriera sul nascere...? :)))
Grazie assai, buon pomeriggio
eZio

aetio
Inviato: Wednesday, July 06, 2011 3:19:50 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Nota:
QUINDI > nel codice scritto nella mia macro ibrida, debbo sostituire la riga
.SortMethod = xlPinYin
in
.SortMethod = xlStroke
??
Domande:
-Perché il registratore aggiunge quegli ulteriori, numerosi, distinguo rispetto alla tua macro?
-E' possibile, e sopra tutto corretto, riscrivere la tua macro originale in questo modo?

Code:
Sub Ordina()
With Range("a3", Range("cn" & Rows.Count).End(xlUp)).Select
Selection.Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, SortMethod:= xlStroke
end With
End Sub

Cercando in rete ho trovato questo LINK interessante... per cui lo segnalo più che volentieri :)

Grazie assai e buon pomeriggio,
eZio
a10n11
Inviato: Wednesday, July 06, 2011 6:46:47 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
la differenza che vedi nella macro registrata con il tuo 2007 usa semplicemente una sintassi differente e delle opzioni nuove non disponibili nelle versioni precedenti.
Se io copiassi il codice che hai postato nel mio 2003 mi darebbe un errore in quanto alcuni metodi non sono supportati.
tipo - SortMethod

il tuo riassemblamento è corretto.
saluti
Giap




aetio
Inviato: Wednesday, July 06, 2011 6:54:10 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Grazie assai per l'approfondimento... perdonami per la mia pedanza, ma la mia ignoranza in questa affacinante Materia è pari alla mia passione...............
Buona serata,
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.