Come creare le formule in questione vedi allegato

FRANCI

Utente junior
Original poster
6 Aprile 2016
47
0
6
55
TERRACINA LT
2010
Buon pomeriggio a tutti . Iniziamo in questo modo .
Vi chiedo cortesemente se potete aiutarmi a capire come fare a correlare tutti questi dati nel file che vi ho allegato grazie
Che troverai in seguito...
 
Ultima modifica:

ninai

Excel Expert
Expert
Staff
11 Luglio 2015
2.865
354
115
63
Barcellona P.G.
2013 e 2021
Ciao
da buon disordinato, do il mio contributo cominciando dall'ultimo.
Una volta sistemate le varie convalide dinamiche per scegliere i valori di A,B,E,F, per estrarre il prezzo, in G8:
=INDICE(INDIRETTO("'"&A8&"'!$C$18:$N$47");CONFRONTA(F8;INDIRETTO("'"&A8&"'!$C$18:$C$47");0)+16*(B8="PELLICOLATO STANDART");CONFRONTA(E8;INDIRETTO("'"&A8&"'!$C$19:$N$19");0))
e trascini in basso

IMPORTANTE, per funzionare, che nei vari fogli le due tabelle comincino sempre, una in C18 e l'altra in C34.
ed inoltre che la convalida in A porti il nome esatto del foglio, senza ' e senza !.

Qualcun altro si occupi delle convalide, al momento non la pazienza per farlo :188:
 

cromagno

Excel/VBA Expert
Staff
9 Agosto 2015
8.181
1.033
345
45
Sardegna
2019 (32 bit)
Ciao a tutti,

@ninai
avevo iniziato col VBA per la convalida dati in cella A4 (per i fogli) ed ho continuato in questa strada... però si, si potrebbe fare anche tutto con le formule :246:

@FRANCI

sempre se ho capito bene (dovresti controllare se quel +/- 5 viene rispettato).

Nel modulo di classe del foglio "ESEMPIO":

Visual Basic:
Private Sub Worksheet_Activate()
Call Elenco_Fogli
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Campo As Range


Set Campo = Union(Range("A4:B4"), Range("E4:F4"))
If Not Intersect(Target, Campo) Is Nothing Then
    Call Grigliato
End If
Set Campo = Nothing
End Sub

Il primo evento (all'attivazione del foglio) chiama il codice per riempire il convalida dati nella cella A4:

Visual Basic:
Sub Elenco_Fogli()
Dim i As Long, Elenco As String


For i = 1 To Sheets.Count
    If Sheets(i).Name <> ActiveSheet.Name Then
        Elenco = Elenco & Sheets(i).Name & ","
    End If
Next i
Elenco = Left(Elenco, Len(Elenco) - 1)


With Range("A4").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=Elenco
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
End Sub

Il secondo evento (alla modifica di una delle celle: A4,B4,E4,F4) chiama il codice per ricavare il prezzo:

Visual Basic:
Sub Grigliato()
Dim i As Long, Righe As Integer, Colonne As Integer, L As Double, H As Double
Dim Prezzo As Double, Foglio As String, Colore As String, Vuote1 As Integer, Vuote2 As Integer
Dim Inizio_Tab As Long, RigaOk As Integer, ColOk As Integer, Valore As Double


Vuote1 = Application.WorksheetFunction.CountBlank(Range("A4:B4"))
Vuote2 = Application.WorksheetFunction.CountBlank(Range("E4:F4"))
If (Vuote1 + Vuote2) > 0 Then Exit Sub


Foglio = Range("A4").Value
Colore = Range("B4").Value
L = Range("E4").Value
H = Range("F4").Value


With Worksheets(Foglio)
    For i = 1 To .UsedRange.Rows.Count
        If .Range("C" & i) = Colore Then
            Inizio_Tab = .Range("C" & i).Row
        End If
    Next i
    Righe = .Range("C" & Inizio_Tab).End(xlDown).Row
    Colonne = .Range("C" & Inizio_Tab + 1).End(xlToRight).Column
    For i = Inizio_Tab + 1 To Righe
        If .Cells(i, 3).Value < H Then
            RigaOk = i
            Valore = .Cells(i, 3).Value
        End If
    Next i
    
    If Valore = 0 Then
        RigaOk = Inizio_Tab + 2
    ElseIf H > Valore + 5 Then
        If RigaOk + 1 <= Righe Then
            RigaOk = RigaOk + 1
        Else
            RigaOk = Righe
        End If
    End If
    
    Valore = 0
    For i = 4 To Colonne
        If .Cells(Inizio_Tab + 1, i).Value < L Then
            ColOk = i
            Valore = .Cells(Inizio_Tab + 1, i).Value
        End If
    Next i
    
    If Valore = 0 Then
        ColOk = 4
    ElseIf L > Valore + 5 Then
        If ColOk + 1 <= Colonne Then
            ColOk = ColOk + 1
        Else
            ColOk = Colonne
        End If
    End If
    
    Prezzo = .Cells(RigaOk, ColOk).Value
End With


Range("G4").Value = Prezzo
End Sub

P.S.
Ho corretto l'intestazione della seconda tabella dei vari fogli...
C'era scritto "PELLICOLATO STANDART" invece di "PELLICOLATO STANDARD"

ti riallego il file...
 

Allegati

  • Finestre.xlsm
    150 KB · Visite: 50

cromagno

Excel/VBA Expert
Staff
9 Agosto 2015
8.181
1.033
345
45
Sardegna
2019 (32 bit)
Beh si, dovresti iniziare a "studicchiare" qualcosina di VBA....

Comunque la mia era solo un'alternativa alla formula proposta da "ninai", quindi prova con quella :246:
 

FRANCI

Utente junior
Original poster
6 Aprile 2016
47
0
6
55
TERRACINA LT
2010
Salute a voi allora ho fatto un po' di prove con la formula di "ninai" non ho capito dove inserirla e poi mi parla di sistemare convalide come si fa ?
Allora ho preso con un taglia ed incolla la formula di "cromagno" e lo incollata al file originale ed e uscito fuori questo che vi sto inviando in allegato ed ho elencato quello che vorrei dal mio foglio di lavoro. Che ne pensate e fattibile e se mi indicate passo passo come grazie.
P.s. Se mi mandate a quel paese non ve ne vorro'
 

Allegati

  • MODULO COMMESSE E FATTURE E LISTINO 20160 .xlsx
    270,7 KB · Visite: 23

cromagno

Excel/VBA Expert
Staff
9 Agosto 2015
8.181
1.033
345
45
Sardegna
2019 (32 bit)
Salute a voi allora ho fatto un po' di prove con la formula di "ninai" non ho capito dove inserirla e poi mi parla di sistemare convalide come si fa ?
Allora ho preso con un taglia ed incolla la formula di "cromagno" e lo incollata al file originale ed e uscito fuori questo che vi sto inviando in allegato ed ho elencato quello che vorrei dal mio foglio di lavoro. Che ne pensate e fattibile e se mi indicate passo passo come grazie.
P.s. Se mi mandate a quel paese non ve ne vorro'

Ciao FRANCI,
ho solo il cell al momento e non posso controllare l'allegato... dici che hai copiato la mia "formula" (è una macro) nel file originale (cioè l'allegato), ma l'estensione del file è .xlsx invece di essere .xlsm..... c'è qualcosa che non mi quadra....
 

FRANCI

Utente junior
Original poster
6 Aprile 2016
47
0
6
55
TERRACINA LT
2010
Buongiorno cromagno . Io non so che ho combinato comunque in parte funziona ma non mi mostra i costi .comunque appena puoi te ne sarei grato se ci dai un occhiata e mi fai sapere qualcosa .
Ho anche allegato cosa in realta' mi serve nella totalita' del file grazie
 

pkrome59

Utente assiduo
Expert
26 Settembre 2015
3.271
1.083
145
66
Reggio Calabria
Office 2019
Ciao FRANCI, un'alternativa al VBA proposto da Cromagno, che saluto, dando seguito alla formula proposta da Ninai, che saluto, tenuto conto delle sue considerazioni e dopo aver effettuato le convalide dati in A4; B4; E4; F4; in G4 copia la seguente:

In G4:
=SE.ERRORE(SE(O("BIANCO MASSA 003"=$B$4;"PELLICOLATO STANDARD"=$B$4);ARROTONDA(INDICE(INDIRETTO("'"&$A$4&"'!$D$20:$N$49");CONFRONTA($F$4;INDIRETTO("'"&A4&"'!$C$20:$C$49");0)+16*($B$4="PELLICOLATO STANDARD");CONFRONTA($E$4;INDIRETTO("'"&A4&"'!$D$19:$N$19");0));0);"");"NON DISPONIBILE")

Allego il file di prova.
Fa sapere se ti soddisfa.
 

Allegati

  • ESEMPIO.xlsx
    134,1 KB · Visite: 20

FRANCI

Utente junior
Original poster
6 Aprile 2016
47
0
6
55
TERRACINA LT
2010
Buongiorno a tutti . Ciao pkrome59 e innanzitutto grazie per l'interessamento, diciamo che va bene solo che per le celle e4;f4 le dimensioni devono essere libere sempre facendo riferimento al listino a griglia prescelto . Le misure possono essere anche per esempio (955 x 1025 per intenderci )
guarda l'ultimo allegato (modulo commesse e fatture e listino 20160 ) che ho cercato di fare in modo da spiegarmi di che ho bisogno. Grazie a tutti voi per il contributo
 

cromagno

Excel/VBA Expert
Staff
9 Agosto 2015
8.181
1.033
345
45
Sardegna
2019 (32 bit)
Come faccio a creare un menu a tendina che mi mostri 30 fagli ?

Ciao a tutti,

@FRANCI
non ho ancora avuto modo di usare il pc, comunque a questa tua ultima domanda ti ho risposto prima (nel codice VBA).... Per l'elenco o scrivi manualmente tutti i fogli in una colonna ed usi il convalida dati o usi il vba.
 

cromagno

Excel/VBA Expert
Staff
9 Agosto 2015
8.181
1.033
345
45
Sardegna
2019 (32 bit)
Ciao a tutti,

@FRANCI
finalmente son riuscito a vedere il file allegato.... beh, non è esattamente quello che hai chiesto all'inizio anzi, si dovrebbe creare un codice ben preciso e non così generico come si pensava.

Inoltre, il foglio "CELINI E CASSONETTI" presenta tabelle differenti (posizione e struttura) rispetto agli altri fogli, quindi occorre un codice specifico solo per questo foglio.

Nel foglio "Preventivo 1" nel convalida dati per la "FINITURA" hai messo "PELLICOLATO STANDARD" mentre in tutti i fogli c'è ancora l'errore di scrittura "PELLICOLATO STANDART", quindi il codice non troverebbe mai una corrispondenza.
 

pkrome59

Utente assiduo
Expert
26 Settembre 2015
3.271
1.083
145
66
Reggio Calabria
Office 2019
Ciao FRANCI, per quanto riguarda il foglio "Preventivo1 ho cercato di dare una risposta con le formule a tutte le tue richieste per cui:

In K21:
=SE($F21="";"";SINISTRA(DESTRA(INDIRETTO("'"&$C21&"'!$C$12");LUNGHEZZA(INDIRETTO("'"&$C21&"'!$C$12"))-TROVA(STRINGA.ESTRAI(INDIRETTO("'"&$C21&"'!$C$12");TROVA(":";INDIRETTO("'"&$C21&"'!$C$12"))+1;TROVA("/";INDIRETTO("'"&$C21&"'!$C$12");TROVA(":";INDIRETTO("'"&$C21&"'!$C$12"))+1)-TROVA(":";INDIRETTO("'"&$C21&"'!$C$12")));INDIRETTO("'"&$C21&"'!$C$12")));LUNGHEZZA(DESTRA(INDIRETTO("'"&$C21&"'!$C$12");LUNGHEZZA(INDIRETTO("'"&$C21&"'!$C$12"))-TROVA(STRINGA.ESTRAI(INDIRETTO("'"&$C21&"'!$C$12");TROVA(":";INDIRETTO("'"&$C21&"'!$C$12"))+1;TROVA("/";INDIRETTO("'"&$C21&"'!$C$12");TROVA(":";INDIRETTO("'"&$C21&"'!$C$12"))+1)-TROVA(":";INDIRETTO("'"&$C21&"'!$C$12")));INDIRETTO("'"&$C21&"'!$C$12"))))-16))

In M21:
=SE.ERRORE((SE($F21="";"";SE.ERRORE(INDICE(INDIRETTO("'"&$C21&"'!$C$20:$N$60");CONFRONTA(SE(NUMERO.VALORE(DESTRA($H21;2))<50;ARROTONDA.MULTIPLO($H21;100);ARROTONDA.MULTIPLO($H21;100));INDIRETTO("'"&$C21&"'!$C$20:$C$60");0)+(CONFRONTA($D21;INDIRETTO("'"&$C21&"'!$C$1:$C$60");0)-CONFRONTA("BIANCO MASSA 003";INDIRETTO("'"&$C21&"'!$C$1:$C$60");0))*($D21="PELLICOLATO STANDARD");CONFRONTA(SE(NUMERO.VALORE(DESTRA($G21;2))<50;ARROTONDA.MULTIPLO($G21;100);ARROTONDA.MULTIPLO($G21;100));INDIRETTO("'"&$C21&"'!$C$19:$O$19");0));"NON DISP.")))*($F21);"")

entrambe da tirare giù alla bisogna.
Per quanto riguarda la convalida dati è stata estesa a tutti i fogli con struttura simile (non uguale).
Ho aggiunto un nuovo foglio "Elenco" per la convalida dati.
Allego il file di prova.
Fa sapere.
 

Allegati

  • MODULO COMMESSE E FATTURE E LISTINO 20160 .rar
    195,3 KB · Visite: 14

FRANCI

Utente junior
Original poster
6 Aprile 2016
47
0
6
55
TERRACINA LT
2010
Buongiorno a tutti . Buongiorno cromagno..
Buongiorno pkrome grazie per l'interssamento e collaborazione. Ho provato il file pero quando lo apro (ai visto in alto esce fuori una scritta giall abilita la modifica )se non abilito la modifica vedo i prezzi calcolati , quando l'abilito m21 e a seguire spariscono i prezzi mi dici il perche per favore . Grazie per la vostra collaborazione
 

pkrome59

Utente assiduo
Expert
26 Settembre 2015
3.271
1.083
145
66
Reggio Calabria
Office 2019
Ciao FRANCI; ho verificato il file e a me funziona bene, comunque te lo rimando, prova ad aprire questo e fammi sapere se va bene.
Di nuovo saluti.
 

Allegati

  • MODULO COMMESSE E FATTURE E LISTINO 20160.zip
    197,5 KB · Visite: 26

Vincenzo Damiani

Utente abituale
3 Giugno 2015
529
4
18
Molfetta
2010
Ciao pkrome59,
scusatemi se mi intrometto....vi sto seguendo...
il risultato della formula nella colonna importo del foglio preventivo non si vede......Strano!!!
 

pkrome59

Utente assiduo
Expert
26 Settembre 2015
3.271
1.083
145
66
Reggio Calabria
Office 2019
Ciao Vincenzo, suona strano anche a me, a meno che non stiate utilizzando un file diverso da quello da me allegato.
In questo caso bisogna adattare in tutti i fogli le tabelle, nel seguente modo:
In C18 "BIANCO MASSA 003"; mentre per "PELLICOLATO STANDARD" è sufficiente che si trovi in colonna C indipendentemente dal numero di riga.
Inoltre va modificato "PELLICOLATO STANDART" in "PELLICOLATO STANDARD".
Fammi sapere, e grazie per l'attenzione.
 

Vincenzo Damiani

Utente abituale
3 Giugno 2015
529
4
18
Molfetta
2010
Ciao Vincenzo, suona strano anche a me, a meno che non stiate utilizzando un file diverso da quello da me allegato.
In questo caso bisogna adattare in tutti i fogli le tabelle, nel seguente modo:
In C18 "BIANCO MASSA 003"; mentre per "PELLICOLATO STANDARD" è sufficiente che si trovi in colonna C indipendentemente dal numero di riga.
Inoltre va modificato "PELLICOLATO STANDART" in "PELLICOLATO STANDARD".
Fammi sapere, e grazie per l'attenzione.

ciao pkrome59,
io ho scaricato il tuo file.... le tabelle si trovano tutte nella colonna "C" e il nome e già modificato in "PELLICOLATO STANDARD"....
e nonostante ciò non funziona......
domanda: il foglio deve avere un determinato collegamento? (deve avere una determinata directory?)

P.S: mi trovo nel foglio Preventivi
 

pkrome59

Utente assiduo
Expert
26 Settembre 2015
3.271
1.083
145
66
Reggio Calabria
Office 2019
Ciao Vincenzo, non so che dirti, il file che sto utilizzando è quello del post #8, al quale ho eliminato due fogli e ho aggiunto il foglio Elenco, per motivi di dimensioni per poterlo allegare.
Altro non so dirti e francamente non saprei suggerirti.
Spero che qualcuno del forum o tu stesso riesca a venire a capo della questione.
Ribadisco a me funziona.
 

Allegati

  • Immagine.docx
    115,4 KB · Visite: 13