Esplosione codice articolo



  • Esplosione codice articolo
    di Nicola (utente non iscritto) data: 21/01/2014 12:57:40

    Esplosione codice articolo (excel 2010) di Nicola (Utente non iscritto) data: 21/01/2014 09:54:35

    Salve a tutti è complimenti per il forum.

    Ho un problema e non so come poterlo arginare .
    Ho creato con vba per xls una tabella dove gestisco il piano promozionale degli articoli che vendo.
    Attrasverso un db in xls dove ho la scheda anagrafica dell'articolo, mi prendo il codice e in automatico mi inserisce tutti i dati relativi al prodotto e fino a qui tutto bene.
    Il mio problema è che ad ogni codice è legato un codice gruppo ES.
    Cod gruppo codice singolo
    000090 000020
    000090 000030
    000090 000040

    Notate che il codice singolo è legato ade un codice capo gruppo.

    Vorrei attraverso codice vba inserire nella mia tabella promozionale il codice capo gruppo ossia "000090"
    è in automatico mi esplodesse in verticale gli articoli singoli legati ad esso ossia "000020";"000030";"000040".
    Spero di essere stato abbastanza chiaro ....
    Vi ringrazio aticipatamente




    Il codice vba è QUELLO CHE USO PER IL PIANO PROMOZIONALE



     
    Sub Worksheet_Change(ByVal Target As Excel.Range)
       
       Dim strCellaModificata As String
       Dim strColonna As String
       Dim strRiga As String
       Dim intrisposta As Integer
       Dim y As Integer
       Dim blnTrovato As Boolean
       Dim strWorkbook As String
       
    
       
       blnTrovato = False
       
       Const conPercorso = "C:UsersPc_InfovisionDesktopvba"
       'quando si verifica un cambiamento(change) chiedo ad excel di memorizzare in target.adress il range modificato
       'nella variabile strcellamodificata
       
       strCellaModificata = Target.Address
     
    strWorkbook = ActiveWorkbook.Name
    
           
       'verifico se è stata modificata una sola cella per volta oppure un intervallo di celle
       
     If Range(strCellaModificata).Count > 1 Then
       Exit Sub
     End If
    
       'nella variabile strcolonna memorizzo il valore della proprietà colum ossia la posizione della colonna
       strColonna = Range(strCellaModificata).Column
       
       strRiga = Range(strCellaModificata).Row
    'se vi è una modifica nella colonna d dalla riga 7 apro il percorso al database in sola lettura
    
    If strColonna = 2 And strRiga >= 9 Then
       Workbooks.Open Filename:=conPercorso & "dbnew.xlsx", ReadOnly:=True
      'ora attivo con il metodo activate il modulo promo
     
        Workbooks(strWorkbook).Activate
        y = 1
        
        Do Until blnTrovato = True Or y = 43000
        If UCase(Range(strCellaModificata)) = UCase(Workbooks("dbnew.xlsx").Worksheets("db").Range("A" & y)) Then
          
         Range(strCellaModificata).Offset(0, 7) = Workbooks("dbnew.xlsx").Worksheets("db").Range("B" & y)
         Range(strCellaModificata).Offset(0, 4) = Workbooks("dbnew.xlsx").Worksheets("db").Range("d" & y)
         Range(strCellaModificata).Offset(0, 1) = Workbooks("dbnew.xlsx").Worksheets("db").Range("e" & y)
         Range(strCellaModificata).Offset(0, 5) = Workbooks("dbnew.xlsx").Worksheets("db").Range("f" & y)
         Range(strCellaModificata).Offset(0, 6) = Workbooks("dbnew.xlsx").Worksheets("db").Range("g" & y)
         Range(strCellaModificata).Offset(0, 8) = Workbooks("dbnew.xlsx").Worksheets("db").Range("h" & y)
         Range(strCellaModificata).Offset(0, 8).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 13) = Workbooks("dbnew.xlsx").Worksheets("db").Range("i" & y)
         Range(strCellaModificata).Offset(0, 13).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 19) = Workbooks("dbnew.xlsx").Worksheets("db").Range("j" & y)
         Range(strCellaModificata).Offset(0, 19).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 22) = Workbooks("dbnew.xlsx").Worksheets("db").Range("o" & y)
         Range(strCellaModificata).Offset(0, 23) = Workbooks("dbnew.xlsx").Worksheets("db2").Range("p" & y)
         Range(strCellaModificata).Offset(0, 24) = Workbooks("dbnew.xlsx").Worksheets("db2").Range("q" & y)
         Range(strCellaModificata).Offset(1, 0).Select
         ActiveWindow.ScrollColumn = 3
          
         blnTrovato = True
      End If
      
      y = y + 1
          
      Loop
    
      If blnTrovato = False Then
      
      intrisposta = MsgBox("Il prodotto inserito non è presente nell'archivio, " _
       & "vuoi aprire il file dbnew per aggiungerlo?", vbYesNo)
       
       If intrisposta = vbYes Then
         frmPassword.Show
         End If
       End If
     End If
    End Sub
    



  • di Nicola (utente non iscritto) data: 21/01/2014 12:59:50

    Ho inserito un esempio nel file PIano Promo

    Nel codice master ho inserito L'art :001104

    è in automatico mi ha compliato(Esploso gli articoli legati al master)
    001104 JOHNSONS BAGNO IDRATANTE 750-V
    001434 JOHNSONS BAGNO VELLUTANTE MIELE 750-V
    005536 JOHNSONS BAGNO BE FRESH IMAGINE 750ML-V
    005534 JOHNSONS BAGNO BE FRESH WAKE UP 750ML-V
    005535 JOHNSONS BAGNO BE FRESH REVIVE 750ML-V
    020202 JOHNSONS BAGNO ADDOLCENTE NEW 750ML-V
    045912 JOHNSONS BAGNO RILASSANTE MANDO.750-V

    Che casino




  • Esplosione codice articolo
    di Nicola (utente non iscritto) data: 21/01/2014 09:54:35

    Salve a tutti è complimenti per il forum.

    Ho un problema e non so come poterlo arginare .
    Ho creato con vba per xls una tabella dove gestisco il piano promozionale degli articoli che vendo.
    Attrasverso un db in xls dove ho la scheda anagrafica dell'articolo, mi prendo il codice e in automatico mi inserisce tutti i dati relativi al prodotto e fino a qui tutto bene.
    Il mio problema è che ad ogni codice è legato un codice gruppo ES.
    Cod gruppo codice singolo
    000090 000020
    000090 000030
    000090 000040

    Notate che il codice singolo è legato ade un codice capo gruppo.

    Vorrei attraverso codice vba inserire nella mia tabella promozionale il codice capo gruppo ossia "000090"
    è in automatico mi esplodesse in verticale gli articoli singoli legati ad esso ossia "000020";"000030";"000040".
    Spero di essere stato abbastanza chiaro ....
    Vi ringrazio aticipatamente




    Il codice vba è QUELLO CHE USO PER IL PIANO PROMOZIONALE
     
    Sub Worksheet_Change(ByVal Target As Excel.Range)
       
       Dim strCellaModificata As String
       Dim strColonna As String
       Dim strRiga As String
       Dim intrisposta As Integer
       Dim y As Integer
       Dim blnTrovato As Boolean
       Dim strWorkbook As String
       
    
       
       blnTrovato = False
       
       Const conPercorso = "C:UsersPc_InfovisionDesktopvba"
       'quando si verifica un cambiamento(change) chiedo ad excel di memorizzare in target.adress il range modificato
       'nella variabile strcellamodificata
       
       strCellaModificata = Target.Address
     
    strWorkbook = ActiveWorkbook.Name
    
           
       'verifico se è stata modificata una sola cella per volta oppure un intervallo di celle
       
     If Range(strCellaModificata).Count > 1 Then
       Exit Sub
     End If
    
       'nella variabile strcolonna memorizzo il valore della proprietà colum ossia la posizione della colonna
       strColonna = Range(strCellaModificata).Column
       
       strRiga = Range(strCellaModificata).Row
    'se vi è una modifica nella colonna d dalla riga 7 apro il percorso al database in sola lettura
    
    If strColonna = 2 And strRiga >= 9 Then
       Workbooks.Open Filename:=conPercorso & "dbnew.xlsx", ReadOnly:=True
      'ora attivo con il metodo activate il modulo promo
     
        Workbooks(strWorkbook).Activate
        y = 1
        
        Do Until blnTrovato = True Or y = 43000
        If UCase(Range(strCellaModificata)) = UCase(Workbooks("dbnew.xlsx").Worksheets("db").Range("A" & y)) Then
          
         Range(strCellaModificata).Offset(0, 7) = Workbooks("dbnew.xlsx").Worksheets("db").Range("B" & y)
         Range(strCellaModificata).Offset(0, 4) = Workbooks("dbnew.xlsx").Worksheets("db").Range("d" & y)
         Range(strCellaModificata).Offset(0, 1) = Workbooks("dbnew.xlsx").Worksheets("db").Range("e" & y)
         Range(strCellaModificata).Offset(0, 5) = Workbooks("dbnew.xlsx").Worksheets("db").Range("f" & y)
         Range(strCellaModificata).Offset(0, 6) = Workbooks("dbnew.xlsx").Worksheets("db").Range("g" & y)
         Range(strCellaModificata).Offset(0, 8) = Workbooks("dbnew.xlsx").Worksheets("db").Range("h" & y)
         Range(strCellaModificata).Offset(0, 8).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 13) = Workbooks("dbnew.xlsx").Worksheets("db").Range("i" & y)
         Range(strCellaModificata).Offset(0, 13).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 19) = Workbooks("dbnew.xlsx").Worksheets("db").Range("j" & y)
         Range(strCellaModificata).Offset(0, 19).Select
         Selection.NumberFormat = "$* #,##0.00"
         Range(strCellaModificata).Offset(0, 22) = Workbooks("dbnew.xlsx").Worksheets("db").Range("o" & y)
         Range(strCellaModificata).Offset(0, 23) = Workbooks("dbnew.xlsx").Worksheets("db2").Range("p" & y)
         Range(strCellaModificata).Offset(0, 24) = Workbooks("dbnew.xlsx").Worksheets("db2").Range("q" & y)
         Range(strCellaModificata).Offset(1, 0).Select
         ActiveWindow.ScrollColumn = 3
          
         blnTrovato = True
      End If
      
      y = y + 1
          
      Loop
    
      If blnTrovato = False Then
      
      intrisposta = MsgBox("Il prodotto inserito non è presente nell'archivio, " _
       & "vuoi aprire il file dbnew per aggiungerlo?", vbYesNo)
       
       If intrisposta = vbYes Then
         frmPassword.Show
         End If
       End If
     End If
    End Sub
    



  • di patel data: 21/01/2014 10:00:13

    allega un file di esempio, sarà più facile aiutarti





  • di Grograman (utente non iscritto) data: 21/01/2014 10:02:30

    Mi vengono in mente 2 soluzioni:

    - Subotali

    - Pivot e conseguente comando vba "Range(XY).ShowDetail = True"

    Ma senza un file di esempio non saprei da dove cominciare ^_^



  • di Nicola (utente non iscritto) data: 21/01/2014 10:25:54

    Ho inserito 2 file

    il dbnew e il piano promo...

    Aprenndo il db si nota subito il codice singolo e il codice capo gruppo master

    Mentre aprendo il piano promo nella colonna codice attualmente digito il il singolo e in automatico mi riempie la riga con tutte le informazioni date dal db..

    Ma la cosa bella sarebbe
    inserire nella colonna codice il capo gruppo è in automatico mi inserisca tutte le righe singole




  • di Grograman (utente non iscritto) data: 21/01/2014 11:03:58

    Ti ho allegato un esmepio di come si potrebbe usare il subtotale, ho prima convertito il testo in numeri per poter sfruttare la media dei valori in modo da evidenziare in grassetto il codice "mastro"



  • di Nicola (utente non iscritto) data: 21/01/2014 12:20:22

    Ciao Grograman grazie per il tuo aiuto...

    Forse mi sono spiegato male

    Nel db ho gia il codice mastro....

    Se ti apri l'altro file "Piano Promo" c'e una colonna con il nome codice...

    Vorrei inserire in quella colonna il codice mastro è in automatico mi esplode tutti i codici appartenenti ad esso:::Ti allego un esempio




  • di Nicola (utente non iscritto) data: 21/01/2014 12:29:22

    Ho inserito un esempio nel file PIano Promo

    Nel codice master ho inserito L'art :001104

    è in automatico mi ha compliato(Esploso gli articoli legati al master)
    001104 JOHNSONS BAGNO IDRATANTE 750-V
    001434 JOHNSONS BAGNO VELLUTANTE MIELE 750-V
    005536 JOHNSONS BAGNO BE FRESH IMAGINE 750ML-V
    005534 JOHNSONS BAGNO BE FRESH WAKE UP 750ML-V
    005535 JOHNSONS BAGNO BE FRESH REVIVE 750ML-V
    020202 JOHNSONS BAGNO ADDOLCENTE NEW 750ML-V
    045912 JOHNSONS BAGNO RILASSANTE MANDO.750-V

    Che casino





  • di gaetanopr data: 21/01/2014 19:17:26

    Ciao ho modificato la tua macro, vedi se va bene, devi cambiare il percorso del file in quanto nell'allegato è indicato quello del mio desktop.
    il file è "Piano promozionaleGaetano.xlsm"
    PS: piccolo chiarimento, quando dichiari una variabile destinata a contenere i riferimenti di riga non dimensionarla come integer ma come Long, nel tuo file era previsto un ciclo che poteva arrivare fino a 43000 righe, superando le 32767 righe sarebbe andato in overflow.
    Ciao