È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Convalida dati.

  • Messaggi
  • OFFLINE
    saverio1966
    Post: 18
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 15/06/2019 17:31
    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.
    Allora ho creato la macro, che vi sottoriporto ma qui nascono le rogne.

    (Sub Macro_TEST_CONVALIDADATI()
    '
    ' Macro_TEST_CONVALIDADATI Macro
    '

    '
    Range("E37:E39").Select
    With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator _
    :=xlBetween, Formula1:="=Foglio1!$AC1:$AC17"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = "Avviso Errore"
    .InputMessage = ""
    .ErrorMessage = "Valore non presente in tabella. inserire?"
    .ShowInput = True
    .ShowError = True
    End With
    End Sub

    Se si puo', come poter usare il rigo Errormessage e quindi andare ad aggiornare la lista all'intervallo Foglio1!$AC1:$AC17 che ovviamente diventerà Foglio1!$AC1:$AC18.
    Grazie mille.
    saverio
  • OFFLINE
    dodo47
    Post: 2.257
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 15/06/2019 18:34
    ciao
    ti allego un esempio che fa quello che vuoi, da adattare al tuo file.

    Ogni volta che scrivi un dato in D1 (non compreso nell'elenco) ti chiede se lo vuoi aggiungere o meno.

    Il foglio si avvale di un nome (formula scarto) assegnato al range D1: "elenco" e di una routine sull'evento change del foglio.

    saluti



    [Modificato da dodo47 15/06/2019 19:00]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 18
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 15/06/2019 18:55
    Grazie mille Dodo, appenA posso lo provo e ti aggiorno.
    Grazie mille.
  • OFFLINE
    saverio1966
    Post: 19
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 17/06/2019 17:45
    Convalida dati ....non va. perche?
    Gentilissmo Dodo,
    ho provato parecchie volte a far girare la tua routine ma senza successo.
    ho sostituito i tuoi valori che facevi girare nel tuo file con i miei:
    "$E$37:$E$39" e' l'intervallo delle tre celle "configurate" con il convalida dati e che devono accettare
    l'input con la finestrella associata alla serie di dati.
    "Foglio1(AC1,AC50) questo e' il range-intervallo a cui e' associato il convalida dati.
    Voglio essere sincero. Nel mio foglio di lavoro prima di arrivare a e37-e39, nel foglio si attiva una userform, viene fatta una copia del foglio in un foglio con nome perosnalizzato, viene aggiornata una tabella, e dopo si
    arriva alla zona e37-e39.
    Spero di non averti fatto AMMATTIRE.
    gRAZIE.
    Saverio

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Domanda As String
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Address = "$E$37:$E$39" Then
    If IsEmpty(Target) Then Exit Sub
    If WorksheetFunction.CountIf(Range("Foglio1!AC1,Foglio1!AC50"), Target) = 0 Then
    Domanda = MsgBox("Aggiungi " & Target & " alla lista", vbYesNo + vbQuestion)
    If Domanda = vbYes Then
    Range("Foglio1!AC1,Foglio1!AC50").Cells(Range("Foglio1!AC1,Foglio1!AC50").Rows.Count + 1, 1) = Target
    Else
    Range("E37:E39") = ""
    Range("E37:E39").Select
    End If
    End If
    End If
    End Sub
  • OFFLINE
    dodo47
    Post: 2.264
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 17/06/2019 18:48
    Re: Convalida dati ....non va. perche?
    saverio1966, 17/06/2019 17.45:

    Gentilissmo Dodo,
    ho provato parecchie volte a far girare la tua routine ma senza successo.....



    Non ho capito, il mio file non funziona??

    saluti



    [Modificato da dodo47 17/06/2019 18:49]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 20
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 17/06/2019 19:02
    No Dodo, tranquillo.
    Il tuo file è perfetto.
    ho sostituito le variabili per far funzionare il mio progetto, ma come da mia risposta, non funziona e non capisco Cosa non lo fa funzionare. leggi pure mia spiegazione.
    Se si puo far qualcosa , grazie mille.
  • OFFLINE
    dodo47
    Post: 2.265
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 17/06/2019 19:07
    Invia una copia del tuo lavoro (senza dati sensibili) e cerchiamo di capire il perchè a te non funziona.
    Certo non posso mettermi a ricostruire il tuo file con il rischio di non sapere bene come stanno le cose.

    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 21
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 17/06/2019 19:29
    Sarà fatto.
    il tempo si rientrare e te lo invio subito.
    Grazie per la disponibilità.
    sav
  • OFFLINE
    saverio1966
    Post: 22
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 09:23
    Buongiorno Dodo, vi allego con la presente il file cartel1-copia.rar da scompattare ; all’avvio del file, si troverà davanti a
    un menu pannello di controllo: per avviare la procedura con il “convalida dati”, deve premere il pulsante
    colorato di rosso.
    Dopo aver premuto (e consultando ovviamente il vba),mentre sotto in secondo piano abbiamo il
    foglio5(Foglio_start_riep), in primo piano si troverà davanti una userform: scegliete un nominativo qualsiasi
    e confermate la scelta.
    Dopo andate sempre avanti confermando con Ok e SI ai msgbox che vi trovate davanti; la procedura si
    metterà in standby con il cursore fermo sulla casella e37 che aspetta un input.
    Per uscire in maniera “normale” (ricordatevi che quando scegliete un nome dalla form, creerete un foglio
    personalizzato.
    Per uscire dal foglio “personalizzato “ in alto al foglio c’e’ il testo home che salva il lavoro sin li eseguito e
    tora al menu pannello di controllo.
    Spero di non avervi “spaventato” e………..grazie mille per l’interessamento.
    saverio
  • OFFLINE
    dodo47
    Post: 2.266
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 18/06/2019 09:53
    ciao
    ti avevo detto che avresti dovuto creare un nome con la formula scarto, relativo al range che contiene i dati da visualizzare nelle celle di convalida (vedi mio file) e puntare tali celle al suddetto nome: non c'è.
    Poi, l'istruzione If Target.Address = "$E$37:$E$39" Then è errata perchè presuppone che il "target" sia appunto il range e non la singola cella come necessario. Questo lo correggiamo dopo.

    A parte questo, nelle tre celle di convalida E37>E39 rilevo che la prima parte da AC1, la seconda da AC2 e la terza da AC3; è corretto o un copia incolla andato a male??

    Inoltre, da quanto capito, tu crei n fogli ognuno dei quali avrà tali celle di convalida.

    Ora, per evitare di ripetere l'evento Change su tutti i fogli che crei, se ne potrebbe fare uno solo che vale per tutti, ponendolo in ThisWorkbook. Per farlo ho/hai la necessità di conoscere quali sono i fogli che NON devono essere interessati da tale evento, al fine di escluderli dalla routine.

    Se la cosa ti interessa dovresti dirmi i nomi dei fogli da escludere, altrimenti ti trovi tutti i fogli creati con l'evento change (non è carino)

    In ultimo (ma non ultimo) ti avevo suggerito di postare un file senza dati sensibili. Ora se la psw che è all'interno del tuo file la utilizzi per cose importanti, ti suggerisco di cambiarla.)

    Saluti



    [Modificato da dodo47 18/06/2019 10:38]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 23
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 10:35
    Gentile Dodo, grazie x la immediata risposta.
    Io sn un pivello in programmazione vba, tutto cio ke vedi è un faidate al 100%'
    quesito 1: formula scarto non so farla sn sincero.
    quesito 2 le tre celle di e37-e39 DEVONO tutte e tre p artire da ac1_ac17 e sn sorpreso da cio ke mi hai detto.
    quesito 3' Sempre xke sn povero d programmazione vba, si è vero ogni foglio che si viene a creare presenterà il ripetersi dell evento worksheet change in ogni foglio personalizzato che vorrei proseguire.
    Siccome tu ne sai piu d me e lo stai avvalorando e SE PUOI, se puoi correggermi gli errori che hai sottolineato.
    per la pwd tranquillo poi inseriro la userform cn password cn asterischi.
    Tranquillo xke il progettino è ancora work in progress.
    Grazie in ogni caso. decidi in tutta serenità.
  • OFFLINE
    dodo47
    Post: 2.267
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 18/06/2019 10:39
    si, ma non mi hai risposto: quali sono i nomi dei fogli che NON devono avere l'evento change?




    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 24
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 10:41
    avevo omesso un quesito.
    i fogli da escludere eventualmente dalla convalida sono Foglio3 e foglio1e Foglio2 che si chiama Foglio_inizio che pero ogni mese crea un clone generato da copia foglio(vedi menu pannello di controllo.
    ogni mese gestisco turni e presenze su un foglio inizio che viene copiato nel foglio X E porta cn se la formattazione e le formule di foglio inizio.
    Scusa se mi sn dilungato.
    sav
  • OFFLINE
    dodo47
    Post: 2.268
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 18/06/2019 10:44
    facciamo così:
    per il momento ti escludo: foglio3 - foglio1 - foglio_inizio - Foglio_start_riep (quest'ultimo mi sembra sia la matrice per la creazione degli altri fogli e non necessita di tale evento); a te interessa che la cosa funzioni sui fogli che man mano crei.

    saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 25
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 11:11
    Si Dodo hai ragione. avevo dimenticato. Grazie
  • OFFLINE
    dodo47
    Post: 2.269
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 18/06/2019 11:25
    Ciao
    1) creato nome "mElenco" con formula:
    =SCARTO(Foglio1!$AC$1;0;0;CONTA.VALORI(Foglio1!$AC:$AC))
    vedi menu Formule > Gestione nomi.
    Tale formula serve a rendere dinamico il range di col AC del foglio1, cioè ogni volta che aggiungerai qualcosa (sia tramite le celle di convalida che manualmente), il range si amplierà automaticamente.

    2) Assegnato al range E32>E39 di "Foglio_start_riep" una convalida la cui origine è: =mElenco.
    Nota: nelle convalide è stata tolta la spunta a: "Messaggio di errore", altrimenti la segnalazione ti sarebbe stata fatta due volte, una da excel per default e l'altra dall'evento change.
    Man mano che creerai i fogli, questi avranno tale convalida per effetto del copia.

    3) Eliminata la macro (Worksheet_Change) dal foglio "Foglio_start_riep" ed inserita in ThisWorkbook (Workbook_SheetChange), che fa riferimento a tutti i fogli esclusi quelli segnalati, apportando le dovute variazioni.

    Saluti


    [Modificato da dodo47 18/06/2019 12:16]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 26
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 12:46
    Dodo. Grazie.
    appena torno a casa a pranzo provvedo a vedere tuo lavoro ma non ho dubbi sulla Alta Qualità.
    Grazie mille per la tua disponibilità.
    ti faccio sapere.
    ho in serbo da sistemare x i prox. gg. :
    _ routine x determinare nella procedura. calendario, quando
    viene pasqua
    _ una proc. x importare dati da excel a excel nel foglio1 per le anagrafiche.
    _ routine x login e pwd con asterischi sa userform
    devo sudare e studiare.
  • OFFLINE
    dodo47
    Post: 2.272
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 18/06/2019 13:07
    per la Pasqua ti consiglio caldamente:

    http://www.cpearson.com/excel/easter.aspx

    per il resto...alla prossima

    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    saverio1966
    Post: 27
    Registrato il: 19/09/2018
    Età: 57
    Utente Junior
    excel 2007
    00 18/06/2019 16:16
    Buon pomeriggio a tutti,
    Dodo ho appena visto il tuo lavoro. GRAZIE.
    ottimo lavoro.
    Ora cerco di andar avanti da solo. se avessi dei punti di domanda di una certa complessità, mi faccio vivo.
    GRAZIE ancora.