Salut,
Alors moi j'ai fait ce type de macro. En faites, j'ai fait une useform double pour l'ajout et la modification de clients.
J'ai un bouton "ajouter" et un bouton "modifier" l'un par dessus l'autre. et en fonction de ce que choisit l'utilisateur (ajouter ou modifier), j'initilise differement ma Userform.
Pour choisir en quel mode lancer la U%serform, je mets 1 ou 2 dans une cellule dans un coin (blanc sur fonds blanc comme cela, ca ne se voit pas !!)
Voici des bouts de code :
------------ Le code de mes deux boutons sur ma feuille -----------------
Private Sub Ajouter_Click()
Sheets("Formulaire").Range("A1").Value = 2
ModifDial.Show
End Sub
Private Sub Modifier_Click()
If Feuil1.Clientbox.Text = "" Or Feuil1.Clientbox.Text = "Client" Then
MsgBox "Vous devez Selectionner un client avant !!", vbCritical + vbOKOnly, "Attention..."
Exit Sub
Else
Sheets("Formulaire").Range("A1").Value = 1
ModifDial.Show
End If
end sub
--------------- Initilisation de ma Userform----------------------
Private Sub UserForm_Initialize() '<- Initialisation de la Userform Modifdial
Select Case Sheets("formulaire").Range("A1").Value
Case 1
Sheets("formulaire").Range("A1").Value = "0"
With ModifDial
.Caption = "Modification enregistrement..."
.BtAjouter.Visible = False
.BtModifier.Visible = True
End With
ModMarche.Text = Feuil1.MarcheBox.Text
ModClient.Text = Feuil1.Clientbox.Text
ModNMR.Text = Feuil1.Nmr.Caption
ModPeriode.Text = Feuil1.Periode.Caption
ModUnite.Text = Feuil1.Unite.Caption
ModCM.Text = Feuil1.CM.Caption
ModTelCM.Text = Feuil1.TelCm.Caption
ModCEC.Text = Feuil1.CEC.Caption
ModTelCEC = Feuil1.TelCEC.Caption
ModProd.Text = Feuil1.Prod.Caption
ModTelProd.Text = Feuil1.ProdTel.Caption
ModDU.Text = Feuil1.DU.Caption
ModTelDU.Text = Feuil1.TelDU.Caption
ModRem.Text = Feuil1.Remarque.Caption
Case 2
Sheets("formulaire").Range("A1").Value = "0"
With ModifDial
.Caption = "Ajout d'un enregistrement..."
.BtAjouter.Visible = True
.BtModifier.Visible = False
End With
Call ClearModifdial
Case Else
Exit Sub
End Select
End Sub
---------------------------------------------------------------------------
Private Sub ClearModifdial() '<- Efface tous les champs de la Userform Modifdial
Dim CTRL As Control
For Each CTRL In Controls
If TypeOf CTRL Is MSForms.TextBox Then
CTRL = ""
End If
Next CTRL
End Sub
------------------------Bouton modifier de ma userform--------------------------
Private Sub BtModifier_Click() '<- Procedure de modification d'une entrée quand on clique sur le bouton "Modifier" de la UserForm Modifdial
If ModClient.Text = "" Or ModMarche = "" Or ModClient.Text = " " Or ModMarche = " " Or ModNMR.Text = "" Or ModNMR = " " Then
MsgBox "Vous devez entrer du texte ...", vbCritical + vbOKCancel, "Attention..."
Else
NomLBindex = Feuil1.Clientbox.ListIndex + 2
Dim Cherche As String
Dim L As Integer
Dim Maplage As Range
Dim FirstAddress As String
Dim C As Object
Cherche = Feuil1.Clientbox.Value
L = Sheets("BdeD").Range("A65536").End(xlUp).Row
Workbooks("KifékoA.xls").Activate
ActiveWorkbook.Sheets("BdeD").Visible = True
ActiveWorkbook.Sheets("BdeD").Select
Set Maplage = Sheets("BdeD").Range("A2:N" & L)
With Maplage
Set C = .Find(Cherche, LookIn:=xlValues)
If Not C Is Nothing Then
FirstAddress = C.Address
Do
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> FirstAddress
End If
End With
With Feuil3
.Range("A" & NomLBindex).Value = ModClient.Value
.Range("B" & NomLBindex).Value = ModMarche.Value
.Range("C" & NomLBindex).Value = ModNMR.Value
.Range("D" & NomLBindex).Value = ModPeriode.Value
.Range("E" & NomLBindex).Value = ModUnite.Value
.Range("F" & NomLBindex).Value = ModCM.Value
.Range("G" & NomLBindex).Value = ModTelCM.Value
.Range("H" & NomLBindex).Value = ModCEC.Value
.Range("I" & NomLBindex).Value = ModTelCEC.Value
.Range("J" & NomLBindex).Value = ModProd.Value
.Range("K" & NomLBindex).Value = ModTelProd.Value
.Range("L" & NomLBindex).Value = ModDU.Value
.Range("M" & NomLBindex).Value = ModTelDU.Value
.Range("N" & NomLBindex).Value = ModRem.Value
End With
End If
With Feuil1
.Clientbox.Value = ModClient.Value
.MarcheBox.Value = ModMarche.Value
.Nmr.Caption = ModNMR.Value
.Periode.Caption = ModPeriode.Value
.Unite.Caption = ModUnite.Value
.CM.Caption = ModCM.Value
.TelCm.Caption = ModTelCM.Value
.CEC.Caption = ModCEC.Value
.TelCEC.Caption = ModTelCEC.Value
.Prod.Caption = ModProd.Value
.ProdTel.Caption = ModTelProd.Value
.DU.Caption = ModDU.Value
.TelDU.Caption = ModTelDU.Value
.Remarque.Caption = ModRem.Value
End With
MsgBox "Modification faite. La modification sera définitive à la fermeture de l'application !!", vbCritical + vbOKOnly, "Attention..."
Sheets("formulaire").Range("A1").Value = "0"
ActiveWorkbook.Sheets("Formulaire").Select
Unload Me
End Sub
---------------------------Bouton ajouter de ma Userform -----------------
Private Sub BtAjouter_Click() '<- Procedure d'ajout d'une entrée quand on clique sur le bouton "Ajouter" de la userform Modifdial
Dim Msg1 As String
Dim Msg2 As String
Dim L2 As Integer
Dim L As Integer
Dim LastCell As String
Dim LastCell1 As String
If ModMarche = "" Or ModClient = "" Or ModNMR = "" Then '<- Si 1 des 3 premiers champ est pas rempli
MsgBox "Vous devez saisir ces 3 champs obligatoirement : Client, Marché & N° de marché !", vbCritical, "Ki-fé-koa Info..."
Exit Sub
End If
Msg1 = MsgBox("Voulez-vous ajouter cette nouvelle entrée ? ", vbYesNo, "Confirmation...")
If Msg1 = vbYes Then
L2 = Sheets("BdeD").Range("A65536").End(xlUp).Row + 1
With Feuil3
.Range("A" & L2).Value = ModClient.Value
.Range("B" & L2).Value = ModMarche.Value
.Range("C" & L2).Value = ModNMR.Value
.Range("D" & L2).Value = ModPeriode.Value
.Range("E" & L2).Value = ModUnite.Value
.Range("F" & L2).Value = ModCM.Value
.Range("G" & L2).Value = ModTelCM.Value
.Range("H" & L2).Value = ModCEC.Value
.Range("I" & L2).Value = ModTelCEC.Value
.Range("J" & L2).Value = ModProd.Value
.Range("K" & L2).Value = ModTelProd.Value
.Range("L" & L2).Value = ModDU.Value
.Range("M" & L2).Value = ModTelDU.Value
.Range("N" & L2).Value = ModRem.Value
End With
Else: Msg1 = vbNo
Exit Sub
End If
Msg2 = MsgBox("Voulez-vous continuer pour d'autres nouvelles entrées ?", _
vbYesNo, "Autre ajout ?")
If Msg2 = vbYes Then
Call ClearModifdial
Else
LastCell = Range("BdeD!A2").End(xlDown).Address
LastCell1 = Range("BdeD!B2").End(xlDown).Address
With Feuil1
.Clientbox.ListFillRange = "BdeD!A2:" & LastCell
.MarcheBox.ListFillRange = "BdeD!B2:" & LastCell1
.Clientbox.Value = ModClient.Value
.MarcheBox.Value = ModMarche.Value
.Nmr.Caption = ModNMR.Value
.Periode.Caption = ModPeriode.Value
.Unite.Caption = ModUnite.Value
.CM.Caption = ModCM.Value
.TelCm.Caption = ModTelCM.Value
.CEC.Caption = ModCEC.Value
.TelCEC.Caption = ModTelCEC.Value
.Prod.Caption = ModProd.Value
.ProdTel.Caption = ModTelProd.Value
.DU.Caption = ModDU.Value
.TelDU.Caption = ModTelDU.Value
.Remarque.Caption = ModRem.Value
End With
Workbooks("KifékoA.xls").Activate
ActiveWorkbook.Sheets("BdeD").Visible = True
ActiveWorkbook.Sheets("BdeD").Select
L = Sheets("BdeD").Range("A65536").End(xlUp).Row
Set Maplage = Sheets("BdeD").Range("A2:N" & L)
Maplage.Sort Worksheets("BdeD").Columns("A"), Order1:=xlAscending, Header:=xlGuess
ActiveWorkbook.Sheets("Formulaire").Select
Unload Me
End If
End Sub
Voila en esperant que cela te sera utile, désolé pour la longueur du post !