Login Registrati
Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
  • Autore
    Articoli
  • #49517 Score: 0 | Risposta

    Ale.1989
    Partecipante

      Ciao ragazzi sono di nuovo a chiedere il vostro aiuto avrei questo codice perfettamente funzionante 

      Sub SOMMA()
      Dim rng As Range, r As Range
      Dim j As Integer
      
      Worksheets("Ordine Rame").Select
      Range("L2").FormulaR1C1 = "=RC[1]+RC[2]"
      Range("L2").AutoFill Destination:=Range("L2:L29"), Type:=xlFillDefault
      Range("K2:K29").Value = Range("L2:L29").Value
      Range("M2:M29").Value = Range("L2:L29").Value
              
      Set r = Range("B35:BA35").Find(What:=Range("E11").Value, LookIn:=xlValues, LookAt:=xlWhole)
      If Not r Is Nothing Then
          For j = 1 To Range("AM2").End(xlDown).Row - 1
              Cells(r.Row + j, r.Column) = Cells(r.Row + j, r.Column) + Range("AM" & j + 1)
          Next j
      End If
      
      With Sheets("PROVA CARICHI")
          Set rng = .Range("B35:BA35").Find(What:=.Range("B5").Value, LookIn:=xlValues, LookAt:=xlWhole) 'cerca la settimana
          rng.Offset(1, 0) = rng.Offset(1, 0) + .Range("H2")   'somma alla cella sottostante il valore
          rng.Offset(5, 0) = rng.Offset(5, 0) + .Range("N2")   'somma alla cella sottostante il valore
          rng.Offset(8, 0) = rng.Offset(8, 0) + .Range("O2")   'somma alla cella sottostante il valore
          rng.Offset(11, 0) = rng.Offset(11, 0) + .Range("P2")   'somma alla cella sottostante il valore
          rng.Offset(14, 0) = rng.Offset(14, 0) + .Range("Q2")   'somma alla cella sottostante il valore
      End With
      
      Call EsportaDati
      
      Worksheets("MASCHERA RICERCA").Select
      Range("K6").Select
      MsgBox ("Quantitˆ Filo Aggiunta")
      
      Set rng = Nothing: Set r = Nothing
      
      Range("M8") = Range("k6")
      
      End Sub

      Vorrei aggiungere questo pezzo ( che ho registrato quindi sicuramente andrà modificato )

      Sub ORDINA()
      '
      ' ORDINA Macro
      '
      
      '
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Clear
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Add2 Key:=Range("Tabella2[[#All],[STATORE]]"), SortOn:= _
              xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          With ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Clear
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Add2 Key:=Range("Tabella2[[#All],[CLIEN]]"), SortOn:= _
              xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          With ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Clear
          ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort. _
              SortFields.Add2 Key:=Range("Tabella2[[#All],[SCAD]]"), SortOn:= _
              xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          With ActiveWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2").Sort
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
          End With
          Range("A2").Select
      End Sub

      Che in pratica va ad ordinare i dati della tabella eseguendo un ordine crescente per 3 colonne.

      Qualcuno può aiutarmi ?

      Grazie mille a tutti

      #49518 Score: 0 | Risposta

      Ale.1989
      Partecipante

        Dimenticavo l'operazione deve essere effettuata prima della call EsportaDati 

         

        #49519 Score: 0 | Risposta

        alexps81
        Moderatore
          58 pts

          Ciao, prova a vedere se ho capito (avevo un tuo vecchio allegato così ho fatto delle prove)

          Inserisci questo codice dopo End Sub della Sub SOMMA() e prima dell'inizio di Private Sub EsportaDati()

          Private Sub Ordina_ElencoOrdini()
              Dim lo As ListObject
              
              Set lo = ThisWorkbook.Worksheets("Elenco Ordini").ListObjects("Tabella2")
              lo.Sort.SortFields.Clear
              
              lo.Sort.SortFields.Add _
                  Key:=lo.ListColumns(1).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
              lo.Sort.SortFields.Add _
                  Key:=lo.ListColumns(7).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
              lo.Sort.SortFields.Add _
                  Key:=lo.ListColumns(8).Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                          
              With lo.Sort
                  .Header = xlYes
                  .MatchCase = False
                  .Apply
              End With
              Set lo = Nothing
          End Sub
          

          Poi nella Sub SOMMA(), prima di Call EsportaDati ci metti questo:

          Call Ordina_ElencoOrdini
          #49520 Score: 0 | Risposta

          Ale.1989
          Partecipante

            Ho provato a fare come mi hai detto ma non funziona, viene selezionata tutta la tabella contenente i dati da ordinare ( esclusa la riga appena creata ) ma non viene ordinata...

            E se provo a cancellare tutti i dati della tabella i dati vengono copiati nella riga 68 invece di partire dalla riga 1... e i dati vengono copiati sempre sulla stessa riga sovrapponendoli....

             

             

            #49521 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              Prova ad allegare il file con il tentativo che hai fatto nel copiare ed incollare il codice. Eventualmente spiega pure i passaggi che portano a far lanciare la macro SOMMA

              #49522 Score: 0 | Risposta

              Ale.1989
              Partecipante

                Ecco il file allegato...

                Ho notato che la data viene inserita in formato diverso da quella originale ( mette prima il mese poi il giorno )

                Allegati:
                You must be logged in to view attached files.
                #49524 Score: 0 | Risposta

                Ale.1989
                Partecipante

                  La macro somma viene lanciata premendo il pulsante aggiungi produzione presente nel foglio maschera ricerca

                  #49526 Score: 0 | Risposta

                  Raffaele53
                  Partecipante
                    23 pts

                    L'ordine che dai alla Tua tabella è differente che riordinare usando le tre scelte assieme.
                    Inserisci questo codice in un Modulo

                    Dopo prima di call EsportaDati inserisci Call Ordina

                    Sub ORDINA()
                    Dim ws As Worksheet: Set ws = Worksheets("Elenco Ordini")
                    Dim Ur
                    Ur = ws.Range("A" & Rows.Count).End(xlUp).Row
                        ws.Sort.SortFields.Clear
                        ws.Sort.SortFields.Add2 Key:=ws.Range("A1:A" & Ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                        With ws.Sort
                            .SetRange Range("A1:H" & Ur)
                            .Header = xlYes
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                        ws.Sort.SortFields.Clear
                        ws.Sort.SortFields.Add2 Key:=ws.Range("G1:G" & Ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                        With ws.Sort
                            .SetRange Range("A1:H" & Ur)
                            .Header = xlYes
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                        ws.Sort.SortFields.Clear
                        ws.Sort.SortFields.Add2 Key:=ws.Range("H1:H" & Ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                        With ws.Sort
                            .SetRange Range("A1:H" & Ur)
                            .Header = xlYes
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                    Set ws = Nothing
                    End Sub
                    #49527 Score: 0 | Risposta

                    alexps81
                    Moderatore
                      58 pts

                      Ciao @Ale.1989

                      andiamo per gradi. Tu hai detto che l'ordinamento della Tabella deve avvenire prima dell'inserimento nel Foglio "Elenco Ordini" però in questo modo è normale che succede che l'ultimo record inserito non verrà ordinato. Quindi penso che devi prima inserire il nuovo record e poi lanciare la procedura di ordinamento della tabella.

                      Per quanto riguarda la storia della data sbagliata...quello è abbastanza normale e frequente. Sistemiamo quel comportamento così:

                      nella Sub EsportaDati sostituisci il ciclo For i....Next con questo:

                      .........
                      .........
                          For i = LBound(arr) To UBound(arr)
                              If IsDate(wsMR.Range(arr(i)).Value) Then
                                  .Cells(urNR + 1, i + 1).Value = CDate(wsMR.Range(arr(i)))
                                  .Cells(urNR + 1, i + 1).NumberFormat = "dd/mm/yyyy"
                              Else
                                  .Cells(urNR + 1, i + 1).Value = wsMR.Range(arr(i)).Value
                              End If
                          Next i
                      .........
                      .........

                      Poi togli quel Range("A1").Select  prima di End With nella Sub Ordina_ElencoOrdini e scrivi subito dopo End With:

                          Worksheets("Elenco Ordini").Activate
                          lo.DataBodyRange.Cells(1, 1).Select
                      

                      Inoltre per migliorare ancora, nella Sub SOMMA inserisci Application.ScreenUpdating = False dopo la dichiarazione delle variabili e Application.ScreenUpdating = True poco prima di End Sub

                      Poi, il codice che Ordina la Tabella funziona così: 

                      Ordina prima la colonna STATORE dal più piccolo al più grande, poi a parità di dimensioni ordina la colonna CLIEN sempre in ordine alfabetico (quindi se hai 2 STATORE = 110x55 dove uno ha come CLIEN NERI e l'altro CIGNI...verrà ordinato prima CIGNI poi NERI), infine a parità di STATORE e CLIEN, verrà ordinata la colonna SCAD

                      Perciò è normale che ti potresti trovare nella condizione che nonostante ci siano più STATORI uguali, potrebbe ordinarsi prima la data più recente proprio perché nel frattempo va prima a ordinare la colonna CIEN in ordine alfabetico

                      #49528 Score: 0 | Risposta

                      Raffaele53
                      Partecipante
                        23 pts

                        Vedo che CIGNI non risulta ordinato, secondo me l'ordine giusto è CLIEN-STATORE-SCAD

                        #49529 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Ciao @raffaele53

                          @Ale.1989 utilizza una ListObject, forse sarebbe meglio sfruttare metodi e proprietà delle ListObject.

                          Poi io avevo inteso che l'O.P. volesse ordinare prima la colonna A, poi dopo il primo ordinamento, creare il secondo ordinamento in base alla colonna G ed infine, a seguito di questo ulteriore ordinamento, ordinare ancora in base alla colonna H.

                          Con il tuo metodo ho notato che ordina la colonna A...poi dimentica quest'ordine e passa a ordinare la colonna G, dimentica anche la colonna G e ordina la colonna H. 

                          Quindi si ottiene come risultato che ordina solo per la colonna H.

                          Almeno così ho notato....

                          #49530 Score: 0 | Risposta

                          Ale.1989
                          Partecipante

                            Ciao ragazzi forse ho risolto modificando l'ordine degli ordinamenti delle colonne ( parto dalla colonna 8 poi alla 7 poi alla 1)

                            Tutto il resto funziona perfettamente, l'unico accorgimento che devo usare e una volta esauriti gli ordini di non cancellare tutte le righe della tabella perché altrimenti mi va in errore.

                            Allego il file con le modifiche apportate

                            Allegati:
                            You must be logged in to view attached files.
                            #49532 Score: 0 | Risposta

                            alexps81
                            Moderatore
                              58 pts

                              Quindi volevi che si ordinasse prima per date, poi per Client e infine per Statore?

                              Ale.1989 ha scritto:

                              l'unico accorgimento che devo usare e una volta esauriti gli ordini di non cancellare tutte le righe della tabella perché altrimenti mi va in errore.

                              Che errore ti da? Hai accennato al fatto che quando cancelli i dati in tabella poi i nuovi inserimenti ripartono non dal rigo 2. Quello accade perché stai utilizzando un ListObject (Tabella). Per gestire il primo rigo vuoto in ListObject ci vuole un approccio diverso. Se il problema è questo...che hai risolto il problema dell'ordinamento (che è l'oggetto della discussione), apri un nuovo Thread che riguarda la gestione del primo rigo vuoto. Al riguardo già dovrei avere una soluzione.

                              #49533 Score: 0 | Risposta

                              Ale.1989
                              Partecipante

                                Si l'ordinamento, che prima eseguivo manualmente tramite le frecce,  segue queste regole, prima ordina lo statore poi ordina il cliente e infine ordina la data così da avere per prime le righe con scadenza pià ravvicinata e a parità di scadenza il primo cliente in ordine alfabetico e a parità di questi 2 fattori lo statore dal più piccolo  al più grande...

                                Allora procedo alla chiusura di questo thread e ne apro uno solo per la gestione del primo rigo...

                                 

                              Login Registrati
                              Stai vedendo 14 articoli - dal 1 a 14 (di 14 totali)
                              Rispondi a: Ordinare Dati tabella
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: