macro per BoM



  • macro per BoM
    di aluren000 (utente non iscritto) data: 10/03/2014 18:16:28

    Salve,
    il mio responsabile mi ha chiesto di fargli una macro ma non sono buono...potete aiutarmi?
    Allora : ho estratto la BoM di una commessa in Excel e mi ha perso la "scalettatura"
    Questo è un esempio:

    Descrizione Codice Livello
    MAcchina 1102568 1
    Ruota 1102544 2
    Cerchione 1102593 3
    Portiera 110483 2
    Finestrino 20156 3


    Io ho bisogno di una macro che in base al livello mi sposta la riga : es se siamo a livello 2, mi si sposta la riga di una cella, se siamo a livello 3 di 2 celle e cosi via:

    Dovrebbe venire così:

    Descrizione Codice Livello
    MAcchina 1102568 1
    --------------Ruota 1102544 2
    --------------------------Cerchione 1102593 3
    -------------Portiera 110483 2
    --------------------------Finestrino 20156 3


    Ovvero viene a scaletta
    Potete aiutarmi? vi prego è urgente, mi ha detto di farglielo ma non riesco proprio.

    Grazie mille per l'aiuto =)





  • di lepat (utente non iscritto) data: 10/03/2014 19:09:14

    prova questa
     
    Sub a()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    For r = 2 To LR
      liv = Cells(r, 3)
      For i = 2 To liv
        Cells(r, 1).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
      Next
    Next
    End Sub



  • di scossa data: 10/03/2014 21:08:21

    Un'alternativa per risparmiare il secondo ciclo For...Next:
     
    Sub scaletta()
    Dim nLastRow As Long
    Dim liv As Long
    Dim j As Long
    
    nLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For j = 2 To nLastRow
      liv = Cells(j, 3)
      Range(Cells(j, 1), Cells(j, 3)).Cut Cells(j, liv)
    Next
    End Sub
    



  • di Namargrog (utente non iscritto) data: 10/03/2014 22:10:57

    O porca paletta e mò sto cut da dove salta fuori?

    Marco mi fai sentire sempre un pivello!

    Domani con un editor sotto mano lo studio



  • di Grograman (utente non iscritto) data: 10/03/2014 22:13:12

    Ah trovato, non ci avevo mai fatto caso che il parametro "destination" potesse essere usato come con il copy to

    ma allora SONO un pivello!!



  • di aluren000 (utente non iscritto) data: 11/03/2014 08:00:52

    Ok ragazzi provo subito e vi dico, grazie milleeeeeeeee



  • di lepat (utente non iscritto) data: 11/03/2014 08:07:35

    C'è sempre da imparare da Scossa, prima di postare ci ho pensato un po' per cercare di evitare il secondo loop, ma senza risultato.



  • di aluren000 (utente non iscritto) data: 11/03/2014 08:14:59

    Ragazzi una mano, è la prima volta che uso il Visual Basic e non sono proprio in grado.....ho comprato un manuale ma iniziare non è facile:
    Allora io metto il codice:

    Sub scaletta()
    Dim nLastRow As Long
    Dim liv As Long
    Dim j As Long

    nLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For j = 2 To nLastRow
    liv = Cells(j, 3)
    Range(Cells(j, 1), Cells(j, 3)).Cut Cells(j, liv)
    Next
    End Sub

    Se io voglio che mi fa il controllo del Livello (perchè è quello che mi fa spostare la riga ) e nel mio file il livello è la colonna K, cosa devo cambiare nel codice ? Altra cosa, visto che sono un "asino" volevo chiederti: basta che io inserisco il codice che mi ha mandato, cambio la riga dove c'è il livello e metto la mia con la K e funziona o devo cambiare altro?

    Scusate l'ignoranza, prometto studierò e imparerò:)



  • di lepat (utente non iscritto) data: 11/03/2014 09:19:26

    perché non posti un file di esempio ? non facendolo capitano questi inconvenienti



  • di aluren000 (utente non iscritto) data: 11/03/2014 09:40:35

    ragazzzi ok...grazie risolto.... =)

    Ho una nuova question:
    se anzi che volermi spostare di una cella vorrei spostarmi dentro le cella di 5 spazi vuoti per il primo livello, di 10 spazi vuoti per il secondo livello e così via su tutte le righe in modo tale che sembri una scaletta ma sempre sulla solita cella così mi lascia la possibilità di filtrare ? perchè altrimenti non posso fare i filtri.. è più complicato ma mi hanno detto l'altro modo non è ottimale =(




  • di aluren000 (utente non iscritto) data: 11/03/2014 09:47:56

    ragazzi messo il file così potete vederlo tutti....

    la colonna livello è la k, il livello 0 va eliminato scusate l'ho lasciato...io vorrei che se cambia il livello il contenuto della cella si sposti, se è livello1 di 5 spazi vuoti, se il livello è il 2 di 10 spazi vuoti e così via...grazie in anticipo a tutti



  • di mb (utente non iscritto) data: 11/03/2014 10:04:03

    ciao aluren0000
    ma il file ti funziona??
    a me compare tipo non corrispondente
    p.s ho utilizzato il file che avevi allegato
    errore run time 13
    liv = Cells(j, 3)



  • di aluren000 (utente non iscritto) data: 11/03/2014 10:12:07

    Allora funziona se metti
    -la colonna k (il livello) nella colonna 3, quindi fai questa modifica
    -eliminare la riga con il livello 0 sennò il livello 0 da problemi

    Prova io ho fatto così e funziona.

    Purtroppo non avevo mandato il file e i ragazzi mi hanno mandato la soluzione con quello che avevo postato....ora mi hanno chiesto di farlo a scaletta nella solita cella ...per me impossibile



  • di mb (utente non iscritto) data: 11/03/2014 10:27:12

    grazie aluren000
    alla prossima




  • di lepat (utente non iscritto) data: 11/03/2014 10:30:32

    cit. ora mi hanno chiesto di farlo a scaletta nella solita cella
    non ho capito, vorrei vedere anche il risultato desiderato, bastano poche righe



  • di aluren000 (utente non iscritto) data: 11/03/2014 10:31:15

    Di niente...sono contento sia riuscito a risolvere il tuo problema....se qualcuno ragazzi riesce a scoprire come fare per traslare tutto di 5 spazi vuoti su tutte le celle della riga se il livello è 1 e di 10 spazi vuoti se il livello è il due e così via gli sarei molto grato...grazie mille.....cmq forum stupendo persone preparate e disponibili...great



  • di aluren000 (utente non iscritto) data: 11/03/2014 10:33:51

    ok ti posto un file di esmpio...grazi mille



  • di aluren000 (utente non iscritto) data: 11/03/2014 10:45:20

    postato ...aspetto la tua risposta con ansia =)



  • di lepat (utente non iscritto) data: 11/03/2014 11:17:09

    prova così
     
    Sub a()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    For r = 2 To LR
      liv = Cells(r, "K")
      For c = 1 To 3
        Cells(r, c) = Space(liv * 2) & Cells(r, c)
      Next
    Next
    End Sub



  • di aluren000 (utente non iscritto) data: 11/03/2014 12:33:21

    Allora perfetto...funziona correttamente...voglio chiederti un ultima modifica poi prometto di chiudere la questione....Vorrei che lo spostamento sulla cella avvenga solo sulla prima colonna, sulle altre mi hanno detto ora non serve, quindi tutto uguale a prima tranne che lo spostamento di 5 spazi all'interno della cella me lo deve fare solo sulla prima colonna...ora posto come mi servirebbe...grazieeeee...siete miticiiiiiiiii :)



  • di aluren000 (utente non iscritto) data: 11/03/2014 13:09:27

    Ho provato a modificare il codice ma continua a darmi erroe, non riesco a circoscrivere lo spostamento solo alla prima colonna, la colonna A :(

    Datemi una manoooo...poi prometto chiudo la questione

    grazie a tutti del supporto =)



  • di lepat (utente non iscritto) data: 11/03/2014 13:14:10

    così
     
    Sub a()
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    For r = 2 To LR
      liv = Cells(r, "K")
      Cells(r, 1) = Space(liv * 2) & Cells(r, 1)
    Next
    End Sub



  • di aluren000 (utente non iscritto) data: 11/03/2014 14:51:58

    Perfetto risultato ottimo...forum stra consigliato...grazie a tutti per il supporto =)