Bonjour,

J'ai un tableau avec plusieurs colonnes , certaines se remplissent grace à un formulaire et d'autres sont prévues pour être remplies grace à des formules qui sont déjà tirées dans les colonnes.
Voici le code de l'Userform :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
Option Explicit
 
Public Cancelled As Boolean
 
Dim rgData As Range
Dim vaData As Variant
 
 
--------------------------------------------------------------
 
'Données du tableau vers le formulaire
Private Sub LoadRecord()
 
vaData = rgData.Value
 
txDésignation.Value = vaData(1, 1)
 
txNuméro.Value = vaData(1, 3)
 
Select Case vaData(1, 4)
    Case "M"
    opMoteurM.Value = True
    Case "F"
    opMoteurF.Value = True
    Case "G"
    opMoteurG.Value = True
End Select
 
Select Case vaData(1, 12)
    Case "E"
    opProvenanceExterne.Value = True
    Case "I"
    opProvenanceInterne.Value = True
End Select
 
cbFournisseur.Value = vaData(1, 11)
 
cbEmplacement.Value = vaData(1, 2)
 
cbResponsable.Value = vaData(1, 5)
 
cbSpécificité.Value = vaData(1, 19)
 
txCommentaire.Value = vaData(1, 18)
 
txQuantitéMisEnIndisponible.Value = vaData(1, 6)
 
txQuantitéObjectif.Value = vaData(1, 10)
 
txPrixUnitaire.Value = vaData(1, 13)
 
End Sub
 
--------------------------------------------------------------
 
'Données du formulaire vers le tableau
Private Sub SaveRecord()
 
vaData(1, 1) = txDésignation.Value
 
vaData(1, 3) = txNuméro.Value
 
Select Case True
    Case opMoteurM.Value
    vaData(1, 4) = "M"
    Case opMoteurF.Value
    vaData(1, 4) = "F"
    Case opMoteurG.Value
    vaData(1, 4) = "G"
End Select
 
Select Case True
    Case opProvenanceExterne.Value
    vaData(1, 12) = "E"
    Case opProvenanceInterne.Value
    vaData(1, 12) = "I"
End Select
 
vaData(1, 11) = cbFournisseur.Value
 
vaData(1, 2) = cbEmplacement.Value
 
vaData(1, 5) = cbResponsable.Value
 
vaData(1, 19) = cbSpécificité.Value
 
vaData(1, 18) = txCommentaire.Value
 
vaData(1, 6) = txQuantitéMisEnIndisponible.Value
 
vaData(1, 10) = txQuantitéObjectif.Value
 
vaData(1, 13) = txPrixUnitaire.Value
 
rgData.Value = vaData
End Sub
 
 
--------------------------------------------------------------
 
Private Sub sbNavigator_Change()
Call SaveRecord
Set rgData = Range("Base_de_données").Rows(sbNavigator.Value)
Call LoadRecord
End Sub
 
--------------------------------------------------------------
 
Private Sub UserForm_Initialize()
With Range("Base_de_données")
    Set rgData = .Rows(2)
    Call LoadRecord
    sbNavigator.Value = 2
    sbNavigator.Max = .Rows.Count
End With
End Sub
 
--------------------------------------------------------------
 
Private Sub bnNouvelle_Click()
Dim iRowCount As Integer
 
With Range("Base_de_données")
    iRowCount = .Rows.Count + 1
    .Resize(iRowCount).Name = "Base_de_données"
    sbNavigator.Max = iRowCount
    sbNavigator.Value = iRowCount
End With
opMoteurM.Value = True
opProvenanceExterne = True
End Sub
 
--------------------------------------------------------------
 
Private Sub bnSupprimer_Click()
    If Range("Base_de_données").Rows.Count = 2 Then
        MsgBox "Impossible de supprimer la dernière Référence, elle est indispensable pour les formules", vbCritical
    Exit Sub
 
    ElseIf rgData.Row = Range("Base_de_données").Rows(2).Row Then
        Set rgData = rgData.Offset(1)
        rgData.Offsert(-1).Delete shift:=xlUp
        Call LoadRecord
    Else
        sbNavigator.Value = sbNavigator.Value - 1
        rgData.Offset(1).Delete shift:=xlUp
    End If
    sbNavigator.Max = sbNavigator.Max - 1
End Sub
 
--------------------------------------------------------------
 
Private Sub bnPrécédente_Click()
If rgData.Row > Range("Base_de_données").Rows(2).Row Then
    sbNavigator.Value = sbNavigator.Value - 1
End If
End Sub
 
--------------------------------------------------------------
 
Private Sub bnSuivante_Click()
With Range("Base_de_données")
    If rgData.Row < .Rows(.Rows.Count).Row Then
    sbNavigator.Value = sbNavigator.Value + 1
    End If
End With
End Sub
 
--------------------------------------------------------------
 
Private Sub bnOK_Click()
   Call SaveRecord
   Unload Me
End Sub
 
--------------------------------------------------------------
 
Private Sub bnAnnuler_Click()
   Unload Me
End Sub
Mon problême : Une fois le formulaire rempli, en cliquant sur Ok une nouvelle ligne dans le tableau se créé, les données vont du formulaire vers cette ligne, mais cela annule les cellules de la ligne contenant une formule... Je ne sait pas comment faire pour qu'en cliquant sur Ok, les données soient transférées mais que les formules se mettent automatiquement.

Dans Private Sub SaveRecord() je pensais mettre ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
vaData(1, 9) = ActiveCell.FormulaR1C1 = "=IF(RC[-6]="""","""",RC[-3]+RC[-2]+RC[-1])"
Mais cela ne fonctionne pas