Bonjour
Voila le début de la proposition
J'ai renommé tes contrôles convenablement comme ceci PrefNom_Suff
Pref: préfixe Txt, Cbo ou Cmd (TextBox, ComboBox ou Bouton)
Nom: Nom indicatif du contrôle
Suff: Suffixe (nombre) indiquant la colonne de la feuille en lien avec le contrôle
Exemples:
CboModePaiem_12: c'est la ComboBox mode paiement liée avec la colonne L (12ème colonne)
TxtClient_6: TextBox nom client liée à la colonne F
J'ai ajouté une feuille CONFIG dans laquelle j'ai ajouté les items des différentes combobox. Preuve, il est plus facile d'ajouter une banque dans cette feuille de l'écrire en dur dans le code
Les différentes colonnes sont nommées dynamiquement, c'est à dire on peut y ajouter des données sans toucher au code.
Pour nommer les plages, j'ai utiliser la formule (exemple pour la liste des banques)
=DECALER(CONFIG!$D$1;;;NBVAL(CONFIG!$D:$D)+1)
Le feuille de travail est nommée BD
Code:
Dans un module standard, j'ai déclaré les 2 variables publiques
1 2 3 4
| Option Explicit
Public Nouv As Boolean 'True si c'est une nouvelle entrée, sinon une entrée déjà existante
Public Lig As Long 'La ligne où lire ou écrire |
Dans le module de la feuille BD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row > 1 Then
Cancel = True
Lig = Target.Row
If Range("A" & Lig) = "" Then
Nouv = True
Lig = Cells(Rows.Count, 1).End(xlUp).Row + 1
Else
Nouv = False
End If
UserForm1.Show
End If
End Sub |
Dans le module de l'userform
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 72 73 74 75 76 77 78 79 80 81
| Option Explicit
Dim Ws As Worksheet
Private Sub UserForm_Initialize()
Me.CboCodeClient_1.Enabled = False
Me.CboModePaiem_12.RowSource = "ModePaiem"
Me.CboCAFPI_13.RowSource = "Cafpi"
Me.CboTypeCred_14.RowSource = "TypeCredit"
Me.CboStatutDoss_17.RowSource = "StatutDoss"
Me.CboBankClient_16.RowSource = "Bank"
Me.CboMoisDepot_21.RowSource = "ListeMois"
Me.CboAnneeDepot_22.RowSource = "ListeAnnees"
Me.CboBankSelect_19.RowSource = "Bank"
Set Ws = Worksheets("BD")
ADDATA
If Not Nouv Then IMPORT
End Sub
Private Sub ADDATA()
If Nouv Then
Me.CboCodeClient_1.Value = Lig - 1
With Me.CmdValid
.Caption = "Nouveau client"
.BackColor = 180
End With
Else
Me.CboCodeClient_1.Value = Ws.Range("A" & Lig)
With Me.CmdValid
.Caption = "Modifier client"
.BackColor = 568712
End With
End If
End Sub
Private Sub CmdValid_Click()
EXPORT
Unload Me
End Sub
Private Function NUMCOL(ByVal Ctr As Control) As Integer
Dim Tmp As String
Tmp = Ctr.Name
NUMCOL = Val(Mid(Tmp, InStrRev(Tmp, "_") + 1))
End Function
Private Sub EXPORT()
Dim Ctr As Control
If Lig > 0 Then
For Each Ctr In Me.Controls
If Left(Ctr.Name, 3) = "Cbo" Or Left(Ctr.Name, 3) = "Txt" Then Ws.Cells(Lig, NUMCOL(Ctr)) = Ctr.Value
Next Ctr
End If
End Sub
Private Sub IMPORT()
Dim Ctr As Control
If Lig > 0 Then
For Each Ctr In Me.Controls
If Left(Ctr.Name, 3) = "Cbo" Or Left(Ctr.Name, 3) = "Txt" Then Ctr.Value = Ws.Cells(Lig, NUMCOL(Ctr))
Next Ctr
End If
End Sub
Private Sub CmdQuit_Click()
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Lig = 0
Nouv = False
Set Ws = Nothing
End Sub |
Fichier exemple
Partager