gestione tabelle Excel tramite VBA



  • gestione tabelle Excel tramite VBA
    di spaz (utente non iscritto) data: 04/04/2014 17:17:53

    Buongiorno, sono piuttosto acerbo di VBA, quindi chiedo di soprassedere su alcune nefandezze inserite nel mio codice..

    Ho la necessità di pescare in una tabella denominata "elforn" inserita nel foglio "Elenco_fornitori", alcune righe in base al confronto del contenuto di una loro cella con una cella di una seconda tabella ("fornazienda") inserita nel foglio AZIENDA.

    Devo in seguito copiare tutte le righe che soddisfano tale condizione in una terza tabella ("fornalt") sempre nel foglio AZIENDA.

    Il mio codice arriva a selezionare e copiare la prima riga, ma non riesco a incollarla nella tabella fornalt.

    Chiedo umilmente suggerimenti.
     
    Sub fornitori_alternativi()
        
        Dim Elenco_fornitori As Worksheet
        Dim AZIENDA As Worksheet
        Dim genere As String
        Dim CB As Variant
        Dim gen1 As String
        Dim gen2 As String
        Dim gen3 As String
            
        Set AZIENDA = ActiveSheet
       
            For i = 1 To AZIENDA.ListObjects("fornazienda").ListRows.Count
                             
                    CB = AZIENDA.ListObjects("fornazienda").ListRows(i).Range(1, 7).Value
                    genere = AZIENDA.ListObjects("fornazienda").ListRows(i).Range(1, 3).Value
                    
                    If CB = 0 Then
                                   
                        Set Elenco_fornitori = ActiveSheet
                        
                        Sheets("Elenco_fornitori").Select
                         
                        For j = 1 To ActiveSheet.ListObjects("elforn").ListRows.Count
                            gen1 = ActiveSheet.ListObjects("elforn").ListRows(j).Range(1, 4).Value
                            gen2 = ActiveSheet.ListObjects("elforn").ListRows(j).Range(1, 5).Value
                            gen3 = ActiveSheet.ListObjects("elforn").ListRows(j).Range(1, 6).Value
                            
                            If genere = gen1 Or genere = gen2 Or genere = gen3 Then                            
                     
                                ActiveSheet.ListObjects("elforn").ListRows(j).Range.Select
                                
                                Selection.Copy
                                                    
                                Set AZIENDA = ActiveSheet
                                Sheets("AZIENDA").Select
                                                    
                            End If
                            
                        Next
                        
                    End If
                    
                 Set AZIENDA = ActiveSheet
          Next
        
    End Sub



  • di scossa data: 05/04/2014 12:56:05

    Ciao,

    difficile darti dei suggerimenti soprassedendo alle "licenze poetiche" del tuo codice

    Comunque dovresti postare un file su cui lavorare, che sia congruente con l'originale, e farci alcuni esempi concreti di quello che vuoi ottenere.


    scossa's web site
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Zer0Kelvin data: 05/04/2014 21:06:55

    Ciao.
    Premesso che non si possono fare dei test se non fornisci un file di esempio, una probabile soluzione è quella che segue
     
    Option Explicit
    
    Sub fornitori_alternativi()
    Dim genere As String, gen1 As String, gen2 As String, gen3 As String
    Dim CB As Variant
    Dim i As Long, j As Long
    Dim lFornAzienda As ListObject, lFornitori As ListObject, lFornAlt As ListObject
       Set lFornitori = ThisWorkbook.Sheets("Elenco_fornitori").ListObjects("elforn")
       Set lFornAzienda = ThisWorkbook.Sheets("AZIENDA").ListObjects("fornazienda")
       Set lFornAlt = ThisWorkbook.Sheets("AZIENDA").ListObjects("fornalt")
       For i = 1 To lFornAzienda.ListRows.Count
          CB = lFornAzienda.ListRows(i).Range(1, 7).Value
          genere = lFornAzienda.ListRows(i).Range(1, 3).Value
          If CB = 0 Then
            With lFornitori
                For j = 1 To .ListRows.Count
                    gen1 = .ListRows(j).Range(1, 4).Value
                    gen2 = .ListRows(j).Range(1, 5).Value
                    gen3 = .ListRows(j).Range(1, 6).Value
                    If genere = gen1 Or genere = gen2 Or genere = gen3 Then
                        .ListRows(j).Range.Copy lFornAlt.ListRows.Add
                    End If
                Next j
            End With
          End If
       Next i
       Set lFornitori = Nothing
       Set lFornAzienda = Nothing
       Set lFornAlt = Nothing
    End Sub
    



  • di Zer0Kelvin data: 05/04/2014 21:09:58

    PS:
    correggi
     
    .ListRows(j).Range.Copy lFornAlt.ListRows.Add
    
    'In
    
    .ListRows(j).Range.Copy lFornAlt.ListRows.Add.Range



  • di spaz data: 07/04/2014 08:06:41

    Grazie a tutti!

    In particolare a Zer0Kelvin, che navigando ad occhi chiusi è riuscito a condurre la barca in porto..




  • di Zer0Kelvin data: 07/04/2014 08:47:56

    LOL, allora il senso di ragno funziona ancora!