Domanda.

nome=Giuseppe
cognome=Di Leo
versione=2000
conosco2=medio
vba=SI
email=olepin@libero.it
chr=1000
problema=Ciao Ennius Grazie per il tuo prezioso lavoro che è di notevole aiuto per noi  meno esperti.
Mi rivolgo ancora alla tua cortesia per risolvere un problema.
In un foglio le celle (G4:H2003) contengono dei numeri, le celle I (I4:I2003) contengono una stringa.
L'area G4:G2003 è stata formattata con l'istruzione Range(G4:G2003).NumberFormat = "00000" L'area H4:H2003 è stata  formattata con l'istruzione Range(h4:h2003).NumberFormat = "000"
Ho lo necessità di sostituire la stringa contenuta in una cella  della colonna "I" indicando i corrispondenti valori delle colonne "G" e "H".
Consultando la tua rubrica ho adattato la routine contenuta  nell'articolo "Realizzazione di un database"
Poiché i dati della colonna "G" sono spesse volte ripetuti, ho iniziato la ricerca dalla colonna "H" e dopo aver verificato che  il dato della colonna "G" corrisponde a quello desiderato, dovrei  sostituire il dato della colonna "I. Cerco di spiegarmi meglio:
Devo , ad esempio, sostituire il valore "pieno" con il  valore "vuoto" del buono "00452"(colonna G) "025" (colonna H). Poiché, come ho già detto, il valore della colonna "G" può essere  ripetuto molte volte ho ritenuto utile cercare prima il valore  della colonna "H" e poi verificare che quello della "G" sia quello
desiderato. Purtroppo, però, non riesco ad ottenere il risultato voluto. La routine individua esattamente il valore della colonna "H" ma  poi non trova quello della colonna "G".
Non so se il problema dipende dalla particolare formattazione delle colonne G e H ma, purtroppo, non posso modificarla, i dati  devono essere lasciati in questo formato e ricercati nella stessa forma.
Ti riporto la routine perché tu possa individuare il mio errore.

Sub prova()
line1:
SerBloc = InputBox("Inserire la serie del blocchetto da annullare")
If SerBloc < 0 Or SerBloc > 99999 Then
MsgBox "Inserire un numero compreso fra 00000 e 99999", 48, "MESSAGGIO"
GoTo line1
End If
line2:
SerTick = InputBox("Inserire la serie del buono da annullare")
If SerTick < 0 Or SerTick > 999 Then
MsgBox "Inserire un numero compreso fra 000 e 999", 48, "MESSAGGIO"
GoTo line2
End If

Sheets("Ticket").Select
Dim CL As Object
For Each CL In Range("h4:h2003")
x = SerTick
If CL = x Then
CL.Select
CL.Offset(0, -1).Select
If CL.Offset(0, -1).Value = SerBloc Then
'QUESTA IF
'NON VIENE MAI ATTIVATA

risposta = MsgBox("Trovato buono " _
& SerBloc & SerTick _
& ". Confermi sostituzione?", vbYesNo)
End If

If risposta = vbYes Then
CL.Offset(0, 1).Value = "vuoto"
Exit For
End If
End If
Next CL
MsgBox ("Buono non trovato") '
DOVE DEVO COLLOCARE QUESTA ISTRUZIONE
End Sub


Spero di essere stato chiaro e ti ringrazio anticipatamente
Cordiali saluti.
 

Risposta.

salve Giuseppe, temo che una parte del tuo progetto non funzionerà mai: che tu imposti i NumberFormat non serve a far sì che excel vba riconosca come numeri con lo zero davanti i valori che scrivi nelle celle. Lo zero davanti ad un numero excel lo accetta solo se il formato celle è impostato a "Testo", (a parte i decimali) che ti consiglio di impostare manualmente, altrimenti il vba "vede" i numeri reperiti con le inputbox diversi da come sono sul foglio. La tua routine mancava del doppio controllo: se x = pippo E SerBlox = pluto, allora.... , capito? Nella tua lunga spiegazione credo di aver capito questo: vuoi controllare se serbloc (chiave univoca) E x (chiave multipla) (ma insieme si verificano una sola volta, giusto?) sono presenti, in quel caso scrivi "vuoto" ed esci.
........
Dim CL As Object
For Each CL In Range("h4:h2003")
x = SerTick
If CL.Value = CStr(x) And CL.Offset(0, -1).Value = CStr(SerBloc) Then
CL.Select
'basta questo per fermarsi alla riga

risposta = MsgBox("Trovato buono " _
& SerBloc & SerTick _
& ". Confermi sostituzione?", vbYesNo)
If risposta = vbYes Then
CL.Offset(0, 1).Value = "vuoto"
End If

Exit Sub
'qui devi mettere di uscire dalla routine, non dal ciclo
End If
Next CL
MsgBox ("Buono non trovato")
'va bene qui, che ti appare se la coppia valori non è stata trovata
End Sub

Fammi sapere, ciao, ennius