Inserimento



  • Inserimento
    di SPAVERI (utente non iscritto) data: 16/06/2015 10:24:00

    Ciao a tutti,

    chiedo informazioni relativamente al seguente obiettivo:

    - inserire una riga copiata da una riga precedente (le prime x colonne) al variare del numero di cella compilate in una colonna di un altro foglio excel.

    ES.

    Colonna A Sheet1
    Ambiente_1
    Ambiente_2

    Colonne Sheet2:
    Nome Cognome ID Ambiente Descrizione
    Stefano Paveri 1 Ambiente_1 Descrizione_Ambiente_1
    Stefano Paveri 1 Ambiente_2 Descrizione_Ambiente_2
    Mario Rossi 2 Ambiente_1 Descrizione_Ambiente_1
    Mario Rossi 2 Ambiente_2 Descrizione_Ambiente_2

    - Se inserisco Ambiente_3 nella colonna A sheet1, come faccio ad avere nello sheet2 il seguente risultato automaticamente (es. premendo un pulsante):
    Nome Cognome ID Ambiente Descrizione
    Stefano Paveri 1 Ambiente_1 Descrizione_Ambiente_1
    Stefano Paveri 1 Ambiente_2 Descrizione_Ambiente_2
    Stefano Paveri 1 Ambiente_3 Descrizione_Ambiente_3
    Mario Rossi 2 Ambiente_1 Descrizione_Ambiente_1
    Mario Rossi 2 Ambiente_2 Descrizione_Ambiente_2
    Mario Rossi 2 Ambiente_3 Descrizione_Ambiente_3

    Vi rignrazio in anticipo per la collaborazione



  • di alfrimpa data: 16/06/2015 12:30:38

    Ciao Spaveri

    Premesso che questo è un primo tentativo assai grezzo e sicuramente migliorabile potresti provare con la macro sottostante.

    Due condizioni:

    1) In colonna G (o dove vuoi) vanno inseriti i nominativi singoli;
    2) la macro va lanciata ad ogni singolo inserimento in Foglio1.

    Ripeto dovrà essere sicuramente modificata/migliorata.

    Spero di essere stato chiaro e ti allego il file

    Alfredo
     
    Sub Inserisci()
    Dim lr As Long
    Dim miorange As Range
    Dim tabella As Range
    Dim cel As Range
    lr = Range("A" & Rows.Count).End(xlUp).Row
    Set miorange = Range("G1:g2")
    Set tabella = Range("a1:c" & lr)
    For Each cel In miorange
        lr = Range("A" & Rows.Count).End(xlUp).Row
        Cells(lr + 1, 1) = cel.Value
        Cells(lr + 1, 2) = Application.WorksheetFunction.VLookup(cel, tabella, 2, False)
        Cells(lr + 1, 3) = Application.WorksheetFunction.VLookup(cel, tabella, 3, False)
        Cells(lr + 1, 4) = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Value
        Cells(lr + 1, 5) = "Descrizione_Ambiente_" & Right(Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Value, 1)
    Next cel
    Range("A1").Select
        ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Foglio2").Sort.SortFields.Add Key:=Range("A2:A9") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Foglio2").Sort
            .SetRange Range("A1:E9")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    






  • di SPAVERI (utente non iscritto) data: 16/06/2015 23:54:55

    uau!! Domani mattina a lavoro la provo subito e ti faccio sapere!
    Comunque anche se non c'è una soluzione unica ogni passo in avanti per me è ottimo.

    Grazie ti aggiorno!



  • di alfrimpa data: 17/06/2015 12:12:50

    Ciao Spaveri

    Ti ho riallegato il file (Spaveri_1) perché nel precedente c'era un piccolo errore.

    Devi provare questo.

    Alfredo




  • Inserimento evoluzione dinamica
    di SPAVERI (utente non iscritto) data: 19/06/2015 10:12:14

    Grazie alfrimpa, veramente gentile, ho anche abbastanza compreso il codice.
    Ti propongo un evoluzione compatibilmente con i tuoi impegni!

    Allora, non cambia molto ma questa volta le prime celle sono mergiate ovvero.
    Sheet1:
    Colonna A
    ALL
    Ambiente_1
    Ambiente_2

    Sheet2:
    1 Colonna A Colonna B Colonna C Colonna D Colonna E Colonna F
    2 Signif ALL -vuota-
    3 Rischio Sicurezza Attacchi Signif Ambiente_1 -vuota-
    4 Signif Ambiente_2 -vuota-

    (es. "Rischio" è mergiata dalla riga a2:a4)
    Ora come nel caso inserendo ambiente 3 nello sheet1 sarebbe fantastico con una macro ottenere:

    Sheet2:
    1 Colonna A Colonna B Colonna C Colonna D Colonna E Colonna F
    2 Signif ALL -vuota-
    3 Rischio Sicurezza Attacchi Signif Ambiente_1 -vuota-
    4 Signif Ambiente_2 -vuota-
    5 Signif Ambiente_3 -vuota-

    Non mi pare molto diversa dalla precedente ma non ci riesco, forse è un problema delle celle mergiate, ma pultroppo devono essere cosi.

    Grazie in anticipo,
    Stefano



  • di SPAVERI (utente non iscritto) data: 19/06/2015 10:19:29

    Correggo, il mess non si viusalizza come volevo, cerco di far capire.

    Ti propongo un evoluzione compatibilmente con i tuoi impegni!

    Allora, non cambia molto ma questa volta le prime celle sono mergiate ovvero.
    Sheet1:
    Colonna A
    ALL
    Ambiente_1
    Ambiente_2

    Sheet2:
    1 Colonna A Colonna B Colonna C Colonna D Colonna E Colonna F
    2 - - - Signif ALL vuota-
    3 Rischio Sicurezza Attacchi Signif Ambiente_1 -vuota-
    4 - - - Signif Ambiente_2 vuota-

    il - indica che il campo è spostato quindi "Signif" sta nella colonna D e cosi via ALL nella colonna E
    (es. "Rischio" è mergiata dalla riga a2:a4)
    Ora come nel caso inserendo ambiente 3 nello sheet1 sarebbe fantastico con una macro ottenere:

    Sheet2:
    1 Colonna A Colonna B Colonna C Colonna D Colonna E Colonna F
    2 - - - Signif ALL -vuota-
    3 Rischio Sicurezza Attacchi Signif Ambiente_1 -vuota-
    4 - - - Signif Ambiente_2 -vuota-
    5 - - - Signif Ambiente_3 -vuota-

    Non mi pare molto diversa dalla precedente ma non ci riesco, forse è un problema delle celle mergiate, ma pultroppo devono essere cosi.

    Grazie in anticipo,
    Stefano



  • di alfrimpa data: 19/06/2015 12:45:23

    Ciao Stefano

    Dalla tua descrizione non ho capito molto dovresti, quindi, allegare un tuo file di esempio con la struttura reale e dati fittizi e mostrarmi il risultato finale desiderato.

    Tieni presente, però, che quando si usa il VBA le celle unite vanno evitate come la peste (questa è una mia opinione ma credo condivisa da molti) perché spesso (l'ho sperimentato) si hanno effetti indesiderati e talvolta inspiegabili.

    Alfredo

    P.S. La prossima settimana sarò in ferie per cui se hai un po' di pazienza.......





  • di SPAVERI (utente non iscritto) data: 19/06/2015 15:18:12

    Vero non ci ho pensato, allegato cmq lo reso abbastanza leggibile.

    Grazie ancora!!!!!!!!!



  • di alfrimpa data: 19/06/2015 15:25:10

    Stefano il file che hai allegato mi ha dato un errore all'apertura - possibile perdita dei dati.

    Puoi riallegarlo?

    Alfredo





  • di alfrimpa data: 19/06/2015 15:30:01

    La presenza di celle unite mi preoccupa assai

    Speriamo di risolvere in qualche modo.

    Alfredo.

    Ripeto da lunedì sono in ferie per cui non aspettarti una risposta a breve (sempre che non intervenga qualche altro utente del forum)





  • di SPAVERI (utente non iscritto) data: 19/06/2015 15:33:09

    inserito di nuovo, si vero ma una matrice nella versione originale di centinaia di righe quindi alcune celle mergiate sono necessarie.

    Si accettano ulteriori spunti naturlamente, nn pretendo che se non si puo fare non si puo fare, sarebbe importante che tutti gli altri campi rimangono in questa modalità.

    Grazie



  • di alfrimpa data: 19/06/2015 15:41:43

    Strano mi dà sempre errore in apertura del file

    Prova ad usare un sito di file sharing tipo Filedropper o dropbox ed incolla qui il link che ti viene restituito.

    Attenzione le prime quattro lettere del collegamento vanno interspaziate (h t t p) altrimenti il forum lo vede come spam e non lo accetta.

    Alfredo





  • di alfrimpa data: 19/06/2015 16:01:36

    Ma la mia macro l'hai provata? Fa quello che hai chiesto?

    Alfredo





  • di SPAVERI (utente non iscritto) data: 19/06/2015 16:18:34

    si si funziona alla grande.
    Il tuo appoggio nella colonna g va benissimo anche per questa nuova proposta.




  • di alfrimpa data: 19/06/2015 16:28:24

    Cerca di riallegare il file; i due precedenti davano errore e si aprivano in maniera "strana"

    Alfredo





  • di SPAVERI (utente non iscritto) data: 19/06/2015 16:50:50

    prova ad aprire quello .xlsx (grazie solo per il tentativo di aprirlo vuol dire che sei motivato ahaha)



  • di alfrimpa data: 19/06/2015 17:05:35

    Io ho avuto problemi con entrambi

    Comunque ci risentiamo quando rientro

    Alfredo





  • di alfrimpa data: 19/06/2015 18:47:03

    Da quel che ho potuto vedere dai file la questione (se ho capito bene) mi sembrerebbe più semplice della precedente (fermo restando il problema delle celle unite)

    Alfredo





  • di alfrimpa data: 19/06/2015 20:11:05

    Stefano sai dove avremo il problema delle celle unite secondo me quando si dovrà fare l'ordinamento dei dati per nominativo

    Alfredo





  • di alfrimpa data: 20/06/2015 16:25:46

    Ma in questo tuo nuovo esempio i nomi non ci sono più?

    Alfredo





  • di alfrimpa data: 21/06/2015 15:39:00

    Stefano dovresti essere più chiaro su quello che vuoi ottenere.

    E' solo quello indicato sul foglio Output desiderato?

    Ed i nomi?

    Alfredo





  • di SPAVERI (utente non iscritto) data: 22/06/2015 10:14:27

    Ciao Alfredo,

    buon inizio settimana e grazie ancora per il tuo supporto.

    Allora si le nuove specifiche come ti dicevo non sono complesse e sono come scritto nello sheet output desiderato, dalla colonna G in poi le celle sono vuote poichè devono essere riempite dall'utente, è la prima parte che deve essere automatizzata.
    L'inserimento dell'Ambiente_3 implica che automaticamente per quel determinato rischio in Colonna D, l'utente deve valutare un ulteriore riga legata a quell'ambiente.
    Nell'esempio ti ho messo 1 solo rischio (colonna D), la difficolta aumenta se come nel caso reale che devo applicare, la riga legata all'ambiente 3 da aggiungere va aggiunta per più rischi, come nella prima macro che hai fatto. Rischi in colonna D sempre contraddistinti da celle unificate appunto :(

    dimmi se c'è qualcosa che non è chiaro.

    Stefano



  • di alfrimpa data: 22/06/2015 11:45:51

    Ciao Stefano

    Premesso di non essere per niente sicuro di aver capito ti allego file "Spaveri3" nel qualo ho inserito la sottostante macro.

    Tu devi posizionarti sul foglio Input, sull'ultima cella che vuoi inserire su Matrice e cliccare su "Inserisci"

    Mi sembrerebbe troppo semplice ma ho la sensazione che non sia così.

    Da oggi pomeriggio e per una settimana sono in ferie (senza pc) per cui dovresti avere un po' di pazienza.

    Ho comunque l'iPad con il quale frequentare il Forum.

    Alfredo
     
    Sub inserisci()
    Dim ur As Long
    ur = Worksheets("Matrice").Range("F" & Rows.Count).End(xlUp).Row
    ActiveCell.Copy Destination:=Worksheets("Matrice").Range("F" & ur + 1)
    Worksheets("Matrice").Range("F" & ur + 1).Offset(0, -1).Value = "Significativo"
    Worksheets("Matrice").Range("A2:A" & ur + 1).Merge
    Worksheets("Matrice").Range("b2:b" & ur + 1).Merge
    Worksheets("Matrice").Range("c2:c" & ur + 1).Merge
    Worksheets("Matrice").Range("d2:d" & ur + 1).Merge
    End Sub






  • di SPAVERI (utente non iscritto) data: 22/06/2015 14:03:05

    alfredo così mi emozioni!! sei velocissimo! ....ti pare tranquillo se non ci sei, nel caso ti mostro quando torni se io ho fatto passi in avanti!



  • di alfrimpa data: 22/06/2015 14:13:03

    Così cercheremo di capirne di più

    Ma quest'ultima macro l'hai provata? Fa quel che chiedi?

    Ripeto ho con me l'iPad per cui potremo sentirci anche in questa settimana.

    Alfredo





  • di SPAVERI (utente non iscritto) data: 22/06/2015 14:26:03

    La tua macro (come al solito) va alla grande, ora ti allego un nuovo file. In questo ho messo l'output che ancora nn riesce a raggiungere la macro in quanto da errore "merging cells only keeps the upper left cell value, and discard the other value".

    Questo caso è super dificile perchè avendo messo due rischi distinti di cui uno è quello di prima mentre il secondo (per generalizzare la cosa il piu possibile) è composta da una sola riga, quindi con l'aggiunta del terzo ambiente dovrebbe diventare di due righe le cui prime mergiate!!...si sale di livello ahahaha



  • di alfrimpa data: 22/06/2015 16:38:02

    Ciao Stefano

    Ho guardato (con l'iPad) il tuo ultimo file ed ho visto che siamo saliti di livello

    Mi riservo di ragionarci con calma quando avrò il pc a disposizione.

    Alfredo




  • aggiornamento
    di SPAVERI (utente non iscritto) data: 02/07/2015 15:35:08

    Ciao Alfredo,

    ora mi sto concentrando su una altra cosa, visto che quello era troppo difficile.
    Mi servirebbe una mano per migliorare questa macro che va alla grande.

    In poche parole a questa macro che copia determinate righe e colonne su un altro sheet, dovrei riuscire a copiare ogni singola riga per n volte a seconda del valore in una cella del foglio origine.....penso che per te è un gioco da ragazzi.
     
    Sub copypastecolumndata()
    Sheet11.Select
    
    Range("B4").Value = "Rischio di 1° Livello"
    Range("C4").Value = "Rischio di 2° Livello"
    Range("D4").Value = "Rischio di 3° Livello"
    Range("E4").Value = "Rischio di 4° Livello (Negative Example Scenario)"
    
    Sheet5.Select
    Dim Rischio1 As String
    Dim Rischio2 As String
    Dim Rischio3 As String
    Dim Rischio4 As String
    
    Dim lastrow As Long
    
    lastrow = Sheet5.Cells(Rows.Count, 3).End(xlUp).Row
    For i = 7 To lastrow
    If Cells(i, 13) = 1 Then
    Rischio1 = Sheet5.Cells(i, 3)
    Rischio2 = Sheet5.Cells(i, 4)
    Rischio3 = Sheet5.Cells(i, 6)
    Rischio4 = Sheet5.Cells(i, 8)
    
    Sheet11.Activate
    erow = Sheet11.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
    Sheet11.Cells(erow, 2) = Rischio1
    Sheet11.Cells(erow, 3) = Rischio2
    Sheet11.Cells(erow, 4) = Rischio3
    Sheet11.Cells(erow, 5) = Rischio4
    
    Range("B:E").Columns.AutoFit
    Sheet5.Activate
    End If
    Next i
    
    Sheet11.Activate
    
    End Sub
    



  • di alfrimpa data: 02/07/2015 15:45:55

    Ciao Stefano

    Leggendo il codice non riesco a capire bene.

    Puoi allegare un file di esempio sul quale mi spieghi quello che vuoi fare?

    Quanto al "gioco da ragazzi" mica è sempre detto

    Alfredo





  • di Vecchio Frac data: 02/07/2015 15:46:27

    Indenta meglio altrimenti il codice è illeggibile :)
    (e i Dim per favore a inizio sub... un po' di convenzione)

    cit. "dovrei riuscire a copiare ogni singola riga per n volte a seconda del valore in una cella del foglio origine"
    ---> Dove si trova questo valore n? cioè qual è la cella del foglio origine che contiene il valore per cui "ogni singola riga" deve essere ripetuta? e ripetuta dove? a seguire? in altro foglio?

    E comunque, ci hai provato? almeno concettualmente intendo... come faresti se dovessi farlo a mano? stendi un elenco di passi come se tu fossi al telefono e dovessi spiegarlo a qualcuno con davanti Excel.
    Dopo quale punto del codice secondo te si deve inserire il codice che replica il dato da inserire?

    E infine per darti uno spunto... le variabili "rischio*" non ti servono nemmeno ;)





  • di SPAVERI (utente non iscritto) data: 02/07/2015 16:33:25

    la macro funziona benissimo, dovrei solamente inserire un ciclo penso.

    La cella j7 dello sheet input è appunto l'input del numero di righe da copiare.
    nella macro le specifiche di copia della colonna sono customizzate per il mio excel.
    Comunque ho allegato il file con l'output desiderato.



  • di SPAVERI (utente non iscritto) data: 03/07/2015 15:08:20

    ci sono riuscito!
    Grazie ancoraaaaa



  • di alfrimpa data: 03/07/2015 16:02:11

    Ciao Stefano,

    Lieto che tu abbia risolto da solo. Queste sono soddisfazioni eh

    Sarebbe comunque "carino" che tu condividessi con il forum la tua soluzione in modo che possa essere utile anche ad altri.

    Alfredo





  • di SPAVERI (utente non iscritto) data: 03/07/2015 16:47:27

    Eccola!

    macro che:
    copia determinate colonne di uno sheet in una determinata posizione di un altro sheet, le righe inoltre vengono copia n volte a seconda del valore indicato in una cella apoosita.
     
    Sub copypastecolumndata()
    Sheet11.Select
    
    Range("B4").Value = "Rischio di 1° Livello"
    Range("C4").Value = "Rischio di 2° Livello"
    Range("D4").Value = "Rischio di 3° Livello"
    Range("E4").Value = "Rischio di 4° Livello (Negative Example Scenario)"
    
    Sheet5.Select
    Dim Rischio1 As String
    Dim Rischio2 As String
    Dim Rischio3 As String
    Dim Rischio4 As String
    
    Dim lastrow As Long
    Dim CountaAmbienti As Integer
    CountaAmbienti = Sheet5.Cells(7, 11)
    
    lastrow = Sheet5.Cells(Rows.Count, 3).End(xlUp).Row
    
    For i = 7 To lastrow
    For j = 1 To CountaAmbienti
    If Cells(i, 13) = 1 Then
    Rischio1 = Sheet5.Cells(i, 3)
    Rischio2 = Sheet5.Cells(i, 4)
    Rischio3 = Sheet5.Cells(i, 6)
    Rischio4 = Sheet5.Cells(i, 8)
    
    Sheet11.Activate
    erow = Sheet11.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
    Sheet11.Cells(erow, 2) = Rischio1
    Sheet11.Cells(erow, 3) = Rischio2
    Sheet11.Cells(erow, 4) = Rischio3
    Sheet11.Cells(erow, 5) = Rischio4
    
    Range("B:E").Columns.AutoFit
    Sheet5.Activate
    End If
    Next j
    Next i
    
    Sheet11.Activate
    
    End Sub