Risolto Trovare un valore su più fogli

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
Avrei due precisazioni da fare:
  1. Da quanto ho capito non potranno esserci due clienti che hanno lo stesso prodotto nello stesso mese; è corretto?
  2. il file con 3/4 fogli (clienti va bene) ma se vi dovessero essere 50 fogli (clienti) magari pieni di dati un rallentamento del file credo che sarà inevitabile.
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
si, la sto provando...
ho avuto 3 problemi e sto cercando di prendere in giro il sistema per aggirarli:
_problema1:
mi da #valore se al posto di "pippo" ci sta scritta una parola con dei simboli tipo "pippo - (A)" ma ho fatto delle prove e lo / al posto del - sembra piacergli di più :batticinque:

_problema2:
la formula =TrovaCliente(C13;7) non si aggiorna in modo automatico ma va scritta ogni volta ma credo dipenda dal problema n.3

_problema 3:
praticamente mi riporta sempre 0 se la parola che deve cercare è già scritta nei mesi precedenti (es. se pippo è scritto in tutte le celle da gennaio a novembre lui mi trova il cliente solo se metto nella formula 1... se metto 2 o 3 o 11 mi da 0)
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
Avrei due precisazioni da fare:
  1. Da quanto ho capito non potranno esserci due clienti che hanno lo stesso prodotto nello stesso mese; è corretto?
  2. il file con 3/4 fogli (clienti va bene) ma se vi dovessero essere 50 fogli (clienti) magari pieni di dati un rallentamento del file credo che sarà inevitabile.
non potranno esserci due clienti che hanno lo stesso prodotto nello stesso mese - si si è corretto!

...50 fogli (clienti) MAGARI!!!!! 😄 per il momento sono 12 ma non ci sono tantissimi dati... anzi con il tempo si andrà a scremare molto...
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
Il problema 2 credo di averlo risolto.

Per il 3 ci devo pensare e capire perchè accade.

Mi rispondi al punto 1 del mio post 21?

Edit ah ok ci siamo sovrapposti.
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
F @Federica Liparota

Altro giro altra corsa Muoio_muoio

Prova quest'altra function

Visual Basic:
Function TrovaCliente(cod As Range, mese As Integer)
Dim i As Integer
Dim col As Integer
Dim rng As Range
Dim cel As Range
Application.Volatile
Select Case mese
    Case Is = 1
        col = 3
    Case Is = 2
        col = 5
    Case Is = 3
        col = 7
    Case Is = 4
        col = 9
    Case Is = 5
        col = 11
    Case Is = 6
        col = 13
    Case Is = 7
        col = 15
    Case Is = 8
        col = 17
    Case Is = 9
        col = 19
    Case Is = 10
        col = 21
    Case Is = 11
        col = 23
    Case Is = 12
        col = 25
End Select
For i = 2 To Sheets.Count
    Set rng = Sheets(i).Range(Sheets(i).Cells(4, col), Sheets(i).Cells(29, col))
    For Each cel In rng
        If cel.Value = cod.Value Then
            TrovaCliente = Sheets(i).Name
        End If
    Next cel
Next i
End Function
Ti allego il file.

Però sono abbastanza convinto che nell'utilizzo con il tuo file "vero" potranno sorgere altri problemi (comunque speriamo di no).
 

Allegati

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
Una che mi veniva in mente: se Cliente1 e Cliente3 hanno entrambi ad agosto PIPPO1234 cosa deve restituire la funzione Cliente1 o Cliente3? o tutti e due?

O è un caso che non può verificarsi
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
Una che mi veniva in mente: se Cliente1 e Cliente3 hanno entrambi ad agosto PIPPO1234 cosa deve restituire la funzione Cliente1 o Cliente3? o tutti e due?

O è un caso che non può verificarsi
No, non può verificarsi perché materialmente un'aspirapolvere o comunque una attrezzatura specifica se sta in un posto non può stare in un altro... A meno che non le spostiamo a metà mese!!! Oh mio Dio!!!! No no... Non gliele faccio spostare io! 😃
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
Eccomi! scusami tanto ma non ho potuto provare prima di adesso la formula... funziona perfettamente! ho messo per comodità in un altra cella questa formuletta =MESE(OGGI()) che mi riporta automaticamente il mese in corso in questo modo non dovrò modificare la funzione trova cliente.


Grazie mille ancora dell'aiuto e del supporto!!
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
Allora segna la discussione come risolta; per come fare guarda gli avvisi dello staff.

Un'avvertenza: il foglio "Marche utilizzate" non deve essere spostato altrimenti la funzione TrovaCliente() potrebbe non funzionare bene comunque l'ho modificata per evitare questo problema (decidi tu se utilizzare questa ultima versione o tenere la precedente).

Visual Basic:
Function TrovaCliente(cod As Range, mese As Integer)
Dim i As Integer
Dim col As Integer
Dim rng As Range
Dim cel As Range
Application.Volatile
Select Case mese
    Case Is = 1
        col = 3
    Case Is = 2
        col = 5
    Case Is = 3
        col = 7
    Case Is = 4
        col = 9
    Case Is = 5
        col = 11
    Case Is = 6
        col = 13
    Case Is = 7
        col = 15
    Case Is = 8
        col = 17
    Case Is = 9
        col = 19
    Case Is = 10
        col = 21
    Case Is = 11
        col = 23
    Case Is = 12
        col = 25
End Select
For i = 2 To Sheets.Count
    If Sheets(i).Name <> "Marche utilizzate" Then
        Set rng = Sheets(i).Range(Sheets(i).Cells(4, col), Sheets(i).Cells(29, col))
        For Each cel In rng
            If cel.Value = cod.Value Then
                TrovaCliente = Sheets(i).Name
            End If
        Next cel
    End If
Next i
End Function
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
Ciao alfrimpa @alfrimpa ,
stavo chiudendo la discussione ma purtroppo, non so perchè, non funziona più la macro... ma prima funzionava benissimo! TestateSulMuro

Non so se è contro il regolamento ma posso chiederti un indirizzo mail al quale posso inviarti il file (vero)?


Grazie mille
 

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
F @Federica Liparota

Modifica questa istruzione da così

Visual Basic:
For i = 3 To Sheets.Count
a così

Visual Basic:
For i = 5 To Sheets.Count
e vedrai che funziona.

Due raccomandazioni importanti

1) Non variare la posizione dei fogli della cartella
2) Se si inserisce un nuovo foglio per eventuale nuovo cliente metterlo sempre in coda (all’estrema destra).
 
Ultima modifica:

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
20.177
1.713
66
Napoli
2013
388
Ciao F @Federica Liparota

Contento che tu abbia risolto ma hai capito perchè prima dell'ultima correzione del codice non andava e, più in generale, hai compreso il funzionamento della Function TrovaCliente()?
 

Federica Liparota

Utente junior
7 Novembre 2019
20
1
Excel 2016
0
spero di si... sostanzialmente con For i = 3 To Sheets.Count lui cominciava a cercare quel valore dal 3° foglio (Sheet) mentre con For i = 5 To Sheets.Count dal 5° foglio...

...promossa?
 

Sostieni ForumExcel

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