| | Post: 64 | Registrato il: 19/09/2018
| Età: 58 | Utente Junior | excel 2007 | | OFFLINE | |
|
21/11/2019 15:46 | |
Buongiorno a tutti,
nella mia precedente discussione, discussione avente per nome "Convalida dati",grazie al prezioso aiuto di Dodo, riuscii a venire a capo del seguente problema:
"Buon pomeriggio a tutti, sono alle prese con un quesito "strano", fino ad ora le macro che creavo rispondevano alle mie esigenze. Ma in un foglio di lavoro (foglio4) ho un intervallo di celle (e37:e39)
che ho associato a un elenco con il convalida dati. l'origine dei dati e' in altro foglio Foglio1!$AC1:$AC17.
Praticamente e' una lista di importi unitari per redigere una fattura. Senza usare la macro se nella cella e37
inserisco manualmente un valore non presente nell'intervallo (Foglio1!$AC1:$AC17) l'errore avviso da me creato e':
valore non presente in tabella, continuare ? Se volessi confermare io vorrei che tale valore va ad aggiungersi
all'intervallo sopramenzionato, ma ovviamente non lo fa."
-------------
Grazie a Dodo mi risolse il problema inserendo:
creato nome "mElenco" con formula:
=SCARTO(Foglio1!$AC$1;0;0;CONTA.VALORI(Foglio1!$AC:$AC))
vedi menu Formule > Gestione nomi.
e poi nell'evento
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Domanda As String
If Target.Cells.Count > 1 Then Exit Sub
If Sh.Name <> "Foglio1" And Sh.Name <> "Foglio3" And _
Sh.Name <> "Foglio_inizio" And Sh.Name <> "Foglio_start_riep" Then
If Not Intersect(Target, Range("$f$37:$f$39")) Is Nothing Then
If IsEmpty(Target) Then Exit Sub
If WorksheetFunction.CountIf(Range("mElenco"), Target) = 0 Then
Domanda = MsgBox("Aggiungi " & Target & " alla lista ?", vbYesNo + vbQuestion)
If Domanda = vbYes Then
Range("mElenco").Cells(Range("mElenco").Rows.Count + 1, 1) = Target
Call Macro_riordina_convalidadati '(riordina tutti i valori in ordine crescente)
Else
Range(Target.Address) = ""
Range(Target.Address).Select
End If
End If
End If
End If
End Sub
Per PIACERE vi chiedo: devo creare un convalida dati identico nello stesso foglio ma nell'intervallo d37:d39;
nello stesso foglio Foglio_start_riep
-al posto di "mElenco" creo in Formule > Gestione nomi "dElenco";
-il range non e' piu Range("$f$37:$f$39") ma un nuovo Range("$D$37:$D$39")
-origine: non piu' =SCARTO(Foglio1!$AC$1;0;0;CONTA.VALORI(Foglio1!$AC:$AC)) ma
=SCARTO(Foglio1!$AE$1;0;0;CONTA.VALORI(Foglio1!$AE:$AE))
in Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
cosa viene aggiunto a completamento e DOVE si deve aggiungere per avere contemporaneamente le due situazioni (mElenco e dElenco) funzionanti contemporaneamente.
GRAZIE MILLE.
SAVERIO |
|
| | Post: 2.438 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
21/11/2019 16:16 | |
ciao
prova:
If Not Intersect(Target, Range("$f$37:$f$39,$D$37:$D$39")) Is Nothing Then
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 64 | Registrato il: 19/09/2018
| Età: 58 | Utente Junior | excel 2007 | | OFFLINE | |
|
21/11/2019 16:39 | |
Grazie mille Dodo.
Provo cio che mi hai inviato e ti aggiorno.
ciao saverio |
| | Post: 65 | Registrato il: 19/09/2018
| Età: 58 | Utente Junior | excel 2007 | | OFFLINE | |
|
21/11/2019 16:51 | |
Ciao dodo
ho provato ma mi da errore di sintassi e
If Not Intersect(Target, Range("$f$37:$f$39,$D$37:$D$39")) Is Nothing Then lo colora di rosso.
ma no devo anche effettuare una "if" sul nuovo dElenco?
es- If WorksheetFunction.CountIf(Range("dElenco"), Target) = 0 ecc.ecc.
|
| | Post: 2.439 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
21/11/2019 17:13 | |
ciao
si, scusa, ma senza file di test....
prova...l'unico dubbio è che fa la macro riordina
saluti
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Domanda As String
If Target.Cells.Count > 1 Then Exit Sub
If Sh.Name <> "Foglio1" And Sh.Name <> "Foglio3" And _
Sh.Name <> "Foglio_inizio" And Sh.Name <> "Foglio_start_riep" Then
If Not Intersect(Target, Range("$f$37:$f$39")) Is Nothing Then
If IsEmpty(Target) Then Exit Sub
If WorksheetFunction.CountIf(Range("mElenco"), Target) = 0 Then
Domanda = MsgBox("Aggiungi " & Target & " alla lista ?", vbYesNo + vbQuestion)
If Domanda = vbYes Then
Range("mElenco").Cells(Range("mElenco").Rows.Count + 1, 1) = Target
Call Macro_riordina_convalidadati '(riordina tutti i valori in ordine crescente)
Else
Range(Target.Address) = ""
Range(Target.Address).Select
End If
End If
End If
If Not Intersect(Target, Range("$D$37:$D$39")) Is Nothing Then
If IsEmpty(Target) Then Exit Sub
If WorksheetFunction.CountIf(Range("dElenco"), Target) = 0 Then
Domanda = MsgBox("Aggiungi " & Target & " alla lista ?", vbYesNo + vbQuestion)
If Domanda = vbYes Then
Range("dElenco").Cells(Range("dElenco").Rows.Count + 1, 1) = Target
Call Macro_riordina_convalidadati '(riordina tutti i valori in ordine crescente)
Else
Range(Target.Address) = ""
Range(Target.Address).Select
End If
End If
End If
End If
End Sub
[Modificato da dodo47 21/11/2019 17:14] Domenico
Win 10 - Excel 2016 |
| | Post: 66 | Registrato il: 19/09/2018
| Età: 58 | Utente Junior | excel 2007 | | OFFLINE | |
|
21/11/2019 18:18 | |
Grazie mille.
lo provo in serata e ti aggiorno
ciAo SAVERIO |
| | Post: 67 | Registrato il: 19/09/2018
| Età: 58 | Utente Junior | excel 2007 | | OFFLINE | |
|
22/11/2019 15:54 | |
Buon pomeriggio a tutti,
GRAZIE DODO, Tutto perfetto funziona a meraviglia.
Grazie e mille e ….a buon rendere.
saverio |
|
|