› Sviluppare funzionalita su Microsoft Office con VBA › a codizione che …
-
AutoreArticoli
-
Ciao a tutti e ben ritrovati.
Sempre nell'intento di migliorare il mio file di lavoro, chiedo se sia possibile fare questo, ovvero riuscire a diminuire di 1 il numero di rate riportato nella colonna J quando però nella medesima sia presente un numero maggiore di 1 e allo stesso momento, quando scrivo "Si" nella colonna L.
Faccio doverosamente presente che la stessa colonna J è sempre valorizzata con un numero cioè non è MAI vuota, quindi questa macro che chiedo deve prevedere ciò.
E' possibile tutto questo ?
Grazie in anticipo al genio che vorrà aiutarmi !!!!!
Allego il mio file esempio su cui lavorare
Allegati:
You must be logged in to view attached files.Prova, premi ALT+F11 ed incolla sulla destra
Ho scritto pure se cancelli SI aumenta +1Private Sub Worksheet_Change(ByVal Target As Range) If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("L:L")) Is Nothing Then If Target.Offset(0, 0) = "Si" Then Application.EnableEvents = False Target.Offset(0, -2) = Target.Offset(0, -2) - 1 Application.EnableEvents = True Else Application.EnableEvents = False Target.Offset(0, -2) = Target.Offset(0, -2) + 1 Application.EnableEvents = True End If End If End SubBuongiorno Raffaele,
grazie mille per il tuo aiuto e tua soluzione, la provo nel pomeriggio perché al momento non ho il pc con me.
Ti faccio sapere sulla funzionalità della cosa ma sono certo che sarà perfetta e sulla base delle mie indicazioni !
Buongiorno Frasubb,
contribuisco con la mia soluzione:
Private Sub Worksheet_Change(ByVal Target As Range) ' by maxpit If Target.Cells.Count = 1 Then If Target.Column = 12 Then With Target(1) If .Value = "Si" And .Offset(0, -2) > 1 Then Application.EnableEvents = False .Offset(0, -2) = .Offset(0, -2) - 1 Application.EnableEvents = True End If End With End If End If End SubCon sequenza di compilazione prima la colonna J poi la colonna L
Verifica e fai sapere.
P.S.: la macro va inserita nel foglio del "Mese" e per l'esempio posto Ottobre ... altrimenti bisognerà modificarla affinché funzioni da "Questa_cartella_di_lavoro"
maxpit ha scritto:
contribuisco con la mia soluzione:volendo puoi semplificare:
With Target If .Cells.Count = 1 And .Column = 12 Then If .Value = "Si" And .Offset(0, -2) > 1 Then Application.EnableEvents = False .Offset(0, -2) = .Offset(0, -2) - 1 Application.EnableEvents = True End If End If End WithP.S.: Target(1) non serve visto che nel primo If hai già messo la condizione che Target deve essere di una sola cella.
Buonasera a tutti,
grazie @scossa hai ragione è un refuso rimasto per un test che avevo fatto e mi sono scordato di eliminarlo in fase di pubblicazione del post.
A presto
Ciao Raffaele,
ho provato la tua soluzione e funziona, solo che invece di incollare a destra, dopo aver digitato ALT+F11, ho dovuto incollare il tutto nei singoli fogli dei mesi. Nessun problema e nessuna fatica, era solo per dirtelo.
Ti ringrazio e faccio i complimenti, hai dato un grande valore aggiunto al mio foglio di lavoro.
Se pensi, infine, che devo fare qualcosa di diverso rispetto a ciò che ora ti ho scritto, ovviamente è ben accetto !
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Cells.Count > 1 Then Exit Sub
è ridondante in quanto già la condizione
Target.Cells.Count > 1da sola implica che almeno una tra Rows o Columns sia > 1.Hai ragione, mi sono accorto subito dopo aver spostato, questa l'ho imparata poco tempa fà e mi sembra più funzionale.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count = 1 Then If Not Intersect(Target, Range("L:L")) Is Nothing Then If Target.Offset(0, 0) = "Si" Then Application.EnableEvents = False Target.Offset(0, -2) = Target.Offset(0, -2) - 1 Application.EnableEvents = True Else Application.EnableEvents = False Target.Offset(0, -2) = Target.Offset(0, -2) + 1 Application.EnableEvents = True End If End If Else MsgBox "Devi modificare solo una cella, ripristino i dati" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Subquesta l'ho imparata poco tempa fà e mi sembra più funzionale
If Target.Offset(0, 0) = "Si" Then
.Offset(0,0) pensaci bene: non ha senso.
Solo vecchie-brutte abbitudini >>>If Target = "Si" Then
-
AutoreArticoli
