'### A adapter selon votre usage ###
Const FEUILLE As String = "recherche"
Const MAXIMUM_LIG As Long = 20
Const SANS_CADRE As Boolean = True
'###################################
Dim ColTextBox As New Collection
Private Sub UserForm_Initialize()
Dim obEvents As clsControlsEvents
Dim ctl As MSForms.Control
Dim S As Worksheet
Dim R As Range
Dim FR As MSForms.Frame
Dim TB As MSForms.TextBox
Dim A$
Dim var
Dim i&
Dim j&
Dim x&
Dim y&
Dim nbLig&
On Error GoTo Erreur
A$ = "La feuille ''" & FEUILLE & "'' est introuvable"
Set S = Worksheets(FEUILLE)
If S.[d10] = "" Then
A$ = "La cellule D10 ne contient aucune donnée"
GoTo Erreur
End If
A$ = ""
Set R = S.[d10].CurrentRegion
var = R
Set FR = Me.Controls.Add("Forms.Frame.1")
y& = FR.Top
For i& = 1 To UBound(var, 1)
If var(i&, 1) <> "" Then
nbLig& = nbLig& + 1
x& = FR.Left
For j& = 1 To UBound(var, 2)
Set TB = FR.Controls.Add("Forms.TextBox.1")
With TB
.Tag = var(i&, j&)
.BorderStyle = fmBorderStyleSingle
.Height = 15
If j& Mod 2 <> 0 Then
.Width = 80
Else
.Width = 40
End If
.Left = x&
x& = x& + .Width
.Top = y&
If j& = 4 Or j& = 6 Then
.Value = Format(var(i&, j&), "00.00")
Else
.Value = var(i&, j&)
End If
If i& = 1 Then
.TextAlign = fmTextAlignCenter
.Font.Bold = True
ElseIf IsNumeric(var(i&, j&)) Then
.TextAlign = fmTextAlignRight
End If
If i& > 1 Then
If i& Mod 2 = 0 Then
.BackColor = vbYellow
If SANS_CADRE Then .BorderColor = vbYellow
Else
.BackColor = vbRed
If SANS_CADRE Then .BorderColor = vbRed
End If
Else
.BackColor = vbCyan
If SANS_CADRE Then .BorderColor = vbCyan
End If
End With
Next j&
y& = y& + TB.Height
End If
Next i&
If nbLig& > MAXIMUM_LIG Then
FR.Width = x& + 18
FR.Height = (y& / nbLig&) * MAXIMUM_LIG
Me.Height = FR.Height + 25
FR.ScrollBars = fmScrollBarsVertical
FR.ScrollHeight = FR.Height * (nbLig& / MAXIMUM_LIG)
Else
FR.Width = x& + 5
FR.Height = y& + 5
Me.Height = FR.Height + 25
End If
Me.Width = FR.Width + 2
Me.Caption = ""
'--- Evènement Double Clic des TextBox ---
For Each ctl In Me.Controls
If TypeOf ctl Is MSForms.TextBox Then
Set obEvents = New clsControlsEvents
Set obEvents.Tbx = ctl
Set obEvents.Frm = Me
ColTextBox.Add obEvents
End If
Next ctl
Exit Sub
Erreur:
If A$ <> "" Then
Me.Caption = A$
Else
Me.Caption = "Erreur " & Err.Number & " " & Err.Description
End If
End Sub