Option Explicit
Public WithEvents TxtB As MSForms.TextBox
Dim Ws As Worksheet
Dim SelectedIndex As Integer
Dim cls(1 To 15) As New Modifier
Const fmt1 = "#,##0.00;-#,##0.00"
Const fmt2 = "#,##0.00 €;-#,##0.00 €"
[COLOR=rgb(97, 189, 109)]'Ici tu définis le format des TextBox de Janvier à Décembre et les format des TextBox 14 et 15. Cela dans toutes les procédures où ils sont susceptibles d'être appelés. Il n'y a plus nécessité de "coder" les formats à chaque fois: on utilise fmt1 ou fmt2. Ce sont des constantes ( Const): leurs valeurs sont fixes.
Cela grâce à la déclaration "Public "[/COLOR]
Private Sub Quitter_Click()
Unload Me 'Ferme le Formulaire
Accueil.Show 0
End Sub
Private Sub TextBox14_change()
TextBox14 = Format(TextBox14, fmt2)
End Sub
[COLOR=rgb(97, 189, 109)]'Ici tu affecte le format de la TextBox14 en utilisant fmt2 défini plus haut. Idem pour la TextBox15'[/COLOR]
Private Sub TextBox15_Change()
TextBox15 = Format(TextBox15, fmt2)
End Sub
Private Sub TxtB_Change()
Dim chn$, mem#, i As Byte
'Ici tu as utilisé des raccourcispour définir la valeur des variables: $=Sting, #=Double, Byte =nombre entre 0 et 255'
If Right$(TxtB, 1) = "." Then TxtB = Replace$(TxtB, ".", ",")
[COLOR=rgb(97, 189, 109)] 'Ici tu permets l'utilisation du point du clavier numérique ou la virgule pour les décimales[/COLOR]
For i = 2 To 13
[COLOR=rgb(97, 189, 109)]'Ici tu fais une boucle sur les 13 TextBox de la Frame1 et tu leurs affectent une valeur numérique et tu affecte à "mem" le format fmt1[/COLOR]
With Modifier.Frame1.Controls("TextBox" & i)
chn = .Value: If IsNumeric(chn) Then mem = mem + CDbl(chn)
End With
Frame1.Controls("TextBox" & i) = Format(chn, fmt1)
Next i
Modifier.Frame1.TextBox14 = mem
[COLOR=rgb(97, 189, 109)]'Ici tu "active" la modification de la TextBox14 après addition des[/COLOR] [COLOR=rgb(97, 189, 109)]TextBox'[/COLOR]
End Sub
Private Sub UserForm_Activate()
Dim ctrl, MaSomme#, MC%, J&, MPL&, MDL&, a&
ComboBox2.ColumnCount = 1 'Pour la liste Civilité
ComboBox2.List() = Array("Civilité", "Mr", "Mme")
Set Ws = Sheets("Controle")[COLOR=rgb(97, 189, 109)] 'Correspond au nom de l'onglet dans le fichier Excel[/COLOR]
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("C" & J) & " - " & Format(Ws.Range("A" & J), "0# ## ## ## ##")
Next J [COLOR=rgb(97, 189, 109)]'Ici tu fais une boucle sur le tableau et tu associes le nom et le numéro de téléphone pour l'afficher dans la ComboBox1: Rechercher. La fin du code correspond au format du numéro de téléphone. '[/COLOR]
End With
For Each ctrl In Frame1.Controls [COLOR=rgb(97, 189, 109)]'Ici à l'aide de "For Each" tu accède à la Frame1. "ctrl"???[/COLOR]
If TypeName(ctrl) = "TextBox" And ctrl.Name <> "TextBox14" Then
a = a + 1: Set cls(a).TxtB = ctrl [COLOR=rgb(97, 189, 109)]' Je suppose qu'ici tu additionne les montants des TextBox de la Frame1???[/COLOR]
End If
Next ctrl
Worksheets("Controle").Select
MC = 16 'Ma Collone
MPL = 2 'Ma Première Ligne
MDL = Cells(Rows.Count, "P").End(xlUp).Row - 1 'Ma Dernière Ligne
MaSomme = 0
For J = MPL To MDL
MaSomme = MaSomme + Cells(J, MC)
Next J
TextBox15 = MaSomme [COLOR=rgb(97, 189, 109)]'Ici tu additionne les montants de la colonne "O" et le total s'affiche dans la TextBox15 dont le format est fmt2'[/COLOR]
End Sub
Private Sub ComboBox1_Change()
Dim Ligne&, i As Byte
SelectedIndex = ComboBox1.ListIndex
If ComboBox1.ListIndex = -1 Then
ComboBox2.ListIndex = -1
For i = 1 To 14
Controls("TextBox" & i) = "" [COLOR=rgb(97, 189, 109)]' Ici tu affiche l'UsF à vide lors de l'ouverture[/COLOR]
Next i
Else
Ligne = ComboBox1.ListIndex + 2
ComboBox2 = Ws.Cells(Ligne, "B")
Textbox1 = Ws.Cells(Ligne, "C")
For i = 2 To 14
Controls("TextBox" & i) = Format(Ws.Cells(Ligne, i + 2), fmt1)
[COLOR=rgb(97, 189, 109)]'Ici tu définis le contenu des TextBox en fonction du choix effectué, ainsi que leurs formats'[/COLOR]
Next i
End If
If ComboBox1.ListIndex <> -1 Then Cells(ComboBox1.ListIndex + 2, 1).Select
[COLOR=rgb(97, 189, 109)]'Ici tu positionne le curseur dans le tableau sur la cellule contenant le nom choisi dans la ComboBox1[/COLOR]
End Sub
Private Sub Valider_Click()
[COLOR=rgb(97, 189, 109)] 'Correspond au programme du bouton Valider Modification ou Ajout[/COLOR]
Dim MaSomme#, MC%, Ligne&, MPL&, MDL&
If MsgBox("Etes-vous certain de vouloir mofifier la fiche?", vbYesNo, "Demande de confirmation") = vbYes Then
If SelectedIndex = -1 Then Exit Sub
Ligne = SelectedIndex + 2 [COLOR=rgb(97, 189, 109)]'ici tu définis la première ligne à renseigner[/COLOR]
Ws.Cells(Ligne, "B") = ComboBox2
Ws.Cells(Ligne, 3) = Textbox1[COLOR=rgb(97, 189, 109)] 'Ici tu indique où se trouve la valeur de la TextBox1: Nom[/COLOR]
Ws.Columns("D:O").NumberFormat = fmt1 [COLOR=rgb(97, 189, 109)]'Ici tu définis le format des cellules de la plage "C:N"[/COLOR]
Ws.Columns("P").NumberFormat = fmt2 [COLOR=rgb(97, 189, 109)]'Ici tu définis le format de la colonne "Total"[/COLOR]
On Error Resume Next [COLOR=rgb(97, 189, 109)]'Ici tu indique de continuer à traiter les instructions même s'il y a une erreur, je ne comprends pas très bien le concept????[/COLOR]
Ws.Range("D" & Ligne) = Trim$(TextBox2) * 1 [COLOR=rgb(97, 189, 109)]'Ici tu indique où va aller les valeurs entrées en supprimant les éventuels espaces vides avant et après la valeur entrée. Par contre je n'ai pas compris [/COLOR][COLOR=rgb(184, 49, 47)]*1[/COLOR][COLOR=rgb(97, 189, 109)]???[/COLOR]
Ws.Range("E" & Ligne) = Trim$(TextBox3) * 1
Ws.Range("F" & Ligne) = Trim$(TextBox4) * 1
Ws.Range("G" & Ligne) = Trim$(TextBox5) * 1
Ws.Range("H" & Ligne) = Trim$(TextBox6) * 1
Ws.Range("I" & Ligne) = Trim$(TextBox7) * 1
Ws.Range("J" & Ligne) = Trim$(TextBox8) * 1
Ws.Range("K" & Ligne) = Trim$(TextBox9) * 1
Ws.Range("L" & Ligne) = Trim$(TextBox10) * 1
Ws.Range("M" & Ligne) = Trim$(TextBox11) * 1
Ws.Range("N" & Ligne) = Trim$(TextBox12) * 1
Ws.Range("O" & Ligne) = Trim$(TextBox13) * 1
Ws.Range("P" & Ligne).Formula = "=SUM(D" & Ligne & ":O" & Ligne & ")"
Err.Clear [COLOR=rgb(97, 189, 109)]'Efface les erreurs????[/COLOR]
End If
MC = 16 'Ma Colonne
MPL = 2 'Ma Première Ligne
MDL = Cells(Rows.Count, "P").End(xlUp).Row - 1 'Ma Dernière Ligne
For Ligne = MPL To MDL
MaSomme = MaSomme + Cells(Ligne, MC)
Next Ligne
TextBox15 = MaSomme
Worksheets("Top 10 Conso").Select: Tri [COLOR=rgb(97, 189, 109)]'Ici tu effectues le classement sur la feuille "Top10Conso" après la validation de la modification, ou de l'Ajout.
Dans le module "Tri", tu as rajouté "Application.ScreenUpdating=0" qui permet de faire le tri sans que l'on ne voit l'exécution de la Macro. Cela accélère en même temps l'exécution de la Macro.[/COLOR]
Worksheets("Controle").Select [COLOR=rgb(97, 189, 109)]'Ici on revient sur la feuille "Controle".[/COLOR]
En Sub
Je reste dans l'attente de ton verdict et des précisions que tu voudras bien m'apporter.
Soan merci encore milles fois pour ton aide. J'ai pleinement conscience du boulot que cela t'a demandé, et j'apprécie le travail a sa hauteur.
Dans l'attente, bonne soirée à toi.