Il problema dei 3 corpi: Attraverso continenti e decadi, cinque amici geniali fanno scoperte sconvolgenti mentre le leggi della scienza si sgretolano ed emerge una minaccia esistenziale. Vieni a parlarne su TopManga.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Obbligo popolazione di una cella specifica di excel

Ultimo Aggiornamento: 16/10/2019 16:48
Post: 5
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
11/10/2019 11:03

Ciao a tutti ho un problema con un file excel, vorrei rendere obbligatoria la compilazione di una cella specifica di una riga ad esempio la cella in A.
ho un file con intestazioni:
nella colonna A c'è la data;
nella colonna B c'è l'operatore;
nella colonna C c'è l'ora appuntamento;
nella colonna D c'è comune;
nella colonna E c'è nome utente;
ecc.ecc
Vorrei che se si inizia a compilare una riga qualsiasi dalla colonna B in poi vi sia un messaggio che ti obbliga a compilare la cella data della stessa riga se non già compilata.
Il mio file arriva fino a colonna L, ma vorrei che la vba funzionasse su tutta la riga nel caso che si andassero ad aggiungere altre intestazioni su altre colonne.
Sicuro di una Vostra gentile collaborazione vi saluto con affetto
[SM=x423017]
[Modificato da gianni63.it 11/10/2019 11:06]
Post: 421
Registrato il: 15/01/2016
Città: ROMA
Età: 51
Utente Senior
2016
OFFLINE
11/10/2019 12:20

Buongiorno
si può fare anche con la convalida dati
allego un file di esempio
Seleziona l'area interessata io ho messo da B1 a L10

DATI
CONVALIDA DATI
PERSONALIZZATO
nella barra della formula incolla

=$A1<>""

togli la spunta a ignora celle vuote
poi nella scheda messaggio di errore puoi mettere un messaggio
io ho messo
INSERIRE DATA
[Modificato da DANILOFIORINI 11/10/2019 12:20]
Post: 4.182
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
11/10/2019 12:48

Bravo Danilo, ottima soluzione [SM=g27811]

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 5
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
11/10/2019 13:54

Ciao Danilo, il comando che hai messo funziona, però se dopo aver inserito i dati nella riga vado a cancellare il contenuto della cella "A" della stessa riga non mi da più l'allerta.
😢
Post: 423
Registrato il: 15/01/2016
Città: ROMA
Età: 51
Utente Senior
2016
OFFLINE
11/10/2019 16:26

Buonasera
Il contamessaggi dice che ci sono 4 interventi ma io vedo solo la mia risposta
Post: 6
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
11/10/2019 20:01

Ciao Danilo, in effetti oggi c'erano, compresa la mia risposta, comunque volevo dirti che la soluzione che mi hai proposto funziona perfettamente però se dopo aver compilato la riga inavvertitamente cancello la cella "A" la formattazione non funziona e quindi non mi allerta che la cella "data" non è più riempita.
Forse ci vorrebbe qualcosa con il vba che ha sempre sotto controllo tutta la colonna "A".
Ciao
😢
[Modificato da gianni63.it 11/10/2019 21:25]
Post: 425
Registrato il: 15/01/2016
Città: ROMA
Età: 51
Utente Senior
2016
OFFLINE
11/10/2019 21:35

Ciao
con il VBA non posso aiutarti con le formule potremmo usare la formattazione condizionale che ci colora ad esempio la cella della colonna A nel caso che abbiamo inserito la data dopo un valore e se cancelliamo la cella della colonna A la cella si accende di rosso
quindi seleziona le celle della colonna A interessate

FORMATTAZIONE CONDIZIONALE
NUOVA REGOLA
UTILIZZA UNA FORMULA
nella barra della formula incolla

=E($A1="";CONTA.VALORI($B1:$L1)>0)

scegli il colore e dai OK
Post: 2.419
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
12/10/2019 10:14

Ciao e un caro saluto a Danilo

@Gianni
l'unico modo in cui puoi impedire che avvenga quanto descritto è quello di inibire la chiusura del file se tutte le righe compilate non hanno una data in colonna A.

Con le formule nessuno potrà impedire all'utente di chiudere comunque il file, nonostante warning di varia natura.

Pertanto, a mio avviso, dovresti sfruttare l'evento beforeClose del documento.

saluti



[Modificato da dodo47 12/10/2019 12:53]
Domenico
Win 10 - Excel 2016
Post: 7
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
12/10/2019 18:20

Ciao Danilo la tua soluzione potrebbe andare bene ma siccome le righe saranno molte probabilmente non ci si farà caso, grazie per l'impegno che mi hai dedicato se bravissimo con le formule.💪🧐
[Modificato da gianni63.it 12/10/2019 18:23]
Post: 8
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
12/10/2019 18:23

@dodo47

Ciao Dodo non so come fare i comandi vba, sto cercando di imparare da solo ma mi è difficile, mi potresti dare una mano per cortesia?

Ciao e grazie

😥🙋‍♂️
Post: 4.183
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
13/10/2019 09:04

gianni, non ho ancora visto un TUO file di esempio

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 2.420
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
13/10/2019 10:43

Re:
gianni63.it, 12/10/2019 18.23:

@dodo47

....non so come fare i comandi vba, sto cercando di imparare da solo ma mi è difficile, mi potresti dare una mano per cortesia?



Si, ma capisci bene che non è questo il miglior modo di apprendere qualcosa. Il giorno in cui vorrai metterci le mani se non hai una qualche minima nozione ti troverai in difficoltà.

Quanto suggerito (evento beforeClose del documento) è un codice che intercetta la chiusura del documento e pertanto va inserito nella finestra VB di Questa_cartella_di_lavoro (ThisWorkbook secondo la versione) e NON in un modulo.

Il codice prevede che nel foglio interessato ("TuoFoglio" - cambia con il nome del tuo foglio) i dati partano da riga 2, pertanto con intestazioni in riga 1.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wk As Worksheet, lr As Long, j As Long
Set wk = Worksheets("TuoFoglio") '      DA VARIARE
lr = wk.Cells.Find(What:="*", _
                After:=Range("A1"), _
                LookIn:=xlFormulas, _
                LookAt:=xlPart, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious).Row
For j = 2 To lr
    If Application.CountA(wk.Cells(j, 1).EntireRow) > 0 Then
        If wk.Cells(j, 1) = "" Then
            MsgBox "Mancano date"
            Cancel = True
            Exit Sub
        End If
    End If
Next
End Sub


saluti

[Modificato da dodo47 13/10/2019 10:49]
Domenico
Win 10 - Excel 2016
Post: 9
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
13/10/2019 10:52

Ciao a tutti, allego il file di esempio; per quanto riguarda il foglio2 (stampa) ha risolto l'amico Danilo.
A me serve di risolvere il foglio1 (Appuntamenti) dove si deve rendere obbligatorio la compilazione del campo data prima di inserire qualsiasi altro dato nella stessa riga, senza poi l'opportunità di cancellare la data se vi sono campi compilati nella stessa riga.
Penso si debba fare con vba.
Spero sia riuscito a spiegarmi.
Saluti a tutti.
🤗
Post: 10
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
13/10/2019 11:00

Grazie Dodo sei stato di grande aiuto, quello che dici sul vba hai perfettamente ragione ma sto cercando di fare qualche corso da autodidatta spero di riuscirci.
Vi ringrazio per il tempo che mi avete dedicato.
Un saluto a tutti.
🙋‍♂️🙋‍♂️
Post: 878
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
13/10/2019 12:23

Un saluto a tutti.

Per il foglio 'Appuntamenti', se non ti basta la Convalida proposta da DANILOFIORINI e proprio vuoi utilizzare il VBA, puoi mettere questa macro nel modulo del foglio stesso ed eliminato dalle celle interessate la Convalida. Il codice è (quanto basta) auto-esplicativo.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("A:L")) Is Nothing Then Exit Sub
    Select Case Target.Column
        Case 1
            If WorksheetFunction.CountA(Range("B" & Target.Row & ":L" & Target.Row)) > 0 Then 'verifica se vi sono celle compilate
                MsgBox "Non puoi cancellare questa data se le colonne B-L non sono vuote"
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
            End If
        Case Else
            If Cells(Target.Row, 1).Value = "" Then 'verifica se manca la data
                MsgBox "Non puoi scrivere in questa cella se manca la data in colonna A"
                Application.EnableEvents = False
                Target.ClearContents
                Application.EnableEvents = True
            End If
    End Select
    
End Sub

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 11
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
14/10/2019 12:51

Ciao Rollis il tuo codice è perfetto, se non chiedo troppo si potrebbe fare una modifica?
Nel senso, si può estendere il controllo dalla cella "B" su tutta la riga, anziché da "B a L" nella eventualità si volessero aggiungere colonne senza dover andare a modificare il codice.
Saluti.
😏
Post: 4.184
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
14/10/2019 13:38

a tutta la riga non conviene, metti una lettera abbastanza lontana tipo AZ

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 879
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
15/10/2019 00:56

Se per nessun motivo ci potranno essere altre celle compilate dopo l'ultima colonna prevista nella tabella (altrimenti bisogna valorizzare diversamente la nuova varabile 'uCol') puoi utilizzare quest'altra versione della mia macro per renderla più dinamica:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim tRow As Long                              'riga attiva
    Dim uCol As Long                              'ultima colonna usata nella tabella
    Dim rigaA As Range                            'intera riga attiva
    Dim rigaB As Range                            'dati della riga attiva

    tRow = Target.Row
    uCol = UsedRange.Columns.Count
    Set rigaA = Range(Cells(tRow, "A").Address & ":" & Cells(tRow, uCol).Address)
    Set rigaB = Range(Cells(tRow, "B").Address & ":" & Cells(tRow, uCol).Address)
    If Intersect(Target, rigaA) Is Nothing Then Exit Sub
    Select Case Target.Column
        Case 1
            If WorksheetFunction.CountA(rigaB) > 0 Then 'verifica se vi sono celle compilate
                MsgBox "Non puoi cancellare o modificare la data se le colonne dati non sono vuote"
                Application.EnableEvents = False
                Application.Undo
                Application.EnableEvents = True
            End If
        Case Else
            If Cells(Target.Row, "A").Value = "" Then 'verifica se manca la data
                MsgBox "Non puoi scrivere in questa cella se manca la data in colonna A"
                Application.EnableEvents = False
                Target.ClearContents
                Application.EnableEvents = True
            End If
    End Select
    
End Sub

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 12
Registrato il: 29/03/2011
Città: BALSORANO
Età: 60
Utente Junior
2013
OFFLINE
16/10/2019 11:35

Ciao Rollis adesso è perfetta sei bravissimo. 💪😀
Risolto problemi, un saluto a tutti coloro che si sono interessati al caso ed hanno contribuito alla risoluzione del problema dando tutte idee interessanti.
Ciao
👍
Post: 880
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
16/10/2019 16:48

Grazie del riscontro positivo 👍.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Vota: 15MediaObject5,00220 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Ciao (1 messaggio, agg.: 15/08/2014 17:59)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 03:37. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com