Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

EXCEL - CELLA NON DEVE ESSERE VUOTA - MACRO? Opzioni
aresca
Inviato: Friday, December 03, 2010 12:03:06 PM
Rank: Member

Iscritto dal : 6/16/2006
Posts: 7
Ciao a tutti,
sto cercando una macro che si lanci con l'apertura di un foglio e che, alla compilazione di una determinata cella in una determinata colonna, obblighi l'utente a compilarne anche un altra per far si, insomma, che quest'ultima cella non possa essere lasciata vuota. Esempio:

SE A1="" allora B1 può essere Blank ma Se A1<>"" allora B1 deve essere compilata.

il formato di B1 poi è vincolato ad una formattazione condizionale che obbliga l'utente ad inserire i dati in un determinato formato.
Ovviamente questo per tutte le celle delle colonne A e B

Potreste aiutarmi per cortesia?

grazie... in ogni caso

Sponsor
Inviato: Friday, December 03, 2010 12:03:06 PM

 
a10n11
Inviato: Friday, December 03, 2010 12:24:52 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
una soluzione può essere questa:

Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value <> "" Then
x = InputBox("immetti il valore per la cella" & Target.Offset(0, 1).Address)
If x = "" Then
MsgBox ("non immesso alcun valore per la cella" & Target.Offset(0, 1).Address)
Target.Value = ""
Else
Target.Offset(0, 1).Value = x
End If
End If
End If
End Sub


La macro intercetta ogni modifica delle celle di colonna A (nel caso il range sia ben definito basta indicare l'area su cui far operare la macro) Modificando il valore di una cella di colonna A, comparira un messaggio in cui viene chiesto di digitare il valore per la rispettiva cella di colonna B. Nel caso non si digiti nulla la macro annullerà l'operazione.
Prova e vedi se può andare.

Per Utilizzare la macro:
Click Dx sulla linguetta del foglio > scegli: Visualizza codice
incolla nella pagina bianca il codice sopra riportato.
saluti
Giap

aresca
Inviato: Friday, December 03, 2010 12:34:10 PM
Rank: Member

Iscritto dal : 6/16/2006
Posts: 7
a10n11 ha scritto:
salve
una soluzione può essere questa:

Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value <> "" Then
x = InputBox("immetti il valore per la cella" & Target.Offset(0, 1).Address)
If x = "" Then
MsgBox ("non immesso alcun valore per la cella" & Target.Offset(0, 1).Address)
Target.Value = ""
Else
Target.Offset(0, 1).Value = x
End If
End If
End If
End Sub


La macro intercetta ogni modifica delle celle di colonna A (nel caso il range sia ben definito basta indicare l'area su cui far operare la macro) Modificando il valore di una cella di colonna A, comparira un messaggio in cui viene chiesto di digitare il valore per la rispettiva cella di colonna B. Nel caso non si digiti nulla la macro annullerà l'operazione.
Prova e vedi se può andare.

Per Utilizzare la macro:
Click Dx sulla linguetta del foglio > scegli: Visualizza codice
incolla nella pagina bianca il codice sopra riportato.
saluti
Giap


Ciao,
grazie per la risposta. Per cortesia, spiegami come faccio a fare in modo che la macro punti alle celle/colonne del mio foglio... Cioè, quali sono le sezioni di codice che devo modificare per far si che il controllo venga eseguito non nelle colonnee A e B ma su altre? Quale anche la parte di codice da modificare per far eseguire il controllo in una delimitata zona del foglio?
grazie ancora
a10n11
Inviato: Friday, December 03, 2010 6:20:38 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aresca ha scritto:


.... Per cortesia, spiegami come faccio a fare in modo che la macro punti alle celle/colonne del mio foglio... Cioè, quali sono le sezioni di codice che devo modificare per far si che il controllo venga eseguito non nelle colonnee A e B ma su altre? Quale anche la parte di codice da modificare per far eseguire il controllo in una delimitata zona del foglio?


salve
premessa:
Sarebbe opportuno che nelle richieste si facciano esempi pertinernti alle proprie necessità e non inventare situazioni diverse da essi.

Per puntare a celle di colonne diverse definite Target l'istruzione da cambiare è questa:

If Target.Column = 1 Then

che sta a significare: se la cella oggetto della modificata si trova nella colonna 1 (A) esegui il codice
se la tua colonna non è più la A ma la C dovrai modificare la riga come segue:
If Target.Column = 3 Then

Nel caso in cui la cella legata al Target non fosse più neanche la cella della colonna adiacente (D)
dovrai modificare anche questa riga: Target.Offset(0, 1).Value = x che significa:spostati di una colonna
rispetto al Target ed inserisci il valore della variabile X


Nel caso infine di un'area ben definita del foglio dovra usare l'istruzione "Intersect"
supponendo che l'area interessata al controllo fosse il range(C1:C50) , il codice andrebbe scritto come segue:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim miorange As Range
Set miorange = Application.Intersect(Target, Range("C1:C50"))
If Not (miorange Is Nothing) Then
If Target.Value <> "" Then
x = InputBox("immetti il valore per la cella" & Target.Offset(0, 1).Address)
If x = "" Then
MsgBox ("non immesso alcun valore per la cella" & Target.Offset(0, 1).Address)
Target.Value = ""
Else
Target.Offset(0, 1).Value = x
End If
End If
End If
Set miorange = Nothing
End Sub

saluti
Giap


Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.