Condividi tramite

Tabella pagamenti

Anonimo
2016-07-30T08:00:36+00:00

Buon giorno.

In  colonna B ho una lista di nomi (circa 200).

Da  colonna C a colonna AA , in corrispondenza di ogni nome, ho  degli importi.(n° di Rate)

Esempio:

Range(“B1”)=”Carlo”

Range(“C1”)=”120,12”

Range(“ ....1”)=”. . . . .”

Range(“AA1”)=”250,40”

Da colonna AC in poi vengono registrati i pagamenti o gli acconti delle varie Rate.(n° 27)

Vorrei realizzare una tabella, una per ogni nome,  (magari Un UserForm ) dove vengono

 richiamate le Rate e i pagamenti effettuati.

Per me credo sia  “un’ avventura ardua” tuttavia col Vostro aiuto vorrei provarci.

Si può fare ?

Di solito per salvare e leggere dei dati  uso il seguente codice:

Esempio:

Private Sub Salva()

Dim H2oCervi

 Dim TotE1 As Double

 Dim TotE As Double

 Dim Direttory As String

TotE1 = Range("C5")

 Tot€ = Range("D5")

Direttory = "E:\Archivio\CartelleV\Conteggi"

Rem   +++   Inizio salva variabili TotE1, TotE    +++

Open Direttory & "Cervi" For Output As #1

Write #1, TotE1, TotE, Cervi

Close #1

Rem   +++    Fine salva variabili TotE1, Tot€    +++

End Sub

Private Sub Leggi()

Dim H2oCervi

 Dim TotE1 As Double

 Dim TotE As Double

 Dim Direttory As String

Direttory = "E:\Archivio\CartelleV\Conteggi"

Rem   +++   Inizio legge variabili Mc, TotE     +++

Open Direttory & "Cervi" For Input As #1

Input #1, TotE1, TotE, Cervi

Close #1

Rem   +++     Fine legge variabili Mc, TotE      +++

Range("C5") = TotE1

Range("D5") = TotE

End Sub

In questo caso forse esiste qualcosa di meglio.

Se qualcuno può seguirmi - aiutarmi rimango in attesa

 di un Vostro suggerimento.

Ciao.

Nunzio.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2016-07-31T17:11:51+00:00

Utilizzando una UserForm si potrebbe pensare ad una ComboBox popolata con i nomi e ad una ListBox che si popola in base al nome selezionato nella ComboBox.

Qui trovi un file di esempio

File esempio Tabella Pagamenti

Nel file è presente una UserForm con i seguenti elementi:

Label1 con descrizione Elenco Nomi

ComboBox nominata ElencoNomi che si popola con i nomi presenti in colonna B1

ListBox nominata Intestazioni che viene popolata con dei valori per crare una "riga" di intestazioni.

ListBox RiepilogoDati dove vengono riportate tre colonne di dati. Una prima colonna è di tipo descrittivo (Rata n. ...) e nelle altre due colonne, in base al nome selezionato, vengono riportati rispettivamente gli importi delle rate gli importi pagati.

Vedi immagine allegata del risultato ottenuto:

Nella UserForm è presente il seguente codice:

'---

Option Explicit

  Const sNomeFoglio As String = "Foglio1" '<--- Nome del Foglio dove sono presenti i dati

  Const sPrimaCella As String = "B1" '<--- cella in cui si trova il primo dato (nome)

  Const NumeroRate As Long = 25 '<--- numero rage corrispondenti alle colonne da C a AA e da AC a BA

  Dim Wb As Workbook

  Dim Ws As Worksheet

  Dim Frng As Range

  Dim Lrng As Range

Private Sub UserForm_Initialize()

  Set Wb = ThisWorkbook

  Set Ws = Wb.Worksheets(sNomeFoglio)

  Set Frng = Ws.Range(sPrimaCella)

  Set Lrng = Ws.Cells(Ws.Rows.Count, Frng.Column).End(xlUp)

  With Me

    .Caption = "Tabella Pagamenti"

    .ElencoNomi.List = Ws.Range(Frng, Lrng).Value

    .RiepilogoDati.ColumnCount = 3

    With .Intestazioni

      .ColumnCount = 3

      .Enabled = False

      .SpecialEffect = fmSpecialEffectFlat

      .BackColor = &H8000000F

      .Height = 25

      .AddItem

      .List(.ListCount - 1, 0) = "Numero Rata"

      .List(.ListCount - 1, 1) = "Importo Rata"

      .List(.ListCount - 1, 2) = "Importo Pagato"

    End With

  End With

End Sub

Private Sub ElencoNomi_Click()

  Dim iRow As Long, i As Long

  Dim arrayDati(1 To NumeroRate, 1 To 3) As Variant

  iRow = ElencoNomi.ListIndex

  With Frng

    For i = 1 To NumeroRate

      arrayDati(i, 1) = "Rata n. " & i

      arrayDati(i, 2) = Format(Frng.Offset(iRow, i), "#,##0.00")

      arrayDati(i, 3) = Format(Frng.Offset(iRow, i + NumeroRate + 1), "#,##0.00")

    Next i

  End With

  RiepilogoDati.List = arrayDati

End Sub

'---

Prova a vedere se riesci ad adattare alle tue esigenze :-)

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-08-08T07:39:56+00:00

    Ciao casanmaner.

    Il tuo codice è perfetto ma non riesco ad apportare modifiche perché la mia conoscenza del VB è un po' scarsa.

    volevo modificare

         arrayDati(t, 3) = Format(Frng.Offset(iRow, 1 + i + (NumeroRate * iStep)), "#,##0.00")

    perché:

      "Importo Rata "  inizia da colonna M  e finisce in colonna BY.

     "Importo Pagato" inizia da colonna Bs e finisce in colonna DP.

    Per il resto è tutto OK.

    Come posso fare.

    Tante grazie.

    Ciao.

    Nunzio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-08-07T21:06:59+00:00

    Ciao Nunzio,

    Qui trovi il file di esempio modificato per tener conto di quano hai indicato.

    Tabella pagamenti #2

    Alla precedente UserForm ho aggiunto una label dove viene visualizzato il Nome in base alla selezione della combobox (dove ora vengono visualizzati sia il Cognome che il Nome quando si apre la lista dei valori presenti).

    Questo è l'aspetto dalla UserForm:

    Questo il codice presente all'interno della UserForm e che tiene conto sia del fatto che i dati iniziano, con il Cognome, dalla cella K6, sia del fatto che è presente la colonna L con i Nomi e che dalla colonna M ci sono gli importi delle rate che si alternano ogni due colonne nelle colonne successive:

    '---

    Option Explicit

      Const sNomeFoglio As String = "Foglio1" '<--- Nome del Foglio dove sono presenti i dati

      Const sPrimaCella As String = "K6" '<--- cella in cui si trova il primo dato (Cognome)

      Const NumeroRate As Long = 25 '<--- numero rate

      Const iStep As Long = 2 '<--- le rate e i pagamenti sono presenti ogni due colonne a partire dalla prima colonna delle rate

      Dim Wb As Workbook

      Dim Ws As Worksheet

      Dim Frng As Range

      Dim Lrng As Range

    Private Sub UserForm_Initialize()

      Set Wb = ThisWorkbook

      Set Ws = Wb.Worksheets(sNomeFoglio)

      Set Frng = Ws.Range(sPrimaCella)

      '<--- viene impostata come ultima cella quella relativa alla posizione del nome --->

      Set Lrng = Ws.Cells(Ws.Rows.Count, Frng.Column).End(xlUp).Offset(0, 1)

      With Me

        .Caption = "Tabella Pagamenti"

        With .ElencoCognomi

          .List = Ws.Range(Frng, Lrng).Value

          .ColumnCount = 2

        End With

        .RiepilogoDati.ColumnCount = 3

        With .Intestazioni

          .ColumnCount = 3

          .Enabled = False

          .SpecialEffect = fmSpecialEffectFlat

          .BackColor = &H8000000F

          .Height = 25

          .AddItem

          .List(.ListCount - 1, 0) = "Numero Rata"

          .List(.ListCount - 1, 1) = "Importo Rata"

          .List(.ListCount - 1, 2) = "Importo Pagato"

        End With

      End With

    End Sub

    Private Sub ElencoCognomi_Click()

      Dim iRow As Long, i As Long, t As Long

      Dim arrayDati(1 To NumeroRate, 1 To 3) As Variant

      With ElencoCognomi

        iRow = .ListIndex

        Me.LabelNomi.Caption = .List(iRow, 1)

      End With

      With Frng

        t = 0

        '<--- il ciclo viene effettuato per il doppio del numero di rate ma non con Step singolo --->

        '<--- ma con un valore pari a 2 corrispondente al valore assegnato alla costante iStep   --->

        For i = 1 To (NumeroRate * iStep) Step iStep

          t = t + 1

          arrayDati(t, 1) = "Rata n. " & t

          arrayDati(t, 2) = Format(Frng.Offset(iRow, 1 + i), "#,##0.00")

          arrayDati(t, 3) = Format(Frng.Offset(iRow, 1 + i + (NumeroRate * iStep)), "#,##0.00")

        Next i

      End With

      RiepilogoDati.List = arrayDati

    End Sub

    '---

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-08-07T15:29:57+00:00

    Ciao casanmaner.

    Ho provato a modificare il tuo codice ma con pochissimo risultato.

    Tutti i miei dati iniziano da riga 6 e non da riga 1.

    Il cognome si trova in colonna K.

    Il nome si trova in colonna L.

    Le rate ed i pagamenti si trovano in colonne alternate:

    Esempio:

    1° rata colonna M riga 6

    2° rata colonna O riga 6

    3° rata colonna Q riga 6.

    Per cortesia puoi dirmi come modificare il codice

    o se esiste una soluzione più semplice (per me ; terra terra).

    Un grosso grazie.

    Ciao.

    Nunzio.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-08-01T13:30:15+00:00

    Ciao casanmaner.

    Tante, tantissime grazie per la risposta e per il codice.

    Con calma provo a studiarlo ed adattarlo alle mie esigenze.

    Ti farò sapere.

    Un grosso grazie.

    Ciao.

    Nunzio.

    La risposta è stata utile?

    0 commenti Nessun commento