"Tiziano Marmiroli" ha scritto:
> "mykeike" ha scritto:
>
> > Salve, ho bisogno di un aiuto. Sto impostando una tabella per inserimento di
> > nominativi e ho necessità, al verificarsi di una condizione, che una
> > specifica cella venga obbligatoriamente avvalorata. Passo all'es.: devo
> > inserire dei nominativi e, fra le altre informazioni, se questi hanno versato
> > la quota. Siccome saremo in 3-4 a inserire i dati, ho bisogno che Excel
> > obblighi a compilare la cella "pagato" se la cella "cognome" è avvalorata.
> > Pensavo a una macro lanciata da un pulsante: cliccando sul pulsante, parte la
> > macro che verifica se la cella pagato è compilata nel caso in cui la cella
> > cognome sia avvalorata. Nel caso in cui ci sia un cognome ma la cella pagato
> > non è compilata, la macro dovrebbe fermarsi e far compilare la cella. Fatto
> > questo si rilancia la macro e così via. Potete suggerirmi il codice della
> > macro? Sapete un metodo alternativo, più immediato?
>
> Se è solo questo avrebbe più senso usare una formula tipo
>
> C1: =SE(VAL.VUOTO(A1);"";"Pagato")
>
> --
> Tiziano Marmiroli
> Microsoft MVP - Office System
>
per poterti aiutare, dovresti almeno spiegare com'č strutturato il tuo file.
Per esempio:
i nominativi sono inseriti in una tabella uno dopo l'altro? Se si, dunque i
cognomi sono sempre sulla stessa colonna e inseriti senza spazi tra una riga
e l'altra?
Poi dici:
> > Pensavo a una macro lanciata da un pulsante: cliccando sul pulsante,
> > parte la
> > macro che verifica se la cella pagato č compilata nel caso in cui la
> > cella
> > cognome sia avvalorata. Nel caso in cui ci sia un cognome ma la cella
> > pagato
> > non č compilata, la macro dovrebbe fermarsi e far compilare la cella.
> > Fatto
> > questo si rilancia la macro e cosě via.
Ma la tua macro cosa dovrebbe fare oltre che controllare che il se il
cognome č stato inserito vi sia anche un corrispettivo valore sul pagato
(Si/No)?
Restiamo in attesa di delucidazioni.
Ciao
Thunder
Nominativi una riga dopo l'altro, cognomi colonna A, nomi colonna B
> Poi dici:
>
> > > Pensavo a una macro lanciata da un pulsante: cliccando sul pulsante,
> > > parte la
> > > macro che verifica se la cella pagato è compilata nel caso in cui la
> > > cella
> > > cognome sia avvalorata. Nel caso in cui ci sia un cognome ma la cella
> > > pagato
> > > non è compilata, la macro dovrebbe fermarsi e far compilare la cella.
> > > Fatto
> > > questo si rilancia la macro e così via.
>
> Ma la tua macro cosa dovrebbe fare oltre che controllare che il se il
> cognome è stato inserito vi sia anche un corrispettivo valore sul pagato
> (Si/No)?
>
Esatto. La macro deve controllare che la cella C1, per esempio, contenga un
valore nel caso che la A1 contenga il cognome. E' sufficiente che la macro
riveli che la cella contenga SI o NO (ho già fissato un convalida nella
cella) e avvisi con un messaggio nel caso non lo fosse. Inserito il valore,
rilancio la macro e così via. Essa deve fermarsi alla prima cella della
colonna A vuota.
Grazie e scusate il ritardo, spero possiate aiutarmi.
> Esatto. La macro deve controllare che la cella C1, per esempio, contenga
> un
> valore nel caso che la A1 contenga il cognome. E' sufficiente che la macro
> riveli che la cella contenga SI o NO (ho già fissato un convalida nella
> cella) e avvisi con un messaggio nel caso non lo fosse. Inserito il
> valore,
> rilancio la macro e così via. Essa deve fermarsi alla prima cella della
> colonna A vuota.
Nel modulo ThisWorkbook, incollarci il seguente codice:
'=============>>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim SH As Worksheet
Dim rng As Range
Dim LRow As Long
Set SH = Me.Worksheets("Foglio1") '<<==== da CAMBIARE
LRow = SH.Cells(Rows.Count, "A").End(xlUp).Row
On Error Resume Next
Set rng = SH.Range("C1:C" & LRow).SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rng Is Nothing Then
Cancel = True
With rng.FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=LEN($C1)=0"
.Item(1).Interior.ColorIndex = 6
End With
Application.Goto rng
MsgBox Prompt:="Le celle evidenziate sono vuote! ", _
Buttons:=vbCritical, _
Title:="Avvertimento!"
End If
End Sub
'<<=============
---
Regards,
Norman
Grazie ancora!
"Norman Jones" ha scritto:
"Norman Jones" ha scritto:
> Scusami, ma ho un piccolo problema. Ho verificato la tua macro e funziona.
> Purtroppo dovevo precisare che nella colonna A (che in realtà nella mia
> tabella è la colonna B, mentre quella del si/no è la colonna R..) c'è
> dentro
> una formula: infatti se quel nome c'era anche nell'edizione precedente
> inserisco semplicemente il suo codice e Excel mi va a pescare i suoi dati
> dall'elenco generale in un altro foglio. Se è nuovo, sovrascrivo la
> formula.
> La macro mi evidenzia tutta la colonna C (cioè R) fin dove nella colonna A
> (cioè B) c'è la formula, pur se non avvalorata. Avrei già pensato a una
> scorciatoia, ma se fosse possibile modificare la macro in modo che
> controlli
> se la colonna A (cioè B) ha effettivamente un valore sarebbe un
> piacere.....
> Grazie!
'-------------------------------------------
Ciao Mykeike,
Prova la seguente versione:
'=============>>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim SH As Worksheet
Dim rng As Range, rng2 As Range, rng3 As Range
Dim LRow As Long, LRow2 As Long
Dim arr As Variant
Const Colonna1 As String = "B" '<<=== da CAMBIARE
Const Colonna2 As String = "R" '<<=== da CAMBIARE
Set SH = Me.Worksheets("Foglio1") '<<=== da CAMBIARE
LRow = SH.Cells(Rows.Count, Colonna1).End(xlUp).Row
Set rng = SH.Range(Colonna1 & "1:" & Colonna1 & LRow)
With rng
arr = .Formula
.Value = .Value
On Error Resume Next
.SpecialCells(xlCellTypeConstants, xlErrors).ClearContents
On Error GoTo 0
End With
LRow2 = Cells(Rows.Count, Colonna1).End(xlUp).Row
SH.Range("B1").Resize(LRow) = arr
Set rng2 = SH.Range(Colonna2 & "1:" & Colonna2 & LRow2)
On Error Resume Next
Set rng3 = rng2.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rng3 Is Nothing Then
Cancel = True
rng2.Select
With rng2.FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=LEN($R1)=0"
.Item(1).Interior.ColorIndex = 6
End With
Application.Goto rng3
"Norman Jones" ha scritto: