Ciao a tutti,
cercherò di essere sintetico: in un foglio ho realizzato lo schema di una fattura. Tutti i dati della fattura dopo la stampa, vengono salvati in un'unica riga di altro foglio utilizzando una variabile di tipo matrice (TYPE di 13 righe con campi di tipo diverso). Fin qui tutto bene. Il problema nasce quando facciola ricerca di una fattura: trovo la riga da cercare, copio i dati in questo vettore (tante righe per quanti sono gli articoli in fattura) e poi assegno alle celle relative i diversi valori contenuti nelle variabili del vettore ( ragione sociale, numero fattura, gli articoli con przzo e quantità ecc.). Poiché per i dati anagrafici (Rag.Sociale, indirizzo P.I. ecc.) memorizzo soltanto la ragione sociale, in quanto in fase di inserimento il completamento dei dati avviene attraverso la funzione cerca.vert(), il valore che la procedura inserisce nella cella relativa alla ragione sociale non attiva nelle altre celle la funzione cerca:vert.; come se fosse un valore diverso, o come se ci fosse incompatibilità tra il tipo testo della cella e il tipo string della matrice.
Il risultato è OK però al posto dell'indirizzo (che si ottiene con cerca.vert compare l'errore "#Rif!"
Spero di essere stato chiaro.
Grazie
Saverio Martino
Type documento
Ragione_sociale As String
Destinazione_1 As String * 30
Destinazione_2 As String * 30
Destinazione_3 As String * 30
Destinazione_4 As String * 30
tipo_documento As Variant
N_documento As Integer
Data_documento As Date
Mod_pagamento As String * 25
Giorni_scadenza As Integer
Cood_banc As String * 45
Articoli As String * 60
Colli As Integer
Qta As Integer
Prezzo As Variant
Sconto As Single
Iva As Integer
a_mezzo As String * 25
colli_tot As Integer
vettore As String * 20
aspetto As String * 20
causale As String * 20
data_inizio As Date
ora_inizio As Variant
Note As String * 60
sconto_fin As Single
spese_trasporto As Integer
test_mag As Integer
n_int As Integer
U_M As String * 5
att_1 As String * 30
att_2 As String * 30
altre_info As String
End Type
Sub cerca_documento()
Dim archivio(1 To 13) As documento
Dim i As Integer
Dim riga As Integer
Dim N_documento As Integer
Dim Tipo_documeto As Variant
If foglio_chiamante = "MVV" Then
tipo_documento = "MVV"
N_documento = Cells(1, 17).Value
Else: N_documento = Cells(1, 14)
tipo_documento = Cells(10, 12)
End If
riga = 3
i = 1
'Selezione l'archivio dove fare la ricerca dove fare la ricerca
Select Case tipo_documento
Case "MVV"
archivio_ricerca = "archivio_MVV"
Case "Nota di credito"
archivio_ricerca = "archivio_NC"
Case "Fattura Pro-Forma"
MsgBox "Non è previsto il salvataggio per questo tipo di documento"
Exit Sub
Case "Documento di Trasporto"
archivio_ricerca = "archivio_DDT"
Case Else
archivio_ricerca = "archivio_fatt"
End Select
Sheets(archivio_ricerca).Select
'Inizia la ricerca del documento dalla prima riga dati e termina quando la prima cella è vuota
Do While Cells(riga, 1).Value <> Empty
'inserire controllo per uscire perchè il numero doc attuale è maggiore di quello cercato
Do While Cells(riga, 1).Value = N_documento
archivio(i).N_documento = Cells(riga, 1).Value
archivio(i).tipo_documento = Cells(riga, 2).Value
archivio(i).Ragione_sociale = Cells(riga, 3).Value
archivio(i).Destinazione_1 = Cells(riga, 4).Value
archivio(i).Destinazione_2 = Cells(riga, 5).Value
archivio(i).Destinazione_3 = Cells(riga, 6).Value
archivio(i).Destinazione_4 = Cells(riga, 7).Value
archivio(i).Data_documento = Cells(riga, 8).Value
archivio(i).Mod_pagamento = Cells(riga, 9).Value
archivio(i).Giorni_scadenza = Cells(riga, 10).Value
archivio(i).Cood_banc = Cells(riga, 11).Value
archivio(i).Articoli = Cells(riga, 12).Value
archivio(i).Colli = Cells(riga, 13).Value
archivio(i).Qta = Cells(riga, 14).Value
archivio(i).Prezzo = Cells(riga, 15).Value
archivio(i).Sconto = Cells(riga, 16).Value
archivio(i).Iva = Cells(riga, 17).Value
archivio(i).a_mezzo = Cells(riga, 18).Value
archivio(i).colli_tot = Cells(riga, 19).Value
archivio(i).vettore = Cells(riga, 20).Value
archivio(i).aspetto = Cells(riga, 21).Value
archivio(i).causale = Cells(riga, 22).Value
archivio(i).data_inizio = Cells(riga, 23).Value
archivio(i).ora_inizio = Cells(riga, 24).Value
archivio(i).Note = Cells(riga, 25).Value
archivio(i).sconto_fin = Cells(riga, 26).Value
archivio(i).spese_trasporto = Cells(riga, 27).Value
archivio(i).test_mag = Cells(riga, 28).Value
archivio(i).n_int = Cells(riga, 29).Value
archivio(i).U_M = Cells(riga, 30).Value
archivio(i).att_1 = Cells(riga, 31).Value
archivio(i).att_2 = Cells(riga, 32).Value
archivio(i).altre_info = Cells(riga, 33).Value
i = i + 1
riga_rag_sociale = riga
riga = riga + 1
Loop
riga = riga + 1
Loop
If i = 1 Then
Sheets(foglio_chiamante).Select
MsgBox "Attenzione!!! Documento non presente in archivio."
Sheets(foglio_chiamante).Select
Exit Sub
End If
numero_righi = i - 1
i = 1
Sheets(foglio_chiamante).Select
'Idati trovati vengono inseriti nel form chiamante
If foglio_chiamante = "MVV" Then
Cells(6, 9).Value = archivio(i).Ragione_sociale
'Cells(16, 6).Value= archivio(i).tipo_documento
Cells(5, 8).Value = archivio(i).N_documento
Cells(5, 5).Value = archivio(i).n_int
Cells(5, 6).Value = archivio(i).Data_documento
Cells(6, 15).Value = archivio(i).causale
Cells(12, 9).Value = archivio(i).Destinazione_1
Cells(13, 9).Value = archivio(i).Destinazione_2
Cells(14, 3).Value = archivio(i).vettore
Cells(37, 2).Value = archivio(i).a_mezzo
Cells(32, 1).Value = archivio(i).colli_tot
Cells(32, 7).Value = archivio(i).altre_info
Cells(36, 1).Value = archivio(i).att_1
Cells(37, 1).Value = archivio(i).att_2
For i = 1 To numero_righi
Cells(21 + i, 4).Value = archivio(i).Articoli
Cells(21 + i, 13).Value = archivio(i).Qta
Cells(21 + i, 12).Value = archivio(i).U_M
Next i
Else
'Se invece è il Form classico prima inserisco i dati comuni a tutti i documenti
i = 1
Cells(3, 5).Value = archivio(i).Ragione_sociale
'Cells(3, 5).Value = Sheets("anagrafica").Cells(24, 2).Value
'Cells(3, 5).Value = Sheets(archivio_ricerca).Cells(riga_rag_sociale, 3).value
Cells(16, 6).Value = archivio(i).tipo_documento
Cells(18, 6).Value = archivio(i).N_documento
Cells(18, 8).Value = archivio(i).Data_documento
Cells(20, 1).Value = archivio(i).Mod_pagamento
Cells(20, 5).Value = archivio(i).Giorni_scadenza
Cells(20, 6).Value = archivio(i).Cood_banc
Cells(38, 8).Value = archivio(i).sconto_fin
Cells(39, 9).Value = archivio(i).spese_trasporto
For i = 1 To numero_righi
Cells(22 + i, 1).Value = archivio(i).Articoli
Cells(22 + i, 5).Value = archivio(i).Colli
Cells(22 + i, 6).Value = archivio(i).Qta
Cells(22 + i, 7).Value = archivio(i).Prezzo
Cells(22 + i, 8).Value = archivio(i).Sconto
Cells(22 + i, 10).Value = archivio(i).Iva
Next
If (tipo_documento = "Documento di accompagnamento" Or tipo_documento = "Fattura accompagnatoria") Then
i = 1
archivio(i).Destinazione_1 = Cells(10, 5).Value
archivio(i).Destinazione_2 = Cells(11, 5).Value
archivio(i).Destinazione_3 = Cells(12, 5).Value
archivio(i).Destinazione_4 = Cells(13, 5).Value
archivio(i).a_mezzo = Cells(37, 2).Value
archivio(i).colli_tot = Cells(37, 4).Value
archivio(i).vettore = Cells(38, 2).Value
archivio(i).aspetto = Cells(39, 2).Value
archivio(i).causale = Cells(40, 2).Value
archivio(i).data_inizio = Cells(41, 3).Value
Cells(41, 4).Value = archivio(i).ora_inizio
archivio(i).Note = Cells(42, 2).Value
End If
End If
End Sub