Risolto Ordinamento a più colonne su due fogli excel

Clau

Nuovo utente
7 Novembre 2019
8
1
2007
0
Buonasera,
spero di aver immesso un titolo comprensibile... Ora cerco di spiegarmi meglio.
Ho un file excel che per comodità chiamerò "Prova1".
Da qui cliccando su un CommandButton attivo del codice che oltre a varie elaborazioni apre diversi files tra cui il file excel "Prova2".

Ecco il problema:
Sempre tramite il codice che "gira" in prova1 dovrei Sortare le colonne B e C del "FoglioX" di "Prova2" (partendo da riga 3 fino all'ultima riga valorizzata) estendendo il risultato del sort a tutte le colonne presenti evitando anche di sortare le celle dell'intestazione (presenti in riga 1 e 2).
Non so se può servire come info: alcune delle celle dell'intestazione sono unite.

Vi ringrazio in anticipo se riuscite a darmi qualche dritta. 🙂
 

Clau

Nuovo utente
7 Novembre 2019
8
1
2007
0
1. Allora perché non dirlo subito?
2. Perché non l'hai postato? (come previsto dallla regola 6 del Regolamento)
1. Perché inizialmente ho postato la domanda auspicando una risposta diretta
2. Il regolamento l'ho letto ... il punto mi sarà sfuggito. Oltretutto la mia domanda era volta a trovare una soluzione da esperti e non a far funzionare un codice che per quanto ne so può avere dei problemi alla base

Se sapete come risolvere vi ringrazio
 

Clau

Nuovo utente
7 Novembre 2019
8
1
2007
0
Fai come credi.
Che razza di risposta è? .... Ho postato quanto avete chiesto, la domanda non mi sembra di difficile comprensione e anche se dovesse esserlo basta chiedere precisazioni .... poi chiarito l'equivoco del codice preso dalla macro mi aspettavo finalmente qualcosa di concreto!
Invece nulla! Solo risposte polemiche che rasentano la maleducazione ed elusive.
Esperienza del tutto deludente!
Spero che nel forum ci siano persone più amichevoli e collaborative
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.775
183
47
Cosenza
Excel 2016
202
Un saluto a tutti.
Clau @Clau ti è stato chiesto semplicemente di pubblicare il codice direttamente nella discussione per una più semplice consultazione richiesta più che lecita.
Non ci torniamo più, grazie.

Ritornando al tuo problema, questo è il tuo codice:
Visual Basic:
Public DirInp As String
Dim aExcelApp As Object

Private Sub Crea_Test_Click()

Dim Txt_Err As String
On Error GoTo Display_Err

' Azzero msg errore
Txt_Err = ""

Cur_path = Application.ActiveWorkbook.Path & "\"
DirInp = Cur_path

Set aExcelApp = CreateObject("Excel.Application")

Dim FileInp3 As String
FileInp3 = "Prova2.xlsx"
aExcelApp.Workbooks.Open (DirInp & FileInp3)
aExcelApp.Visible = True
Ordina_Prova2

Chiudi_File

Display_Ok:
   If Txt_Err = "" Then
      Txt_Err = "Elaborazione avvenuta con successo !"
   End If
   MsgBox Txt_Err

   End

Exit Sub

Display_Err:
   
   Txt_Err = Txt_Err & vbCr & Err.Number & " " & Err.Description
   
   MsgBox Txt_Err
   Chiudi_File
   End

End Sub
Private Sub Chiudi_File()

Application.DisplayAlerts = False
aExcelApp.Workbooks.Close
ActiveWorkbook.Save
Application.DisplayAlerts = True
aExcelApp.Visible = False
Set aExcelApp = Nothing

End Sub

Sub Ordina_Prova2()

    Dim UltimaRiga As Integer
    Application.ScreenUpdating = True
    aExcelApp.Worksheets("Foglio3").Activate
    aExcelApp.Visible = True
    
    With aExcelApp.Worksheets("Foglio3")
        UltimaRiga = .Cells(Rows.Count, 2).End(xlUp).Row
        .Range("B3:C" & UltimaRiga).HorizontalAlignment = xlLeft
        .Sort.SortFields.Clear
        
        .Sort.SortFields.Add Key:=Range("B3:B" & UltimaRiga _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=Range("C3:C" & UltimaRiga _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
    
  
    With aExcelApp.Worksheets("Foglio3").Sort
        .SetRange Range("A2:T" & UltimaRiga)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
End Sub
Non capisco perchè tu abbia avviato una nuova sessione di Excel per aprire il file in quanto basta aprirlo dalla sessione corrente usando il metodo .Open
Una volta aperto basta attribuire una variabile al nuovo file (dichiarata a livello Modulo) e far ordinare il range richiesto:
Visual Basic:
Public DirInp As String
Dim myFile As Workbook

Private Sub Crea_Test_Click()
Dim Txt_Err As String
Dim FileInp3 As String

On Error GoTo Display_Err

Cur_path = Application.ActiveWorkbook.Path & "\"
DirInp = Cur_path
FileInp3 = "Prova2.xlsx"

Set myFile = Workbooks.Open(DirInp & FileInp3)

Ordina_Prova2

Chiudi_File

Display_Ok:
   If Txt_Err = "" Then
      Txt_Err = "Elaborazione avvenuta con successo !"
   End If
   MsgBox Txt_Err

   End

Exit Sub

Display_Err:
   
   Txt_Err = Txt_Err & vbCr & Err.Number & " " & Err.Description
   
   MsgBox Txt_Err
   Chiudi_File
   End

End Sub
Private Sub Chiudi_File()

Application.DisplayAlerts = False
aExcelApp.Workbooks.Close
ActiveWorkbook.Save
Application.DisplayAlerts = True
aExcelApp.Visible = False
Set aExcelApp = Nothing

End Sub

Sub Ordina_Prova2()

    Dim UltimaRiga As Integer
    Application.ScreenUpdating = True
    myFile.Worksheets("Foglio3").Activate
    
    With myFile.Worksheets("Foglio3")
        UltimaRiga = .Cells(Rows.Count, 2).End(xlUp).Row
        .Range("B3:C" & UltimaRiga).HorizontalAlignment = xlLeft
        .Sort.SortFields.Clear
        
        .Sort.SortFields.Add _
            Key:=Range("B3:B" & UltimaRiga), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
        .Sort.SortFields.Add _
            Key:=Range("C3:C" & UltimaRiga), _
            SortOn:=xlSortOnValues, _
            Order:=xlAscending, _
            DataOption:=xlSortNormal
    End With
    
  
    With myFile.Worksheets("Foglio3").Sort
        .SetRange Range("A2:T" & UltimaRiga)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
End Sub
 

Clau

Nuovo utente
7 Novembre 2019
8
1
2007
0
giulianovac @giulianovac ... Mi spiace ma alle tue MOLTE (2 Due) domande ho risposto ... se volevi il codice postato anziché usare (a mio modo di vedere) i più pratici file di prova per cui ho dovuto usare tempo e sforzo, bastava dirlo gentilmente e direttamente senza limitarti a citare il regolamento ... detto questo vorrei chiudere definitivamente la questione.

Approfitto per rispondere Rubik72 @Rubik72 per il discorso della Open. Il motivo è che non essendo espertissimo, ho utilizzato il codice preso da alcuni esempi che ho trovato facendo qualche ricerca inconsapevole del fatto che esistesse un altro metodo più efficace. (Grazie per avermelo fatto notare)

Tuttavia devo dire che il problema non è del tutto risolto.
Eseguendo il file di prova modificato con il codice suggerito da Rubik72 che ringrazio nuovamente, ho notato che il secondo criterio di sort (ossia quello relativo alla colonna C) non viene considerato.
A parità di valore in colonna B la C viene riportata in maniera sequenziale e non ordinata.
Chiedo ancora cortesemente il vostro aiuto per capire dove sita l'inghippo. Grazie
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.775
183
47
Cosenza
Excel 2016
202
Signori, non si doveva più tornare sulle polemiche. ULTIMO AVVISO.

[...]
Tuttavia devo dire che il problema non è del tutto risolto.
Eseguendo il file di prova modificato con il codice suggerito da Rubik72 che ringrazio nuovamente, ho notato che il secondo criterio di sort (ossia quello relativo alla colonna C) non viene considerato.
A parità di valore in colonna B la C viene riportata in maniera sequenziale e non ordinata.
Chiedo ancora cortesemente il vostro aiuto per capire dove sita l'inghippo. Grazie
Sembra che non viene considerato, in quanto viene visto come testo e non come numero.
prova a modificare questa proprietà per l'ordinamento che riguarda la colonna C:
Visual Basic:
DataOption:=xlSortTextAsNumbers
 
Ultima modifica:

Clau

Nuovo utente
7 Novembre 2019
8
1
2007
0
Rubik72 @Rubik72 Ottimo e funzionanteeee!!! .... Grazie! 🙂🙂🙂👍
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!