You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] Inserimento dati da valori con etichetta
[RISOLTO] Inserimento dati da valori con etichetta2018-11-06T11:16:56+01:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Inserimento dati da valori con etichetta

Taggato: 

Visualizzazione 8 filoni di risposte
  • Autore
    Post
    • bg66bg66
      Partecipante
        Post totali: 60

        Ciao a tutti,

        con l’immenso aiuto di Sid :rose: avevo chiuso questo thread: “[RISOLTO] Inserimento dati condizionato da verifica duplicati in due colonne”.

        Ho provato ad adattare la macro:

        Sub CreaDB()
        Dim sh1 As Worksheet, sh2 As Worksheet 'ho creato 2 variabili oggetto per i fogli
        Dim Ur As Long 'creato la variabile per l'ultima riga
        Dim sDI As String, sUPr As String, sData As Date
        
        Set sh1 = Worksheets("Incident Investigation") 'metto negli oggetti creati il nome del foglio
        Set sh2 = Worksheets("DB") 'ora scrivendo solo sh1-sh2 mi riferisco ad un foglio oppure un altro
        sh1.Activate 'mi posiziono sul foglio1 "Incident Investigation"
        
        'trovo l'ultima riga occupata + 1 per predere la cella vuota
        Ur = sh2.Cells(Rows.Count, 3).End(xlUp).Row + 1 'ex 1
        
        sEve = sh1.Range("X9").Value 'tipo evento
        sUPr = sh1.Range("Gender").Value 'unità produttiva
        sData = sh1.Range("DateIncident").Value 'data accadimento
        'If Not VERIFICA_DUPLICATI(sEve, sUPr, sh2, Ur, sData) Then
        
        'a questo punto senza fare copia/incolla, passo direttamente i valori dal foglio1 al foglio2
        'notare che uso due esempi uno con Cells che fa riferimento Cells(Riga, Colonna) l'altro con range
        'io trovo più conveniente Cells
        sh2.Range("A" & Ur) = sh1.Range("N_ID")
        sh2.Cells(Ur, 3) = sUPr
        sh2.Cells(Ur, 4) = sEve
        sh2.Cells(Ur, 5) = sData
        sh2.Range("G" & Ur) = sh1.Range("Department")
        'sh2.Cells(Ur, 7) = sh1.Range("Department")
        sh2.Cells(Ur, 8) = sh1.Range("TitleJob")
        sh2.Cells(Ur, 9) = sh1.Range("BodyPart")
        sh2.Cells(Ur, 10) = sh1.Range("Injury")
        
        MsgBox "Aggiornamento completato", vbInformation
        'Else
        'MsgBox "Evento già presente", vbExclamation, "ATTENZIONE"
        'End If
        
        Set sh1 = Nothing 'cancello le variabili oggetto
        Set sh2 = Nothing
        End Sub

        ad una nuova esigenza ma solo alcuni valori (colonne A:E) vengono riportati quindi….sbaglio qualcosa.

        Il dubbio è che avendo utilizzato etichette per evitare problemi con le celle unite questo crei casino (??!!)

         

        Grazie per l’aiuto

        https://www.dropbox.com/s/a4kdm9qu8su2c2e/Incident-Investigation%20vForum.xlsm?dl=0

        PS In aggiunta, se fosse possibile e se non chiedo troppo, mi piacerebbe compilare sulla stessa riga:

        1) colona K con la formula =SE(DATA.DIFF(E3;F3;”d”)=0;””;DATA.DIFF(E3;F3;”d”))

        2) colona L con la formula =SE(GIORNI.LAVORATIVI.TOT(E3;F3)=0;””;GIORNI.LAVORATIVI.TOT(E3;F3))

         

         

        • Questo topic è stato modificato 1 anno, 6 mesi fa da bg66bg66.
        • Questo topic è stato modificato 1 anno, 6 mesi fa da bg66bg66.
        • Questo topic è stato modificato 1 anno, 6 mesi fa da sidsid.
      • BySalvBySalv
        Amministratore del forum
          Post totali: 690

          Ciao Gene, per le celle unite puoi usare il cerca.vert() cosi eviti il VBA.

          ti metto il tuo esempio con il cerca.vert(), ho creato un nuovo nome “DB” per l’elenco nel foglio DB, inoltre ho aggiunto 2 colonne “Ruolo, Nominativo” perche mancavano forse prende quei dati da altro elenco, quindi si dovrebbe integrare un altro elenco.

          all’elenco in DB puoi aggiungere tutti i dati che vuoi, l’unica cosa che la colonna “A” deve avere codici unici, se ci sono 2 codici uguali in quella colonna la ricerca del cerca.vert() si fermerà sempre sul primo.

          nel foglio “Incident………” nella cella “C6” inserisci NP oppure 1/2018 e vedrai i dati cambiare secondo la scelta che farai, cosi per tutti i dati che aggiungerai nel foglio DB.

          https://mega.nz/#!EFciySiQ!Honwh4z0Rg-B6OiEnfK-TVQK7hmPlIQ0yLOUWz8VESs

          Ciao By Sal :bye:

          Ciao By Sal (8-)
          se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

        • bg66bg66
          Partecipante
            Post totali: 60

            Ciao By Sal,

            in realtà ho provato ad adattare lo script di Sid perchè ho bisogno di fare il contrario ossia creare la scheda infortunio in incident investigation e solo alcuni dati riportarli in DB per successivi dati statistici ( questo è il motivo per cui non necessito del nominativo del lavoratore nè il suo ruolo specifico).

            PS Aiutatemi anche per il PS del post 1.

            Grazie.

            Gene

             

          • BySalvBySalv
            Amministratore del forum
              Post totali: 690

              Ciao Gene, quindi puoi anche eliminare le 2 ultime colonne che ho aggiunto e togliere le formule che ho inserito nelle zone opportune.

              Inoltre variando opportunamente il 3° valore (Indice) cioè la colonna del dato da riportare nella formula, puoi portare qualsiasi dato dal foglio “DB” al foglio “Incident…..”

              Per il Ps, in definitiva che vorresti, vedo che le formule già le hai, puoi trascinarle in basso oppure vuoi che quando inserisci una data nelle colonne “E-F” si inserisce la formula nelle colonne “K-L”.

              se è cosi allora copia questa macro nel modulo del foglio “DB”

              Private Sub Worksheet_Change(ByVal Target As Range)
              Dim r
              
              r = Target.Row
              If Not Intersect(Target, [f:f]) Is Nothing Then
                  If r = 1 Then Exit Sub
                  Application.EnableEvents = False
                  Range("K" & r).FormulaR1C1 = "=IF(DATEDIF(RC[-6],RC[-5],""d"")=0,"""",DATEDIF(RC[-6],RC[-5],""d""))"
                  Range("L" & r).FormulaR1C1 = "=IF(NETWORKDAYS(RC[-7],RC[-6])=0,"""",NETWORKDAYS(RC[-7],RC[-6]))"
                  Application.EnableEvents = True
              End If
              
              End Sub

              con questa quando inserisci la seconda data nella colonna “F” verranno inserite le due formule per il calcolo nelle colonne “K-L” quindi ti daranno il calcolo dei giorni.

              Ciao By Sal :bye:

              Ciao By Sal (8-)
              se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

            • bg66bg66
              Partecipante
                Post totali: 60

                Ciao By Sal

                Inoltre variando opportunamente il 3° valore (Indice) cioè la colonna del dato da riportare nella formula, puoi portare qualsiasi dato dal foglio “DB” al foglio “Incident…..”

                Sono due giorni che sbatto la testa per riuscirci.
                Pensavo di averlo fatto ma come scritto esegue l’operazione solo per alcune colonne.
                Mi aiuti con un riferimento più preciso a capire qual’è il valore da toccare.

                Grazie
                Gene

              • BySalvBySalv
                Amministratore del forum
                  Post totali: 690

                  Ciao Gene, vedi qua come funziona il Cerca.Vert(), nel sito in Home ci sono molti articoli riguardanti il funzionamento di Excel.

                  con il tempo a disposizione,ne sto creando altri, ma vado a rilento.

                  https://www.bysal-excel.it/funzione-cerca-vert/

                  dimmi se ti è chiaro.

                  Ciao By Sal :bye:

                  Ciao By Sal (8-)
                  se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

                • bg66bg66
                  Partecipante
                    Post totali: 60

                    Ciao By Sal,
                    scusami ma credo che ti stò portando fuori pista. Provo a spiegarmi meglio.
                    Il problema è che adattando la macro di Sid ottengo come risultato che solo alcune celle (vedi immagine del primo post) vengono copiate nel foglio di lavoro DB e non capisco il perchè?

                    Grazie per l’aiuto
                    Gene

                    • Questa risposta è stata modificata 1 anno, 6 mesi fa da bg66bg66.
                  • BySalvBySalv
                    Amministratore del forum
                      Post totali: 690

                      Ciao Gene, non avevo capito che bisognava prendere i dati dal foglio Incident a DB, avevo capito il contrario da DB ad incident.

                      ti ho rifatto la macro, rinominando la vecchia, ecco la macro

                      Sub CreaDB()
                      Dim r, c, sh1 As Worksheet, sh2 As Worksheet
                      
                      Set sh1 = Worksheets("DB")
                      Set sh2 = Worksheets("Incident Investigation")
                      sh1.Activate
                      r = sh1.Cells(Rows.Count, 1).End(xlUp).Row + 1
                      sh1.Cells(r, 1) = sh2.Cells(6, 3)
                      sh1.Cells(r, 3) = sh2.Cells(6, 17)
                      sh1.Cells(r, 4) = sh2.Cells(9, 24)
                      sh1.Cells(r, 5) = sh2.Cells(6, 6)
                      sh1.Cells(r, 7) = sh2.Cells(6, 20)
                      sh1.Cells(r, 8) = sh2.Cells(9, 9)
                      sh1.Cells(r, 9) = sh2.Cells(26, 16)
                      sh1.Cells(r, 10) = sh2.Cells(28, 16)
                      sh1.Cells(r, 11).FormulaR1C1 = "=IF(RC[-5]="""","""",DATEDIF(RC[-6],RC[-5],""d""))"
                      sh1.Cells(r, 12).FormulaR1C1 = "=IF(RC[-6]="""","""",NETWORKDAYS(RC[-7],RC[-6]))"
                      MsgBox "Aggiornamento completato", vbInformation
                      Set sh1 = Nothing
                      Set sh2 = Nothing
                      
                      End Sub

                      ma attenzione come la vecchia la macro non controlla se ci sono doppioni, ho inserito un pulsante per lanciare la macro, ti inserisce anche le formule per i giorni di infortunio.

                      il link al file
                      http://www.filedropper.com/incident-investigationvforum1

                      Ciao By Sal :bye:

                      Ciao By Sal (8-)
                      se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

                    • bg66bg66
                      Partecipante
                        Post totali: 60

                        [RISOLTO]

                        Ciao bySalv,
                        è perfetta.

                        Nei prossimi giorni provo a implementare il controllo su eventuali doppi inserimenti.

                        Grazie ancora.
                        Gene

                        • Questa risposta è stata modificata 1 anno, 6 mesi fa da bg66bg66.
                    Visualizzazione 8 filoni di risposte
                    • Devi essere connesso per rispondere a questo topic.