Condividi:        

Aggiornamento foglio excel condizionato

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

Aggiornamento foglio excel condizionato

Postdi mondogrosso » 19/06/14 16:58

Ciao Ragazzi,
avrei un quesito da porre al forum. Ho allegato un file excel di esempio al link seguente:

http://www.filedropper.com/provaforum

Avrei necessita di scrivere un codice VBA che mi consenta di aggiornare i folgi January, February, e così via sulla base dei valori che inserisco nelle celle in grigio del folgio "Daily". Mi spiego meglio: il foglio in cui saranno inseriri i dati sarà il foglio "Daily", il codice dovrebbe aggiornare automaticamente le celle nei fogli "January", February, e mesi successivi con i valori inseririti nel folgio "Daily" nelle colonne "A" (Classe) e "B" (Prodotto), nella riga "1" (Giorno); ad esempio se nel foglio "Daily" seleziono il giorno 01/01/2014 e inserisco il valore 8 in corrispondenza della Classe "Focaccia", del prodotto "Base" e della Categoria "P", nel folgio "January" mi dovrebbe comparire lo stesso valore nella cella "C3"; se nel foglio "Daily" seleziono il giorno 01/02/2014 e inserisco il valore 8 in corrispondenza della Classe "Focaccia", del prodotto "Base" e della Categoria "P", nel folgio "February" mi dovrebbe comparire lo stesso valore nella cella "C3"; e così via...

Il codice che ho sviluppato e non funziona è il seguente:

Codice: Seleziona tutto
Sub prova_selezione ()
T = 1
S = 3
A = 3
For R = 3 To 8
Do
Do
If Worksheets("January").Cells(R, T) = Worksheets("Daily").Cells(S, T) Then
If Worksheets("January").Cells(R, T + 1) = Worksheets("Daily").Cells(S, T + 1) Then
If Worksheets("January").Cells(T, A) = Worksheets("Daily").Cells(T, T + 2) Then
If Worksheets("January").Cells(R + 1, A) = Worksheets("Daily").Cells(R + 1, A) Then
   Worksheets("January").Cells(R, A) = Worksheets("Daily").Cells(R, A)
End If
End If
End If
S = S + 1
Loop Until S < 700
A = A + 1
Loop Until A < 500
Next R
Worksheets("January").Select
End Sub


Si può fare?

Grazie in anticipo della disponibilità
Lucio
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Sponsor
 

Re: Aggiornamento foglio excel condizionato

Postdi Flash30005 » 19/06/14 18:36

Con questa macro dovresti risolvere
Codice: Seleziona tutto
Sub RiportaDati()
Worksheets("Daily").Select
UR1 = Range("A" & Rows.Count).End(xlUp).Row
MioM = Month([C1])
MiaData = [C1]
Select Case MioM
Case 1
FF = "January"
Case 2
FF = "February"
Case 3
FF = "March"
Case 4
FF = "April"
Case 5
FF = "May"
Case 6
FF = "June"
Case 7
FF = "July"
Case 8
FF = "August"
Case 9
FF = "September"
Case 10
FF = "October"
Case 11
FF = "November"
Case 12
FF = "December"
Case Else
MsgBox "Mese Errato"
Exit Sub
End Select
For RR1 = 3 To UR1
    MioCP = Cells(RR1, 1).Value & Cells(RR1, 2).Value
    MioP = Cells(RR1, 3).Value
    MioW = Cells(RR1, 4).Value
    URF = Worksheets(FF).Range("A" & Rows.Count).End(xlUp).Row
    For RRF = 3 To URF
        MioCPF = Worksheets(FF).Cells(RRF, 1).Value & Worksheets(FF).Cells(RR1, 2).Value
        If MioCP = MioCPF Then
        For CCF = 3 To URF
        If Worksheets(FF).Cells(1, CCF).Value = MiaData Then
        Worksheets(FF).Cells(RRF, CCF).Value = MioP
        Worksheets(FF).Cells(RRF, CCF + 1).Value = MioW
        GoTo SaltaRR1
        End If
        Next CCF
        End If
    Next RRF
SaltaRR1:
Next RR1
End Sub

La macro va attivata con un pulsante o con tasti di scelta rapida che trovi nelle opzioni della macro

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 23/06/14 09:41

Ciao flash30005,
grazie, funziona benissimo; scusa per il ritardo ma ho avuto problemi con la connessione.
Approfitto ulterioremente della tua disponibilità per sottoporti un altro quesito; nel file in allegato avrei bisogno di creare nel foglio "Mese" un elenco condizionato nelle colonna "C" ("Variante") in cui i valori siano selezionati dal foglio "Database" che a sua volta alimenta il folgio "Prodotti". Per quanto riguarda le colonne "A" e "B" ho risolto con la convalida dati selezionando elenco e inserendo il riferimento ad una formula relativa al foglio "Prodotti", ma per quanto riguarda la colonna "C" non riesco a farlo poichè dovrei inserire una formula per ogni "Categira-Prodotto" e il foglio diventerebbe troppo pesante. Ci sarebbe una codice vba o una formula che mi permetta di costruire un elenco condizionato nella colonna "C" utilizzando un solo riferimento nella convalida dati?
Grazie della disponibilità.
Lucio

http://www.filedropper.com/provaforum2
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi Flash30005 » 23/06/14 11:07

Entra Nel Vba e seleziona il foglio "Mese"
inserisci questo codice
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
URM = Range("A" & Rows.Count).End(xlUp).Row
URDB = Worksheets("Database").Range("A" & Rows.Count).End(xlUp).Row
Area = "B2:B" & URM
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
MioP = ActiveCell.Offset(0, -1).Value & ActiveCell.Value
For RRD = 2 To URDB
MiopD = Worksheets("Database").Range("A" & RRD).Value & Worksheets("Database").Range("B" & RRD).Value
If MioP = MiopD Then ActiveCell.Offset(0, 1).Value = Worksheets("Database").Range("C" & RRD).Value
Next RRD
Application.EnableEvents = True
End If
End Sub

Supposto che in colonna "A" ci sia già la Categoria
al momento che viene cambiato, con la convalida, il Prodotto (in B) otterrai in "C" la Variante
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 23/06/14 11:32

Ciao Flah30005,
grazie per la risposta rapida e mi scuso per non aver illustrato il problema in modo chiaro. Il codice funziona bene se ad ogni combinazione "categora"/"prodotto" fosse associata una sola variante, ma nel mio database ad ogni combinazione è associata più di una variante, pertanto nella colonna "C" dovrebbe comparire un elenco di tutte le "varianti" associate a quel determinato"prodotto" e a quella determinata "categoria".
Es.
Categoria Prodotto Variante
Focaccia Regular Prosciutto
Focaccia Regular Stracchino
Focaccia Regular Speck
Pizza Regular Margherita
Pizza Regular Capricciosa
Pizza Regular Diavola

Con questi valori di input nella colonna "C", selezionando "Focaccia" e "Regular" rispettivamente nella colonna "A" e "B", dovrebbe comparire un elenco a tendina che consenta la scelta tra "Prosciutto-Stracchino-Speck", e così via....

Grazie ancora per la disponibilità.
Lucio
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi Flash30005 » 23/06/14 15:20

Da queste specifiche non ha senso la colonna B (Prodotto) nel foglio Mese
quindi è sufficiente che tu scriva nel foglio Database in Colonna C (esistente) la variante 1, in D la variante 2 e in E la variante 3 etc etc
e modifichi la macro precedente con questa
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
URM = Range("A" & Rows.Count).End(xlUp).Row
URDB = Worksheets("Database").Range("A" & Rows.Count).End(xlUp).Row
Area = "A2:A" & URM
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
MioP = ActiveCell.Value
For RRD = 2 To URDB
MiopD = Worksheets("Database").Range("A" & RRD).Value
If MioP = MiopD Then
 Range("C" & Target.Row).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Database!$C$" & RRD & ":$Z$" & RRD
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Exit For
End If

Next RRD
Application.EnableEvents = True
End If
End Sub


Vedi immagine della disposizione varianti
Immagine
caricare immagini
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 23/06/14 15:49

Ciao Flash30005,
grazie ancora della disponibilità e spero di poterti rubare un altro pò di tempo. La colonna "B" a me serve poichè ad ogni tipologia di prodotto è associato un certo numero di varianti e nel mio database viene assegnato un ID alla seguente combinazione: "Categoria + Prodotto + Variante". Ad esempio alla categoria "Focaccia" sono associate tutte le varianti di focaccia ma le varianti associate al prodotto "Regular" possono essere in numero uguale o inferiore al numero di quelle associate alla categoria "Focaccia"; di seguito ti riporto i dati di esempio.
Es.
Categoria Prodotto Variante
Focaccia Regular Prosciutto
Focaccia Regular Stracchino
Focaccia Regular Speck
Focaccia Base Stracchino
Focaccia Premium Prosciutto
Pizza Regular Margherita
Pizza Regular Capricciosa
Pizza Regular Diavola
Pizza Base Gorgonzola
Il numero di varianti per la "Focaccia" è 3 ma per il prodotto "Focaccia+Regular" è solo 1.

Spero di averti illustrato bene la questione.

Allego di nuovo il file prova.

http://www.filedropper.com/provaforum2_1

Lucio
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi Flash30005 » 24/06/14 00:06

Mi hai rimandato il primo file al quale ho risposto con la prima macro. 8)
Ora ti chiedo se le varianti le puoi mettere nelle colonne successive alla colonna C oppure no
es. se Focaccia Premium può avere Speck, prosciutto o altro queste le puoi mettere nella colonna D, colonna E etc?
Se si, modificherò la macro che non è altro una miscellanea tra la prima e la seconda già inviate
Altrimenti si dovranno usare n colonne di appoggio per creare gli elenchi di convalida
parlo di "n" colonne perché non credo che le categorie si limiteranno a 4 come dal tuo file prova e questo comporta ogni volta un aggiustamento manuale: poco pratico e che evito di fare.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 24/06/14 08:35

Buongiorno Flash30005,
credo di aver trovato una soluzione non troppo veloce ma che fa al caso mio. Ho creato un foglio di appoggio dove sono riportate sulla prima riga i prodotti (grazie alla macro "filtra_e_trasponi") e nelle colonne tutte le varianti relative al prodotto nella prima riga in modo da poter utilizzare la convalida dati con riferimento: =SCARTO("Foglio_appoggio"!$A$2:$KN$300;0;CONFRONTA($B2;"Foglio_Appoggio"!$A$1:$KN$1;0)-1;50;1), dove $B2 è il riferimento di "Prodotto" nel foglio mese; ho provato a scrivere un codice che riporti nel foglio di appoggio tutte i "Prodotti" e le "Varianti" inserite nel database ma non sono riuscito a riportare i dati in modo ordinato e sto scrivendo una macro per ogni "Prodotto" (lavoro abbastanza impegnativo!!!).
La macro per copiare i prodotti nella prima riga è questa:

Codice: Seleziona tutto
Sub filtra_e_trasponi_univoci_database()
' macro per filtro avanzato prodotti per elenchi condizionati
UR = Worksheets("Database").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("Database").Range("B1:B" & UR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Appoggio_#5").Range("A1"), Unique:=True
Worksheets("Foglio_Appoggio").Range("A1:KN1").Clear
Worksheets("Appoggio_#5").Range("A2:A300").Copy
Worksheets("Foglio_Appoggio").Range("A1:KN1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub


La macro per copiare le varianti nelle colonne è questa:

Codice: Seleziona tutto
Sub Copia_in_base_a_celle_items_elenchi_24()
'Macro per copiare in un altro foglio una colonna con la condizione in altra colonna
Application.ScreenUpdating = False
LR1 = Worksheets("Database").Cells(Rows.Count, "B").End(xlUp).Row
LR2 = Worksheets("Foglio_Appoggio").Cells(Rows.Count, "X").End(xlUp).Row + 1
With Worksheets("Database")
For C = 1 To LR1
For R = 2 To LR1
If Worksheets("Database").Cells(R, 2) = Worksheets("Foglio_Appoggio").Cells(1, C) Then
Worksheets("Database").Cells(R, 3).Copy
Worksheets("Foglio_Appoggio").Cells(LR2, C).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
LR2 = LR2 + 1
End If
Next R
Next C
End With
End Sub


Come vedi il procedimento è un pò macchinoso, si potrebbe rendere più rapido?
Ti allego un nuovo file con le macro.

http://www.filedropper.com/provaforum3

Grazie ancora della tua disponibilità.
Lucio
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi Flash30005 » 24/06/14 23:30

Non ho tempo di analizzare le tue macro "macchinose"
anche perché penso che sia molto più veloce la soluzione che ti stavo proponendo ma non ti sei degnato nemmeno di rispondere al mio quesito che avrebbe messo fine al problema con una soluzione funzionante.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 26/06/14 05:31

Ciao Flash30005,
scusa per il il malinteso ma la risposta al tuo quesito è no poichè il database si sviluppa sulle colonne e dovrei utilizzare una macro che mi riporti i valori sulle righe. In ogni caso sono riuscito a creare il ciclo e gli elenchi condizionati, soprattutto grazie a quello che sto apprendendo nel forum :)
Ora avrei un altra questione da sottoporre, di cui allego il solito file. Il foglio mese sarà aggiornato quotidianamente e la questione è questa:
dovrei riportare nell'intervallo "A302:A336" i valori, nel caso specifico prodotti, della colonna "AF" diversi da "vuoto" e dovrei fare in modo che, quando il file viene aggiornato il giorno successivo, nell'intervallo "A302:A336" vengano aggiunti solo i nuovi valori, diversi da vuoto e da quelli già presenti nell'intervallo, che non devono essere cancellati. Ad esempio nel giorno 01/06/2014 nell'intervallo ho i seguenti valori:
- Regular
- Base
- Premium
Il giorno 02/06/2014 aggiungo il prodotto Coppa e tolgo il prodotto Base; a tale data nell'intervallo dovrei avere i seguenti valori:
- Regular
- Base
- Premium
- Coppa
Potreste aiutarmi con la soluzione?
Grazie della disponibilità.
Lucio

http://www.filedropper.com/provaforum2_3
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi Anthony47 » 27/06/14 23:43

Credo che ti possa aiutare una macro come questa.
Codice: Seleziona tutto
Sub IncrementaProd()
Dim mySumm As Range, LastProd As Long, I As Long
'
Set mySumm = Range("A302:A336")         '<<< Le celle riservate per i Prodotti
'
LastProd = Evaluate("=MAX((len(AF1:AF333)>0)*(ROW(AF1:AF333)))")
For I = 2 To LastProd
    If Cells(I, "AF").Value <> "" Then
        If Application.WorksheetFunction.CountIf(mySumm, Cells(I, "AF")) = 0 And _
          mySumm.Cells(mySumm.Rows.Count, 1).Value = "" Then
            mySumm.Cells(mySumm.Rows.Count + 1, 1).End(xlUp).Offset(1, 0) = Cells(I, "AF")
        End If
    End If
Next I
'
End Sub

Ovviamente il file andra' poi salvato in formato "xlsm".

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

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 29/06/14 10:07

Grazie Anthony,
funziona perfettamente :)
Buona domenica...
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04

Re: Aggiornamento foglio excel condizionato

Postdi mondogrosso » 30/06/14 13:43

Ciao a tutti,
ho scritto il codice seguente che copia i valori del "Foglio_1", che può essere aggiornato, sul "Foglio_2" in un altro file. La macro funziona ma copia sia celle con valori che celle vuote ed è un pò lenta. I dati di input del foglio sono sul "Foglio_3", da qui il contatore URC.

Si potrebbe velocizzare?

Codice: Seleziona tutto
Sub Copia_Dati_Foglio_2()
    Dim Nomefile As String
    percorso = Application.ActiveWorkbook.Path
    nfile = "\" & "Nome_primo_file.xlsx"
            Application.Workbooks.Open percorso & nfile
            URA = Workbooks("Nome_primo_file.xlsm").Worksheets("Foglio_1").Range("A" & Rows.Count).End(xlUp).Row
            URC = Workbooks("Nome_primo_file.xlsm").Worksheets("Foglio_3").Cells(1, Columns.Count).End(xlToLeft).Column
            For RRC = 1 To URC
              For RRA = 1 To URA
                    Workbooks("Nome_primo_file.xlsm").Worksheets("Foglio_1").Cells(RRA, RRC).Copy
                    Workbooks("Nome_secondo_file.xlsx").Worksheets("Folgio_2").Cells(RRA, RRC).PasteSpecial Paste:=xlPasteValues,   Operation:=xlNone, SkipBlanks:= _
                    False, Transpose:=False
              Next RRA
            Next RRC
                Workbooks("Nome_secondo_file.xlsx").Close savechanges:=True
End Sub


Grazie mille,
Lucio
mondogrosso
Utente Junior
 
Post: 14
Iscritto il: 17/07/13 11:04


Torna a Applicazioni Office Windows


Topic correlati a "Aggiornamento foglio excel condizionato":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti