You are here:--[RISOLTO] Inserimento dati da valori con etichetta
[RISOLTO] Inserimento dati da valori con etichetta 2018-11-06T11:16:56+00:00

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

  • Autore
    Articoli
  • bg66bg66
    Partecipante
      Post totali: 26
      #7045 |

      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 argomento è stato modificato 2 settimane fa da bg66 bg66.
      • Questo argomento è stato modificato 2 settimane fa da bg66 bg66.
      • Questo argomento è stato modificato 1 settimana, 5 giorni fa da sid sid.
    • BySalvBySalv
      Amministratore del forum
        Post totali: 319

        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:

      • bg66bg66
        Partecipante
          Post totali: 26

          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: 319

            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:

          • bg66bg66
            Partecipante
              Post totali: 26

              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: 319

                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:

              • bg66bg66
                Partecipante
                  Post totali: 26

                  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 settimana, 6 giorni fa da bg66 bg66.
                • BySalvBySalv
                  Amministratore del forum
                    Post totali: 319

                    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:

                  • bg66bg66
                    Partecipante
                      Post totali: 26

                      [RISOLTO]

                      Ciao bySalv,
                      è perfetta.

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

                      Grazie ancora.
                      Gene

                      • Questa risposta è stata modificata 1 settimana, 6 giorni fa da bg66 bg66.

                    Devi essere loggato per rispondere a questa discussione.

                    Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                    Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                    Chiudi