modifica dati database



  • modifica dati database
    di Luke74 data: 14/05/2017 22:38:04

    Buonasera,
    da giorni sto tentando di creare una userform per modificare una riga in un database da me creato ma sto brancolando nel buio!
    in pratica dato un database semplicissimo con 3 colonne (A,B,C) chiamate CODICE, REFERENZA e DATA devo creare una userform che mi chieda di inserire prima il codice, e poi la nuova data da inserire al posto dell'attuale.
    a questo punto dando ok automaticamente dovrebbe modificare la data relativa alla riga del codice inserito...
    ho provato varie soluzioni ma inutilmente in quanto sto iniziando ad usare VBA proprio in questi giorni, ma a differenza delle macro che uso regolarmente (con i miei limiti) non riesco ad entrare nell'ottica di come si devono inserire le formule...
    Vi sarei grato se mi aiutaste, in modo che io possa poi studiarmi il codice e capire passo a passo come sia strutturato
    vi ringrazio anticipatamente per l'aiuto
    Luca



  • di alfrimpa data: 15/05/2017 06:29:11

    Ciao Luca

    Allega piccolo file dj esempio con pochi dati userform e spiegazione su questo di quello che vuoi fare.

    Alfredo

    P.S. Ma perchè devi inserire formule sul foglio? Non puoi far fare tutto al VBA?





  • di Luke74 data: 15/05/2017 07:46:40

    Ciao Alfredo,
    ho provato ad allegare una foto del file come esempio.
    Purtroppo fino a pochi giorni fa non sapevo dell'esistenza del VBA e tutti i file che mi sono creato sono costruiti con formule e macro in excel, dal momento che ho visto qualche video sul VBA e sulle sue potenzialità sono rimasto folgorato ed affascinato, sto provando ad entrare in questo mondo ma ho trovato non poche difficoltà.
    Il mio fine è quello di avere un codice esatto sul file di esempio che ho allegato per poi studiarlo e cercare di capire le funzioni e come si scrivono....
    ti ringrazio per l'aiuto che riuscirai a darmi
    Luca



  • di patel data: 15/05/2017 08:26:08

    il file di esempio deve essere un file excel e non una immagine





  • di Luke74 data: 15/05/2017 08:40:57

    fatto Patel, ho allegato un file xslm e lo stesso con formato zip
    scusate...



  • di patel data: 15/05/2017 10:39:32

    prova questo codice eliminando tuuto il resto
     
    Dim c As Range
    
    Private Sub cmdmodificadatabase_Click()
    c.Offset(0, 2).Value = tctnuovadata.Text
    End Sub
    
    Private Sub txtcodice_Change()
    With Sheets("database").Range(Range("A1"), Range("A1").End(xlDown))
      Set c = .Find(txtcodice.Text, LookIn:=xlValues)
      If Not c Is Nothing Then
        txtdataattuale.Text = c.Offset(0, 2)
      End If
    End With
    End Sub
    






  • di Luke74 data: 15/05/2017 13:31:23

    Ciao Patel,
    Il codice funziona alla perfezione, dovrei solo aggiungere un blocco della finestra "data attuale" perché serve solo a scopo di vedere quale era la data precedente.
    Dovrei poi adattare il codice al database reale che è una tabella A1:H8000 il foglio si chiama "db referenze" , la colonna sulla quale cercare il codice è la C è quella dove si deve modificare la data è la E
    Dovrò lavorarci su studiando il tuo codice (per ora mi sembra un codice nucleare!)ma credo che con pazienza posso riuscirci
    Non so come ringraziarti
    Luca



  • di Luke74 data: 15/05/2017 15:34:41

    Piccolo problema rilevato, inverte giorni con mesi usando la data americana, se inserisco 1/6 lui converte in 6/1 quindi al posto del primo giugno esce il 6 di gennaio!



  • di patel data: 15/05/2017 15:54:28

    prova con

     
    Private Sub cmdmodificadatabase_Click()
    c.Offset(0, 2).Value = CDate(tctnuovadata.Text)
    End Sub






  • di Luke74 data: 15/05/2017 16:43:01

    Patel sei un grande!
    Ora è perfetto e l'ho adattato al mio database ma evidentemente il database è troppo ampio, se cerco un codice tra le prime righe è velocissimo mentre se prendo la riga 7500, ad esempio, mi si blocca l'userform e ci mette una vita a permettermi di modificare, forse ho impostato male il database, ma non capisco perché se uso la funzione trova è comunque velocissimo....secondo te ci può essere una soluzione?



  • di patel data: 15/05/2017 16:51:35

    invece di
    Private Sub txtcodice_Change()
    prova
    Private Sub txtcodice_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    dovrai però digitare l'intero codice e uscire dalla textbox






  • di Luke74 data: 15/05/2017 17:09:37

    Ho provato ma non si risolve,forse è proprio un pacco troppo pesante il database...



  • di patel data: 15/05/2017 18:01:42

    l'hai eliminata la Private Sub txtcodice_Change() ?
    mi sembra strano che il find sia così lento, allega un file o un link al file





  • di Luke74 data: 15/05/2017 18:20:20

    Si l'ho modificata come mi hai consigliato, a meno che non abbia sbagliato qualcosa io!
    ora ti allego il file reale zippato cosi vedi se ho fatto qualche cavolata io(il file è una mia creazione quindi sicuramente è pesante e fatto male....)
    grazie mille in anticipo se hai consigli per alleggerirlo e renderlo migliore
    ti saluto
    Luca



  • di Luke74 data: 15/05/2017 18:31:23

    La password è vr46



  • di patel data: 15/05/2017 19:35:00

    se uso la funzione trova per cercare un codice in fondo alla tabella la ricerca è lenta come la macro, purtroppo non conosco rimedi.





  • di Luke74 data: 15/05/2017 21:50:58

    ti ringrazio comunque, mi hai aiutato moltissimo
    Luca