Condividi:        

Macro ordinamento

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Macro ordinamento

Postdi statam » 29/05/16 11:42

Ciao a tutti,
ho un foglio excel pieno di dati con "nomi prodotti" (colonna A) e "prezzi" (colonna B).
Questo viene aggiornato periodicamente e i passaggi che faccio ogni volta sono:
1. Metto il filtro per ordinare in ordine decrescente (dal prezzo più alto al prezzo più basso)
2. Coloro di rosso le celle con i prezzi uguali o superiori a 200 euro
3. Coloro di giallo le celle con i prezzi uguali o superiori a 100 euro e inferiori a 200 euro
4. Nello stesso foglio di fianco a questi dati creo una tabella con tante righe quante sono quelle colorate (rosse + gialle)

Vorrei fare una macro per automatizzare questi passaggi, come posso fare?
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Sponsor
 

Re: Macro ordinamento

Postdi Statix » 29/05/16 12:01

Ciao statam,
puoi usare il registratore di macro,
visualizza
macro
registra macro
e fai tutte le operazioni che fai di solito, quando hai finito
fermi il registratore della macro,
vai modifica macro e qui vedrai il listato delle tue operazioni.
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1287
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Macro ordinamento

Postdi Statix » 29/05/16 12:01

a
Ultima modifica di Statix su 29/05/16 12:04, modificato 1 volte in totale.
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1287
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Macro ordinamento

Postdi Statix » 29/05/16 12:01

C
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1287
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Macro ordinamento

Postdi statam » 29/05/16 12:14

Statix ha scritto:Ciao statam,
puoi usare il registratore di macro,
visualizza
macro
registra macro
e fai tutte le operazioni che fai di solito, quando hai finito
fermi il registratore della macro,
vai modifica macro e qui vedrai il listato delle tue operazioni.


Non posso fare registra macro perchè i dati del foglio ogni volta che vengono aggiornati sono diversi e gli importi superiori a 200 euro o superiori a 100 euro non saranno sempre gli stessi
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Macro ordinamento

Postdi alfrimpa » 29/05/16 14:06

Ciao statam e ben ritrovato.

Allega un file di esempio con il risultato voluto inserito manualmente.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Macro ordinamento

Postdi statam » 29/05/16 14:26

alfrimpa ha scritto:Ciao statam e ben ritrovato.

Allega un file di esempio con il risultato voluto inserito manualmente.

Grazie Alfrimpa,
allego il file di esempio: http://www.filedropper.com/cartel1

I dati nel foglio cambiano ogni volta che c'è da fare un aggiornamento, una volta incollati i dati i passaggi che faccio sono quelli numerati riportati nel primo post (che vorrei automatizzare con una macro a pulsante)

grazie ancora
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Macro ordinamento

Postdi wallace&gromit » 29/05/16 15:01

Ciao, mi permetto di inserirmi nella discussione con una mia perplessità:
se ho capito bene il problema non è necessario ricorrere alle macro.
Allego un file di esempio che mostra la via che percorrerei io:
- cerco i valori massimi nella lista con la formula:
Codice: Seleziona tutto
=SE(GRANDE(E$19:E$128;RIF.RIGA()-2)>100;GRANDE(E$19:E$128;RIF.RIGA()-2);"")

- evidenzio a fianco il nome prodotto:
Codice: Seleziona tutto
=SE(G3<>"";INDICE(D$19:D$128;CONFRONTA(G3;E$19:E$128;0));"")

con un formato condizionale evidenzio la distinzione tra chi è > 100 e chi > 200.

Ecco il file:
http://www.filedropper.com/formulaestraivalori
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Macro ordinamento

Postdi statam » 29/05/16 15:54

In reatlà preferirei una macro a pulsante perchè il file poi non dovrà essere gestito da me e almeno con la macro a pulsante chi gestirà il file dovrà solo incollare e premere il pulsante..
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Macro ordinamento

Postdi Anthony47 » 30/05/16 00:06

Prima di rispondere vorrei sapere che cosa intendi per "Tabella" e a cosa dovrebbe poi servirti.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro ordinamento

Postdi statam » 30/05/16 11:49

Anthony47 ha scritto:Prima di rispondere vorrei sapere che cosa intendi per "Tabella" e a cosa dovrebbe poi servirti.

Ciao


Ciao Anthony, è la tabella che sul file che ho allegato trovi sulla destra, serve per delle analisi, ma diciamo che non è fondamentale automatizzarla, anzi visto che mi sembra piuttosto complicato dimentichiamoci proprio di questa parte...
Dunque quello che vorrei fare con una macro da associare a un pulsante è questo:
1. Metto il filtro per ordinare in ordine decrescente (dal prezzo più alto al prezzo più basso) (il report è sempre uguale quindi il filtro viene messo sempre nelle stesse posizioni...altrimenti se c'è un altro metodo per ordinare i dati, ovvero il nome e il prezzo relativo, dal più grande al più piccolo va anche bene)
2. Coloro di rosso le celle con i prezzi uguali o superiori a 200 euro
3. Coloro di giallo le celle con i prezzi uguali o superiori a 100 euro e inferiori a 200 euro

grazie ancora
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Macro ordinamento

Postdi wallace&gromit » 30/05/16 14:04

statam ha scritto:chi gestirà il file dovrà solo incollare e premere il pulsante..


scusa se sono testardo, ma con la formula non deve nemmeno premere il pulsante! hai provato il mio file?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Macro ordinamento

Postdi peppo55 » 30/05/16 14:26

Ciao statam,

vedi se l'esempio allegato va bene.Nella colonna Costo ho inserito la formattazione condizionale.

http://www.filedropper.com/cartel1esempio
peppo

Excel 2010
peppo55
Utente Senior
 
Post: 167
Iscritto il: 30/09/12 13:51

Re: Macro ordinamento

Postdi Anthony47 » 31/05/16 00:59

statam ha scritto:è la tabella che sul file che ho allegato trovi sulla destra, serve per delle analisi, ma diciamo che non è fondamentale automatizzarla, anzi visto che mi sembra piuttosto complicato dimentichiamoci proprio di questa parte
Non e' difficile, ma se non si capisce di cosa si parla allora e' impossibile.
Allora mi pare che si tratta di una tabella con un valore numerico in colonna 1 e due formule nelle colonne successive....
Mi permetto di lavorare "sopra" la soluzione proposta da peppo (vedi sopra).
1-Trasforma in Tabella l'intervallo H:I occupato dai dati e dalle formule
a) Seleziona l'area; Menu /Inserisci /Tabella; spunta Tabella con intestazione; premi Ok
b) Accertati che venga chiamata Tabella1 (lo vedi nella scheda Progettazione di Strumenti tabella)
2- in un nuovo Modulo standard del vba inserisci questo codice
Codice: Seleziona tutto
Sub FormCond()
'Applica la formattazione condizionale all'elenco:
    Columns("E:E").Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("E4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=E(E4>=100;E4<200)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=E4>=200"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
End Sub

Rimanendo nel vba, vai sul modulo Foglio1 e modifica la macro in
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Range("E4").Select
Application.CommandBars.ExecuteMso ("SortDescendingExcel")
Call FormCond
tabr = Application.WorksheetFunction.CountIf(Range("E:E"), ">=100")
With ActiveSheet.ListObjects("Tabella1")
    .Resize Range("$H$3").Resize(tabr + 1, .ListRows(1).Range.Count)
    .DataBodyRange.Cells(1, 1).Offset(.ListColumns(1).DataBodyRange.Count, 0). _
        Resize(100, .ListRows(1).Range.Count).Clear
End With
End Sub

In questo modo quando premi il pulsante presente sul foglio:
-l'elenco viene ordinato
-vengono rimossi eventuali colori applicati all'elenco
-viene applicata all'elenco la formattazione condizionale necessaria per visualizzare in Giallo e in Rosso
-la tabella presente viene ridimensionata per avere il giusto numero di righe

Quello che non sono in grado di fare e' compilare la colonna 1 della tabella, ed eventualmente adattare la formula di colonna 3; perche' nulla sappiamo di queste cose.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro ordinamento

Postdi statam » 01/07/16 19:27

Anthony47 ha scritto:
statam ha scritto:è la tabella che sul file che ho allegato trovi sulla destra, serve per delle analisi, ma diciamo che non è fondamentale automatizzarla, anzi visto che mi sembra piuttosto complicato dimentichiamoci proprio di questa parte
Non e' difficile, ma se non si capisce di cosa si parla allora e' impossibile.
Allora mi pare che si tratta di una tabella con un valore numerico in colonna 1 e due formule nelle colonne successive....
Mi permetto di lavorare "sopra" la soluzione proposta da peppo (vedi sopra).
1-Trasforma in Tabella l'intervallo H:I occupato dai dati e dalle formule
a) Seleziona l'area; Menu /Inserisci /Tabella; spunta Tabella con intestazione; premi Ok
b) Accertati che venga chiamata Tabella1 (lo vedi nella scheda Progettazione di Strumenti tabella)
2- in un nuovo Modulo standard del vba inserisci questo codice
Codice: Seleziona tutto
Sub FormCond()
'Applica la formattazione condizionale all'elenco:
    Columns("E:E").Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("E4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=E(E4>=100;E4<200)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=E4>=200"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
End Sub

Rimanendo nel vba, vai sul modulo Foglio1 e modifica la macro in
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Range("E4").Select
Application.CommandBars.ExecuteMso ("SortDescendingExcel")
Call FormCond
tabr = Application.WorksheetFunction.CountIf(Range("E:E"), ">=100")
With ActiveSheet.ListObjects("Tabella1")
    .Resize Range("$H$3").Resize(tabr + 1, .ListRows(1).Range.Count)
    .DataBodyRange.Cells(1, 1).Offset(.ListColumns(1).DataBodyRange.Count, 0). _
        Resize(100, .ListRows(1).Range.Count).Clear
End With
End Sub

In questo modo quando premi il pulsante presente sul foglio:
-l'elenco viene ordinato
-vengono rimossi eventuali colori applicati all'elenco
-viene applicata all'elenco la formattazione condizionale necessaria per visualizzare in Giallo e in Rosso
-la tabella presente viene ridimensionata per avere il giusto numero di righe

Quello che non sono in grado di fare e' compilare la colonna 1 della tabella, ed eventualmente adattare la formula di colonna 3; perche' nulla sappiamo di queste cose.

Ciao


Ciao Anthony, innanzi tutto scusa se ti rispondo solo ora ho avuto alcuni problemi.
Ti voglio ringraziare per il tuo aiuto e la tua disponibilità, purtroppo non sono riuscito ad utilizzare i tuoi codici e adattarli alle mie esigenze che nel frattempo sono cambiate e diventate più "semplici".

Dunque vorrei rispiegare brevemente quello che mi serve e darti un file di esempio per comprendere meglio:

http://www.filedropper.com/testordina

Ho un file excel contenente tot fogli quanti sono i mesi dell'anno e uno per una specie di analisi. In ogni foglio (mese) viene estrapolato un report (sempre nelle stesse posizioni, anche se varia la lunghezza del report in verticale). Ognuno di questi report contiene principalmente il nome dei prodotti e i prezzi (negativi).
Una volta incollato il report sul foglio del mese corrente, quello che faccio io manualmente e che mi servirebbe automatizzare con una macro (da attaccare a un pulsante) è:

1. Seleziona il range di celle C4:K9999 (così che se il report sia più lungo venga comunque selezionato)
2. Inserisci filtro per ordinare i dati in ordine decrescente e ordina dal più piccolo al più grande (i prezzi sono in negativo quindi in alto ci dovranno essere quelli più negativi)
3. Colora di rosso chiaro le righe (range di celle C:J) dei prodotti con i prezzi >= -200 e colora di giallo quelli >= -100 & < -200

Per i punti 1 e 2 ho provato a registrare la macro con il registratore e ho prodotto questo risultato:
Codice: Seleziona tutto
Sub order()
'
' order Macro
'

'
    Range("C4:K1278").Select
    Selection.AutoFilter
    ActiveWindow.SmallScroll Down:=-27
    ActiveWorkbook.Worksheets("Settembre").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Settembre").AutoFilter.Sort.SortFields.Add Key:= _
        Range("J4:J330"), SortOn:=xlSortOnValues, order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Settembre").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


L'unica cosa che cambia da foglio a foglio (penso) è proprio il nome del foglio (settembre, ottobre ecc.) quindi penso che potrei fare una macro registrata per ogni foglio, inserirla nel pulsante "ordina" e risolverei.
Invece per il punto 3 non saprei proprio come fare.


Ultima cosa: nell'ultimo foglio "analisi" vorrei che in automatico comparissero, per ogni mese nelle celle adatte (basta guardare il foglio analisi per capire), i nomi dei prodotti con importi superiori o uguali ai -200 o alternativamente quelli colorati di rosso (penso si possa fare con un cerca.vert ma non riesco a costruirlo correttamente)
statam
Utente Junior
 
Post: 47
Iscritto il: 30/12/15 19:30

Re: Macro ordinamento

Postdi Anthony47 » 06/07/16 01:37

Nella macro di ordinamento puoi sostituire ActiveWorkbook.Worksheets("Settembre") con ActiveSheet, in modo da avere la stessa macro in grado di "lavorare" ogni foglio.

Quanto ai colori, si possono applicare con la formattazione condizionale; guarda in Menu /Home /Formattazione condizionale /Regole evidenziazione celle; troverai tutte le combinazioni che ti servono.

Per l'ultima richiesta si puo' affrontare con il filtro automatico e una macro autoregistrata:
-applica il filtro automatico per il valore da filtrare (quindi Minore di -200)
-seleziona D5:D1000
-copia e poi incolla in Analisi!C5
-premi Esc e interrompi la registrazione.

Poi nel codice della macro, sostituisci le righe da Sheets("analisi").Select fino a End Sub con questo codice:
Codice: Seleziona tutto
    cmon = ActiveSheet.Name
    Sheets("analisi").Select
    mymatch = Application.Match(cmon, Range("A3:Z3"), 0)
    If Not IsError(mymatch) Then
        Cells(5, mymatch).Select
        ActiveSheet.Paste
    Else
        MsgBox ("Non trovato in foglio Analisi il mese " & cmon & _
            vbCrLf & "Elenco prodotti non incollato")
    End If
    Application.CutCopyMode = False
    Sheets(cmon).Select
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Macro ordinamento":


Chi c’è in linea

Visitano il forum: raimea e 32 ospiti