1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| Option Explicit ' Enumération des champs d'un User-Defined Type
Public Const rowFacture = 2 ' Rangée de la première facture à cause de l'entête
Public Const colNumero = 3 ' Première colonne C de la facture. Pas forcément en A.
Public Const col_First = colNumero
Public Const colDatePaid = colNumero + 1
Public Const colNameClient = colDatePaid + 1
Public Const col_Last = colNameClient ' Dernière colonne
Type FactureType
Numero As Long
DatePaid As Date
NameClient As String
End Type
Public Sub InvoiceMain() ' Point d'entrée de la maquette
Dim indRow As Long, factureUdt As FactureType
indRow = rowFacture ' Première facture
While Cells(indRow, col_First) <> ""
InvoiceRead indRow, factureUdt ' Copie chaque valeur des cellules dans l'UDT
InvoiceDo factureUdt ' Traite la facture
indRow = indRow + 1 ' Facture suivante
Wend
End Sub
' Copie Cells vers User-Defined-Type
Sub InvoiceRead(ByVal indRow As Long, ByRef factureUdt As FactureType)
Dim indCol As Integer
For indCol = col_First To col_Last ' Iteration de la première à la dernière colonne
InvoiceSet indCol, Cells(indRow, indCol).value, factureUdt
Next
End Sub
' Affecte le champ indCol de la facture UDT
Private Sub InvoiceSet(ByVal indCol As Integer, ByVal value As Variant, ByRef factureUdt As FactureType)
Select Case indCol
Case colNumero: factureUdt.Numero = value
Case colDatePaid: factureUdt.DatePaid = value
Case colNameClient: factureUdt.NameClient = value
Case Else: Stop ' Gestion d'erreur
End Select
End Sub
' Trouve la valeur du champ indCol de la facture UDT
Public Sub InvoiceGet(ByVal indCol As Integer, factureUdt As FactureType, ByRef varCell As Variant)
Select Case indCol
Case colNumero: varCell = factureUdt.Numero
Case colDatePaid: varCell = factureUdt.DatePaid
Case colNameClient: varCell = factureUdt.NameClient
Case Else: Stop ' Gestion d'erreur
End Select
End Sub
' Traitement de la facture
Private Sub InvoiceDo(ByRef factureUdt As FactureType)
InvoicePrint "Avant modification", factureUdt
factureUdt.Numero = -factureUdt.Numero ' Inverse le signe du n° de facture
factureUdt.NameClient = IIf(factureUdt.Numero > 0, UCase(factureUdt.NameClient), _
LCase(factureUdt.NameClient)) ' bascule MAJUSCULE / minuscule
InvoicePrint "Après modification", factureUdt
End Sub
' Affiche la facture UDT dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel
Sub InvoicePrint(ByVal strMsg As String, factureUdt As FactureType)
Dim indCol As Integer, strLine As String, varValue As Variant
strLine = strMsg + " : "
For indCol = col_First To col_Last ' Iteration de la première à la dernière colonne
InvoiceGet indCol, factureUdt, varValue
strLine = strLine & varValue & " "
Next
Debug.Print strLine
End Sub |
Partager