La descrizione data il 23-3 e' poco comprensibile per la presenza di alcune incongruenze:
Ti spiego meglio: D3 contiene il peso del prodotto che viene rilevato da un tool esterno e quindi riportato con un cerca.vert mentre la cella E3 svela la quantità da produrre in base a quel peso. Ora io voglio che cambiando eventualmente la quantità nella cella E3 si adegui anche la percentuale in D3 in maniera proporzionale. [. . . ]
In realta D3 contiene una percentuale, non un peso; forse volevi dire G1?
[. . . ] In pratica la cella D3 dovrebbe riportare come n il cerca.vert la percentuale riportata in un altro foglio di lavoro, se nel figlio di lavoro non trova niente allora deve riportare cella vuota. Se invece viene cambiata manualmente la cella D3 con un altro numero deve adattarsi alla percentuale in base allo stesso.
Intendi forse dire "se viene cambiata la cella E3 allora la cella D3 deve adattarsi."?
Lavorero' quindi sulla prima descrizione:
In pratica io vorrei che nel foglio1 cambiando manualmente la cella E3 (dove ora è riportato il numero 5) cambi automaticamente anche la percentuale riportata nella cella D3.
Ad esempio cambiando manualmente il numero nella cella E3 in 10, la cella D3 dovrà riportare 10%.
Cioe' nel foglio originale E3 e' calcolato in funzione della percentuale calcolata in D3; tu vuoi poter invertire la regola: se l'utente imposta E3 allora la percentuale in D3 si adegua.
Avevo per questo gia' pubblicato una macro di Worksheet_Change, che procedeva a fare quanto richiesto partendo dalla modifica di E3 (
viewtopic.php?f=26&t=106548#p623794)Questa soluzione era rimasta (credo) inapplicata, probabilmente perche' non hai saputo adattare il codice a una moltitudine di celle (statam: "Però se devo farlo su tante celle come faccio?").
Supponiamo che per "moltitudine di celle" si intenda ad esempio l'intervallo E3:E100; il codice della macro diventera'
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Area As String, myC As Range
'
Area = "E3:E100" '<<< L'area da monitorare
If Not Application.Intersect(Target, Range(Area)) Is Nothing Then
Application.EnableEvents = False
For Each myC In Target
myC.Offset(0, -1).Value = Target.Value / Range("G1")
Next myC
Application.EnableEvents = True
End If
End Sub
L'istruzione marcata <<< andra' personalizzata.
Per l'uso della macro devi seguire letteralmente le istruzioni che gia' ti diedi: "Tasto dx sul tab etc etc".
Il file andra' poi salvato nel formato "macro enabled" (xlsm).
Tutto questo lo faccio mentre ribadisco che ritengo questo modo di procedere per "aggiustare" i calcoli sia sbagliato: perche' non evidenzia quali risultati siano calcolati e quali aggiustati; perche' annulla le formule in modo irreversibile aprendo le porte a calcoli inesatti qualora il campo di colonna B venga modificato in una seconda fase.
Ciao