1 pièce(s) jointe(s)
Remplacer une Combobox par une textbox dans un Userfrom
Bonjour
Tout d'abord, merci de votre aide d'expert, pour quelqu'un de néophyte comme moi, elle est particulièrement précieuse.
J'ai créé avec l'aide de ce forum, un Userform permettant à partir d'une combobox de modifier les données d'un tableau, code ci-dessous.
Ce formulaire fonctionne très bien pour ce qu'on lui demande, mais ,après adaptation à mon classeur de travail, et notamment l'adjonction de quelques formules de calcul simple, il me génère des erreur de données si je ne prête pas attention à la date de la combobox, c'est à dire si elle ne correspond pas à la date du de la cellule en première feuille.
En réalité, le formulaire ne doit modifier et calculer qu'une série de données à la fois et correspondant à la date de la feuille 1 et surtout le copier à la bonne date de la feuille données. Le plus simple c'est de tester dans ma exemple.
Pour ce faire la solution me semble être de remplacer la "combobox" CboDate dans l'exemple et la remplacer par une textbox (ou autre) non modifiable dans le formulaire et chargée de la date de la feuille 1 (cellule F7 nommée "LaDate" dans le classeur en exemple). Si une autre solution existe, plus facile à réaliser ou plus fiable, je suis également preneur.
Code que je souhaite adapter:
Code:
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
|
Option Explicit
Dim Ligne As Long
Private Sub UserForm_Initialize()
'CboDate = Date_Visite
Dim J As Long
With Sheets("Données")
For J = 4 To .Range("A" & Rows.Count).End(xlUp).Row
Me.CboDate.AddItem .Range("A" & J)
Next J
End With
CboDate.Value = Format(CboDate.Value, "dd/mm/yy")
End Sub
Private Sub CboDate_Change()
Dim Ctrl As Control
Dim Colonne As Integer
If Me.CboDate.ListIndex = -1 Then Exit Sub
With Sheets("Données")
Ligne = Me.CboDate.ListIndex + 4
For Each Ctrl In Me.Controls
Colonne = CInt("0" & Ctrl.Tag)
If Colonne > 0 Then Ctrl = .Cells(Ligne, Colonne)
Next Ctrl
End With
End Sub
Function TrouveType(V)
TrouveType = V
If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
End Function
Private Sub CmdModifier_Click()
' Modifier
Dim Ctrl As Control
Dim Colonne As Integer
Dim Ligne As Long
If Me.CboDate.ListIndex = -1 Then Exit Sub
Ligne = Me.CboDate.ListIndex + 4
With Sheets("Données")
For Each Ctrl In Me.Controls
Colonne = Val(Ctrl.Tag)
If Colonne > 0 Then
.Cells(Ligne, Colonne) = TrouveType(Ctrl)
End If
Next Ctrl
.Cells(Ligne, Sheets("Données").UsedRange.Columns.Count) = Sheets("Feuil1").Range("C24")
End With
Unload Me
End Sub
Private Sub CmdAnnuler_Click()
Unload Me
End Sub |
Merci par avance de votre expertise
Joël