RINUMERARE COLONNA ID



  • RINUMERARE COLONNA ID
    di ROBY (utente non iscritto) data: 28/03/2014 15:35:30

    Buongiorno, ho il seguente quesito da porvi:
    ho una lista di articoli in un foglio Excel.
    Ho creato una UserForm in cui posso gestire l'eventuale inserimento e cancellazione di un nuovi articoli.

    L'intera lista di articoli mi vengono riportati in una ListBox presente nella UserForm.
    Ora quando cancello un articolo che si trova nella colonna B che ad esso è associato un numero identificativo nella colonna A i sucessivi numeri identificativi degli articoli sucessivi si dovrebbero aggiornare.
    ad es:
    1 10 bottiglie
    2 20 bottiglie
    3 15 bottiglie
    4 30 bottiglie
    5 45 bicchieri

    se cancello la terza riga vorrei ottenere:

    1 10 bottiglie
    2 20 bottiglie
    3 30 bottiglie
    4 45 bicchieri

    non:

    1 10 bottiglie
    2 20 bottiglie
    4 30 bottiglie
    5 45 bicchieri

    come posso fare? grazie anticipatamente







  • di nichicanta data: 28/03/2014 15:50:41

    Ciao ROBY, prova questa la macro sottoriportata che ti copia fino ad un determinato range ( imposta tu quale ) il progressivo delle colonna degli ID ( qui devi metterci la tua che riporto gli ID da incrementare).
    P.S. io ho indicato dei range casuali adattali al tuo scopo e le celle A2:A3 devono contenere i numeri 1 e 2.
    Ciao.
     
    Sub Copia_in_Basso()
    	   Activesheeet.Range("A2:A3").Select ' fai attenzione che si posizioni sul foglio esatto dove far partire la macro 
    	   Selection.AutoFill Destination:=Range("A2:A100"), _ 
    	   Type:=xlFillDefault
    	   Range("A2:100").Select
    	End Sub
    



  • di Roby (utente non iscritto) data: 28/03/2014 15:59:05

    innanzitutto grazie della risposta, praticamente metto il codice che mi hai suggerito sotto quello per eliminare la riga riferito al tasto elimina che è:
    Private Sub CommandButton3_Click()


    Dim c As Range
    Dim err As Boolean


    err = True

    Set SH = Worksheets("Sheet1")

    lUltRiga = SH.Range("B" & _
    SH.Rows.Count).End(xlUp).Row

    Set rng = SH.Range("B2:C2" & lUltRiga)
    For Each c In rng
    If c.Value = Val(TextBox3.Value) Then
    SH.Rows(c.Row).Delete
    err = False
    Exit For
    End If
    Next

    If err = True Then
    MsgBox "Nessuna polizza trovata."
    End If



  • di nichicanta data: 28/03/2014 16:04:15

    Puoi richiamare la macro subito dopo la fine della tua macro, prima di End Sub, in modo che subito dopo l'eliminazione della riga ti aggiorna il progressivo.
    richiamala in questo modo: Call Copia_in_Basso
    P.S. inserisci prima la macro che ti ho postato in un modulo del foglio su cui lavoro, con ALT+F11, inserisci modulo e copia il codice all'interno del modulo aggiunto.



  • di Roby (utente non iscritto) data: 28/03/2014 16:07:08

    niente mi da errore: necessario oggetto..........



  • di nichicanta data: 28/03/2014 16:08:29

    Se puoi, senza i dati sensibili, allega un file su cui provare, altrimenti ci mettiamo più tempo a capire il problema.



  • di Roby (utente non iscritto) data: 28/03/2014 16:32:20

    ok provo questa sera, grazie molte per adesso



  • di Raffaele_53 (utente non iscritto) data: 28/03/2014 17:49:19

    Nel codice sotto vedo
    >>>Set rng = SH.Range("B2:C2" & lUltRiga)
    Devi ricercare una quantita oppure un prodotto?

    Comunque vedo che non ti riferisci alla colonna, dove penso hai scritto manualmente 1,2,3,4,5
    Prova a mettere in colonna A =Rif.Riga() e trascina giù
    Quando inserirai un prodotto, dovrai ricordarti di mettere la formula nella cella A tramite
    Cells(lUltRiga + 1, 1).FormulaR1C1 = "=ROW()"

    Se invece hai solo le colonne A/B, e i numeri li metti virtualmente, mentri carichi la listbox
     
    lCont = 0
    Righe = Range("B" & Rows.Count).End(xlUp).Row
    Set rng = Range("B2:B" & Righe)
      ListBox1.Clear
      For Each c In rng
      If ComboBox1.Value = aaax And ComboBox2.Value = mmx Then
         ListBox1.AddItem
         ListBox1.List(lCont, 0) = lCont + 1
         ListBox1.List(lCont, 1) = c.Offset(0, -1).Value
         ListBox1.List(lCont, 2) = c.Offset(0, 0).Value
         ComboBox3.AddItem ListBox1.List(lCont, 2)
          lCont = lCont + 1
        End If
       Next
    Set rng = Nothing



  • di Roby (utente non iscritto) data: 28/03/2014 20:15:53

    Rieccomi, ho allegato il file di esempio così si può capire meglio cosa intendo ottenere.



  • di Roby (utente non iscritto) data: 31/03/2014 14:38:51

    Risolto! ho aggiunto questo codice:
     
    Dim n As Integer
        Dim r As Integer
        
        r = 2
        
    Inizio:
        If sh.Range("B" & CStr(r)).Value = 0 Or sh.Range("B" + CStr(r)).Value = "" 
    Then
            GoTo Fine
        End If
        sh.Range("A" + CStr(r)).Value = CStr(r - 1)
        r = r + 1
        GoTo Inizio
    Fine:
    End Sub
    
    



  • di Vecchio Frac data: 31/03/2014 15:36:41

    Argh
    "Goto Inizio"
    e
    "Goto Fine"

    è proprio la morte civile di un buon codice ^_^





  • di Roby (utente non iscritto) data: 31/03/2014 21:12:58

    Ciao, infatti sono qui a chiedere proprio per imparare a programmare in un modo + decente...............scusatemi se ho scritto delle imperfezioni.