Condividi:        

RIEPILOGO FOGLI

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

RIEPILOGO FOGLI

Postdi talento » 05/01/13 08:24

Buongiorno,
ho in una cartella excel circa 100 fogli con il nome in numero(1,2,3,4).
Vorrei fare un report in un foglio sempre nella stessa cartella solo con il nome dei fogli che in una cella C1 hanno un certo valore.
Esempio : se il foglio numero 1 ha in cella C1 il valore X lo copi altrimenti passi al successivo e così per gli fogli.

Sposto in Applicazioni Office Windows, aurelio37
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Sponsor
 

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 05/01/13 13:08

Ciao Talento e benvenuto nel Forum


dovresti chiarire meglio dove vorresti inserire, nel foglio Riepilogo, il valore della cella e dove inserire il nome del foglio
es. Nome foglio A2 e valore cella B2 (che naturalmente è uguale quanto ricercato)?

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: RIEPILOGO FOGLI

Postdi talento » 05/01/13 15:50

Ciao Flash30005 .
Sheets("riepilogo").Range("a2").Select
nome foglio
valore cella
nome foglio
valore cella
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 05/01/13 20:06

Ho considerato che nel foglio "Riepilogo cella C1 inserisci il valore o stringa da ricercare
e questa macro riporterà nella colonna A sia il nome del foglio che il valore ricercato come mi pare di aver capito dal tuo post

Codice: Seleziona tutto
Sub riportaV()
Range("A2:A65000").ClearContents
For FF = 1 To Worksheets.Count
If Sheets(FF).Name <> "Riepilogo" Then
If Sheets(FF).Range("C1").Value = Sheets("Riepilogo").Range("C1").Value Then
UR = Worksheets("Riepilogo").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(FF).Name
Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(FF).Range("C1").Value
End If
End If
Next FF
End Sub


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: RIEPILOGO FOGLI

Postdi talento » 26/01/13 17:59

Ho provato questa variante ma mi riporta il nome del foglio tante volte quanto sono le celle che hanno il valore di cella K2.
Codice: Seleziona tutto
Sheets("riepilogo").Range("A2:I2" & Sheets("riepilogo").Range("A" & Rows.Count).End(xlUp).Row).ClearContents

For nf = 1 To Worksheets.Count
If Sheets(nf).Name <> "Riepilogo" And Sheets(nf).Name <> "dati" Then
Sheets(nf).Select
j = Sheets("Riepilogo").Range("K2")
    ultimariga = Sheets(nf).Cells(Rows.Count, 2).End(xlUp).Row
    For i = 1 To ultimariga
       If Cells(i, 1) >= j Then
            UR = Worksheets("Riepilogo").Range("A" & Rows.Count).End(xlUp).Row + 1
           
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(nf).Name & "-" & Range("C1")
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(nf).Cells(i, 2).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = Sheets(nf).Cells(i, 3).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 2).Value = Sheets(nf).Cells(i, 4).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 3).Value = Sheets(nf).Cells(i, 5).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 4).Value = Sheets(nf).Cells(i, 6).Value
   
        End If
    Next

Sheets("Riepilogo").Select
End If
Next nf

Con questa va meglio ma comunque riporta il nome del foglio anche se non ci sono dati.
Codice: Seleziona tutto
Sheets("riepilogo").Range("A2:I2" & Sheets("riepilogo").Range("A" & Rows.Count).End(xlUp).Row).ClearContents

For nf = 1 To Worksheets.Count
If Sheets(nf).Name <> "Riepilogo" And Sheets(nf).Name <> "Cliente" And Sheets(nf).Name <> "schedacliente" Then
Sheets(nf).Select
            UR = Worksheets("Riepilogo").Range("A" & Rows.Count).End(xlUp).Row + 1
           
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(nf).Name & "-" & Range("C1")
            x = Sheets("Riepilogo").Range("K2")
           ultimariga = Sheets(nf).Cells(Rows.Count, 2).End(xlUp).Row
           For i = 1 To ultimariga
           If Cells(i, 2) >= CDate(x) Then
 
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(nf).Cells(i, 2).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = Sheets(nf).Cells(i, 3).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 2).Value = Sheets(nf).Cells(i, 4).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 3).Value = Sheets(nf).Cells(i, 5).Value
            Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 4).Value = Sheets(nf).Cells(i, 6).Value
   
        End If
    Next

Sheets("Riepilogo").Select
End If
Next nf
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Anthony47 » 26/01/13 23:50

E invece usando la macro suggerita da Flash?
Nell' ipotesi che scriva accodando e non affiancando, allora modifica la riga
Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(FF).Range("C1").Value
in Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).Value = Sheets(FF).Range("C1").Value

Se hai anche altri fogli che vuoi ignorare nel creare il "riepilogo", allora modifica anche la riga
If Sheets(FF).Name <> "Riepilogo" Then
in If Sheets(FF).Name <> "Riepilogo" And Sheets(FF).Name <> "pippo" Then (questo esempio ignora anche un foglio chiamato "pippo"; puoi aggiungere altri And Sheets(FF).Name <> "NomeFoglio", ma se hai molti piu' fogli da ignorare useremo un altro approccio).

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

Re: RIEPILOGO FOGLI

Postdi talento » 27/01/13 19:55

Escluderei di aggiungere tanti Sheets(FF).Name <> "NomeFoglio" perchè non sappiamo quali fogli soddisfano la condizione If Cells(i, 1) >= j Then.
Posto j = 200 nel foglio riepilogo dobbiamo avere solo i fogli che la soddisfano cioè quelli che in colonna A hanno valori >= j quindi 200,201,205,300,310,325,400 .

foglio 1..............foglio 2...............foglio 3
colonna A...........colonna A.............colonna A
200...................150....................211
201...................155....................219
205...................170....................228
300...................181....................230
310...................189....................245
325...................196....................350
400...................199....................520

nel foglio riepilogo avremo

foglio 1
200
201
205
300
310
325
400
foglio 3
211
219
228
230
245
350
520
il foglio 2 non compare perchè non soddisfa la condizione If Cells(i, 1) >= j Then
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Anthony47 » 28/01/13 00:22

Allora l' ultima descrizione non c' entra niente con quanto avevo capito nei messaggi precedenti, quindi ripartiamo da zero.
Supponiamo che il fatidico J tu lo scriva in foglio Riepilogo cella F1;
1) Vuoi riportare in foglio Riepilogo, diciamo da A2 verso il basso
1a- il nome dei Fogli che in qualsiasi cella di colonna A contengano almeno un valore pari o superiore al valore J
1b- e poi, accodati, i valori della colonna A che soddisfano il confronto "ValoreDellaCella>=J"
2) Ripetendo l' operazione per tutti i fogli presenti eccetto ovviamente il foglio Riepilogo

Per questo prova una macro come questa:
Codice: Seleziona tutto
Sub talett()
myJ = "F1"   '<<< La cella che contiene il valore da sondare
'
Sheets("Riepilogo").Select
JJ = Cells(Rows.Count, 1).End(xlUp).Row + 1
For I = 1 To ThisWorkbook.Worksheets.Count
With Sheets(I)
    If .Name <> "Riepilogo" Then
        If Application.WorksheetFunction.Max(.Range("A:A")) >= Range(myJ) Then
            Cells(JJ, 1).Value = .Name: JJ = JJ + 1
            For K = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
                If .Cells(K, 1) >= Range(myJ) Then
                    Cells(JJ, 1).Value = .Cells(K, 1).Value
                    JJ = JJ + 1
                End If
            Next K
        End If
    End If
End With
Next I
End Sub

Inseriscila in un Modulo standard dell' editor delle macro, poi compila F1 su foglio Riepilogo e lancia la macro talett.

Se vuoi escludere altri fogli dalla ricerca, allora sostituisci la riga
If.Name <> "Riepilogo" Then
con
in If.Name <> "Riepilogo" And .Name <> "pippo" Then '<<< il nome reale del Foglio

Se ancora non ci abbiamo preso allora fai un punto fermo e prova e descrivere piu' analiticamente cosa avresti bisogno di fare.

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

Re: RIEPILOGO FOGLI

Postdi talento » 11/02/13 20:43

Ciao Anthony47, sono riuscito con molto ritardo a testare la tua macro e funziona perfettamente.
Per mie esigenze ho adattato il tuo codice usando come ricerca solo il mese(gennaio:01, febbraio:02) e qui la funzione Max a mio avviso ha dei limiti.
Codice: Seleziona tutto
If UserForm1.TextBox14 = "" Then
MsgBox "Devi Inserire la data di selezione"
Exit Sub
End If


Sheets("riepilogo").Range("A2:I2" & Sheets("riepilogo").Range("A" & Rows.Count).End(xlUp).Row).ClearContents

x = Mid(TextBox14, 1, 2)
Sheets("Riepilogo").Select
JJ = Cells(Rows.Count, 2).End(xlUp).Row + 1

For i = 1 To ThisWorkbook.Worksheets.Count
With Sheets(i)
     If .Name <> "Riepilogo" And .Name <> "schedacliente" And .Name <> "cliente" And .Name <> "finale" Then
     
     h = Application.WorksheetFunction.Max(.Range("E:E"))
          z = CDate(h)
          j = Mid(z, 4, 2)
         
           If j = x Then
            Cells(JJ, 1).Value = .Name ': JJ = JJ + 1                              'codice
            Cells(JJ, 2).Value = Sheets(i).Range("C1").Value & " " & Sheets(i).Range("C2").Value: JJ = JJ + 1       'nominativo
           
           
           For k = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            y = Mid(.Cells(k, 5), 4, 2)
            If y = x Then
           
                    Cells(JJ, 3).Value = CDate(Format(.Cells(k, 2), "dd/mm/yyyy"))
                    Cells(JJ, 4).Value = .Cells(k, 3)
                    Cells(JJ, 5).Value = Replace(.Cells(k, 4), "FATTURA VENDITA", "FV")
                    Cells(JJ, 6).Value = CDate(Format(.Cells(k, 5), "dd/mm/yyyy"))
                    Cells(JJ, 7).Value = Format(.Cells(k, 6), "#,###.00")
                    JJ = JJ + 1
                End If
               
            Next k
        End If
  End If
End With
Next i

Sheets("Riepilogo").Select
UserForm5.Show

Se in textbox14 abbiamno 01(gennaio)Ivengono esclusi i fogli con date 02(febbraio).
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 11/02/13 20:58

Perché hai una condizione If che esclude tutto ciò che è diverso da "x" ovvero da ciò che è hai scritto nel TextBox
per processare tutti i fogli elimina (o commenta) la condizione IF come indicato
Codice: Seleziona tutto
           'If j = x Then  '<<<< elimina o commenta
'...
'...
'...


            Next k  '<<<< esistente da lasciare
       'End If   '<<<<< elimina o commenta



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: RIEPILOGO FOGLI

Postdi talento » 12/02/13 08:28

Eliminando if j = x Then vengono caricati tutti i fogli non essendoci il confronto con la text.
Penso che si debba agire invece su questa riga di codice:
Codice: Seleziona tutto
h = Application.WorksheetFunction.Max(.Range("E:E"))

Ciao
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Anthony47 » 12/02/13 12:27

L' istruzione Application.WorksheetFunction.Max(.Range("E:E")) veniva usato in relazione al layout dati che avevi presentato qui: viewtopic.php?f=26&t=98076&p=565490#p564620

Non so come interpretare l' affermazione "ho adattato il tuo codice usando come ricerca solo il mese", perche' in quel layout cerano dei valori numerici e non date e si parlava di valori superiori a una cera soglia non di periodi temporali.

Il mio suggerimento e' quindi di descrivere il nuovo layout dati e la nuova esigenza.

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

Re: RIEPILOGO FOGLI

Postdi talento » 12/02/13 17:41

Come detto la macro funziona perfettamente e ne sto facendo uso.
Devo eseguire un'ulteriore ricerca sui fogli delle fatture emessse basata sul mese di emissione.
Inserendo il mese nella text 01 mi deve caricare solo i fogli che in colonna E hanno fatture con mese di emissione gennaio e le fatture di quel foglio sempre di gennaio.

foglio 1 ...............foglio 2..............foglio 3
colonna E .............colonnaE............colonnaE
10/01/2013............05/02/2013.........10/01/2013
15/01/2013............10/02/2013.........11/01/2013
07/02/2013............11/02/2013.........22/01/2213

valore textbox = 01
nel foglio finale avremo:

foglio 1
10/01/2013
15/01/2013
foglio 3
10/01/2013
11/01/2013
22/01/2013
il foglio 2 non compare perchè non ci sono fatture emesse in gennaio.

valote textbox = 02 nel foglio finale avremo:

foglio 1
07/02/2013
foglio 2
05/02/2013
10/02/2013
11/02/2013
il foglio 3 non compare non avendo fatture emesse in febbraio.

ciao
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 12/02/13 21:56

Prova questa macro
Codice: Seleziona tutto
Sub riportaV()
Worksheets("Riepilogo").Range("A2:A65000").ClearContents
For FF = 1 To Worksheets.Count
    If Sheets(FF).Name <> "Riepilogo" Then
        URF = Sheets(FF).Range("E" & Rows.Count).End(xlUp).Row
        VT = Val(1)  '<<<< valore casella testo
        For RRF = 2 To URF
            If Month(Sheets(FF).Range("E" & RRF).Value) = VT Then
                If RRF = 2 Then Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(FF).Name
                Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets(FF).Range("E" & RRF).Value
            End If
        Next RRF
    End If
Next FF
End Sub

Sostituisci la variabile VT con il Valore della casella testo

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: RIEPILOGO FOGLI

Postdi talento » 13/02/13 08:39

Ho provato la macro mi da debug su questa riga:
tipo non corrispondente
If Month(Sheets(FF).Range("E" & RRF).Value) = VT Then

Solo per promemoria in colonna E le date sono in formato dd/mm/yyyy e il raffronto deve avvenire solo con il mese mm
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 13/02/13 08:51

Ma in quale foglio fa il debug? e quale riga?
contolla che ci sia una data in quella cella
per sapere il foglio è sufficiente andare con il mouse (una volta in debug e macro attiva) sulla variabile FF
stessa cosa per la riga (RRF), poi vai a verificare se in quel foglio riga x e colonna E hai una data

Per il formato non dovrebbero esserci problemi perché Month(...) prende in esame il mese (mm)

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: RIEPILOGO FOGLI

Postdi Anthony47 » 13/02/13 09:13

La palla di vetro dice che non sono date ma stringhe...
Provate con
Codice: Seleziona tutto
If Month(cDate(Sheets(FF).Range("E" & RRF).Value)) = VT Then

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

Re: RIEPILOGO FOGLI

Postdi Anthony47 » 13/02/13 09:14

Un attimo: e in VT che cosa c' e'? un numero o un testo?
Pero' questa eventuale difformita' produrrebbe solo sempre diseguaglianza dei termini, non certo errore; insomma per ora non c' entra ma "subito dopo" si.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: RIEPILOGO FOGLI

Postdi Flash30005 » 13/02/13 09:21

Come ben dici se in VT ci fosse testo non si compilerebbe il foglio riepilogo ma non andrebbe in errore
comunque avevo specificato che la variabile VT doveva essere Valore(casella_testo)
in questa maniera
Codice: Seleziona tutto
VT = Val(UserForm1.TextBox14)


Secondo me (ricordo dai primi post) aveva altri fogli oltre a "Riepilogo" che non dovevano essere processati
la macro da me postata non processa solo il foglio "Riepilogo" quindi se ce ne sono altri avrà sicuramente errore fino a quando non li inserisce nella condizione di "esclusione"

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: RIEPILOGO FOGLI

Postdi talento » 14/02/13 07:57

Ho escluso tutti i fogli che non devono essere processati ma mi da sempre:
errore di run time 13
tipo non corrispondente
If Month(Sheets(FF).Range("E" & RRF).Value) = VT Then <<<<<<<<<<< riga in giallo
nella colonna E a partire dalla riga 8 sono tutte Date
per prova ho posto
textbox13 = Month(Sheets(FF).Range("E" & RRF).Value) esce 12
talento
Utente Junior
 
Post: 40
Iscritto il: 31/12/12 17:08

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "RIEPILOGO FOGLI":


Chi c’è in linea

Visitano il forum: Ricky0185 e 38 ospiti