Re : Doubler des infos d'un UserForm
Re
Une entracte pour te répondre la voici la macro :
Private Sub Frame1_Click()
End Sub
Private Sub txtAdresse1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtAdresse1.Value = Trim(txtAdresse1.Value)
End Sub
Private Sub txtAdresse2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtAdresse2.Value = Trim(txtAdresse2.Value)
End Sub
Private Sub txtCivilite_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtCivilite.Value = Trim(txtCivilite.Value)
End Sub
Private Sub txtCode_Change()
' Activer le bouton Valider
Call ActiverBtnValider
End Sub
Private Sub txtCode_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtCode.Value = Application.WorksheetFunction.Proper(Trim(txtCode.Value))
End Sub
Private Sub txtCP_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtCP.Value = Trim(txtCP.Value)
End Sub
Private Sub txtNom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtNom.Value = UCase(Trim(txtNom.Value))
End Sub
Private Sub txtPrenom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtPrenom.Value = Application.WorksheetFunction.Proper(Trim(txtPrenom.Value))
End Sub
Private Sub txtCavalier_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtCavalier.Value = Trim(txtCavalier.Value)
End SubPrivate Sub txtTel_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If txtTel.Value <> "" Then txtTel.Value = Format(txtTel.Value, "00 00 00 00 00")
End Sub
Private Sub txtTel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If txtTel.Value <> "" Then txtTel.Value = Format(txtTel.Value, "00 00 00 00 00")
End Sub
Private Sub txtVille_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtVille.Value = UCase(Trim(txtVille.Value))
End Sub
Private Sub UserForm_Initialize()
Dim wsFClient As Worksheet
Dim Ctrl As Byte
Set wsFClient = Worksheets("Clients")
' Initialiser les zones
Call InitZones
' Si Ajout : Rechercher le n° client suivant
If TypeSaisie = 1 Then
lblNumClient.Caption = RechercherNumClient
' Si modification : afficher les données
ElseIf TypeSaisie = 2 Then
cmbTypeClient.Value = wsFClient.Range("A" & LigClient).Value
cmbTypeClient.Enabled = False
txtCode.Value = wsFClient.Range("B" & LigClient).Value
lblNumClient.Caption = wsFClient.Range("C" & LigClient).Value
txtCivilite.Value = wsFClient.Range("D" & LigClient).Value
txtNom.Value = wsFClient.Range("E" & LigClient).Value
txtPrenom.Value = wsFClient.Range("F" & LigClient).Value
txtCavalier.Value = wsFClient.Range("G" & LigClient).Value
txtAdresse1.Value = wsFClient.Range("H" & LigClient).Value
txtAdresse2.Value = wsFClient.Range("I" & LigClient).Value
txtCP.Value = wsFClient.Range("J" & LigClient).Value
txtVille.Value = wsFClient.Range("K" & LigClient).Value
txtTel.Value = wsFClient.Range("L" & LigClient).Value
' Réf
For Ctrl = 1 To 4
If wsFClient.Cells(LigClient, 12 + Ctrl).Value <> "" Then
Controls("cmbRef" & Ctrl).Value = wsFClient.Cells(LigClient, 12 + Ctrl).Value
End If
Next Ctrl
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Cancel = True
End Sub
Private Sub InitZones()
' Initialiser les zones
Dim Ctrl As Byte
cmbTypeClient.Clear
cmbTypeClient.AddItem "Pension"
cmbTypeClient.AddItem "Reprises"
cmbTypeClient.AddItem "Pension/Reprises"
cmbTypeClient.AddItem "Divers"
cmbTypeClient.Value = ""
txtCode.Value = ""
lblNumClient.Caption = ""
txtCivilite.Value = ""
txtNom.Value = ""
txtPrenom.Value = ""
txtAdresse1.Value = ""
txtAdresse2.Value = ""
txtCP.Value = ""
txtVille.Value = ""
txtTel.Value = ""
For Ctrl = 1 To 4
Controls("cmbRef" & Ctrl).Clear
Next Ctrl
cmbRef1.List = Worksheets("Réf").Range("Réf").Value
End Sub
Private Function RechercherNumClient() As String
' Rechercher le n° du client
Dim wsFClient As Worksheet
Dim derLig As Long
Dim Plage As Range, Cell As Range
Dim adresseCell As String
Set wsFClient = Worksheets("Clients")
' Dernière ligne en colonne C
derLig = wsFClient.Range("C" & Cells.Rows.Count).End(xlUp).Row
' Plage de cellules
Set Plage = wsFClient.Range("C2:C" & derLig)
' Rechercher le n° client dans la plage de cellules
Set Cell = Plage.Find(Format(Now, "ddmmyyyy"), , LookIn:=xlValues, LookAt:=xlPart)
' Si le n° est trouvé
If Not Cell Is Nothing Then
adresseCell = Cell.Address
Do
If RechercherNumClient = "" Then
RechercherNumClient = Cell.Value
ElseIf CLng(Cell.Value) > CLng(RechercherNumClient) Then
RechercherNumClient = Cell.Value
End If
Set Cell = Plage.FindNext(Cell)
Loop While Not Cell Is Nothing And Cell.Address <> adresseCell
End If
If RechercherNumClient <> "" Then
RechercherNumClient = Format(Now, "ddmmyyyy") & _
CInt(Mid(RechercherNumClient, 9, Len(RechercherNumClient) - 8)) + 1
Else
RechercherNumClient = Format(Now, "ddmmyyyy") & "1"
End If
End Function
Private Sub ActiverBtnValider()
' Activer le bouton Valider
cmdValider.Enabled = False
If cmbTypeClient.Value <> "" And txtCode.Value <> "" Then
cmdValider.Enabled = True
End If
End Sub
Private Function RechercherCode() As Boolean
' Rechercher l'existence du code client
Dim wsFClient As Worksheet
Dim derLig As Long
Dim Plage As Range, Cell As Range
RechercherCode = False
Set wsFClient = Worksheets("Clients")
' Dernière ligne en colonne B
derLig = wsFClient.Range("B" & Cells.Rows.Count).End(xlUp).Row
If derLig < 2 Then derLig = 2
' Sélection de la plage de cellules des codes clients
Set Plage = wsFClient.Range("B2:B" & derLig)
' Rechercher le code client dans la plage
Set Cell = Plage.Find(txtCode.Value, , LookIn:=xlValues, LookAt:=xlWhole)
' Si le code est trouvé
If Not Cell Is Nothing Then
If Cell.Row <> LigClient Then RechercherCode = True
End If
End Function
Private Sub SaisieClientFacture(TypeClient As String, NumClient As String)
' Ajouter ou modifier un client dans la liste des factures
Dim wsFact As Worksheet
Dim derLig As Long
Dim derCol As String
Dim Plage As Range, Cell As Range
Dim LigSaisie As Long
' Choix de la feuille de suivi de factures en fonction du type de client
If TypeClient = "Pension" Then
Set wsFact = Worksheets("SUIVI FACTURE PENSION")
derCol = "U"
ElseIf TypeClient = "Reprises" Then
Set wsFact = Worksheets("SUIVI FACTURE REPRISES")
derCol = "N"
ElseIf TypeClient = "Pension/Reprises" Then
Set wsFact = Worksheets("SUIVI FACTURE PENSION-REPRISES")
derCol = "AA"
ElseIf TypeClient = "Divers" Then
Set wsFact = Worksheets("SUIVI FACTURE DIVERS")
derCol = "N"
Else: Exit Sub
End If
With wsFact
' Dernière ligne en colonne A
derLig = .Range("A" & Cells.Rows.Count).End(xlUp).Row
If derLig < 5 Then derLig = 5
' Déterminer la plage de cellules
Set Plage = wsFact.Range("A5:A" & derLig)
' Rechercher le n° client dans la feuille Facture
Set Cell = Plage.Find(NumClient, , LookIn:=xlValues, LookAt:=xlWhole)
' Le n° Client est trouvé
If Not Cell Is Nothing Then
LigSaisie = Cell.Row
Else
derLig = derLig + 1
LigSaisie = derLig
End If
' Enregistrer les données dans la feuille Facture
.Range("A" & LigSaisie).NumberFormat = "@"
.Range("A" & LigSaisie).Value = NumClient
.Range("B" & LigSaisie).Value = txtNom.Value
.Range("C" & LigSaisie).Value = txtPrenom.Value
.Range("D" & LigSaisie).Value = txtAdresse1.Value & IIf(txtAdresse2.Value <> "", " " & txtAdresse2.Value, "")
.Range("E" & LigSaisie).Value = txtCP.Value
.Range("F" & LigSaisie).Value = txtVille.Value
.Range("G" & LigSaisie).NumberFormat = "0#"" ""##"" ""##"" ""##"" ""##"
.Range("G" & LigSaisie).Value = txtTel.Value
' En mode Ajout : Mettre des bordures et un fond rouge
If TypeSaisie = 1 Then
If TypeClient <> "Pension/Reprises" Then
Set Plage = .Range("H" & LigSaisie & ":" & derCol & LigSaisie)
Call Bordures(Plage, xlEdgeLeft)
Call Bordures(Plage, xlEdgeTop)
Call Bordures(Plage, xlEdgeBottom)
Call Bordures(Plage, xlEdgeRight)
Call Bordures(Plage, xlInsideVertical)
Plage.Interior.ColorIndex = 3
Else
Set Plage = .Range("H" & LigSaisie & ":U" & LigSaisie)
Call Bordures(Plage, xlEdgeLeft)
Call Bordures(Plage, xlEdgeTop)
Call Bordures(Plage, xlEdgeBottom)
Call Bordures(Plage, xlEdgeRight)
Call Bordures(Plage, xlInsideVertical)
Plage.Interior.ColorIndex = 3
Set Plage = .Range("W" & LigSaisie & ":" & derCol & LigSaisie)
Call Bordures(Plage, xlEdgeLeft)
Call Bordures(Plage, xlEdgeTop)
Call Bordures(Plage, xlEdgeBottom)
Call Bordures(Plage, xlEdgeRight)
Call Bordures(Plage, xlInsideVertical)
Plage.Interior.ColorIndex = 3
End If
End If
' Trier les données
Set Plage = .Range("A5:" & derCol & derLig)
Plage.Sort _
Key1:=.Range("B5"), Order1:=xlAscending, _
Key2:=.Range("C5"), Order2:=xlAscending, _
Key3:=.Range("A5"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False ', Orientation:=xlTopToBottom, _
'DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
' Afficher le nombre de clients dans la liste
.Range("B2").Formula = "=COUNTA(A5:A" & derLig & ")"
End With
End Sub
Je souhaiterai que le nom du cavalier s'incrive aussi dans le classeur FormCavalierCheval,feuille:monte,colonne H, et comme se sont des inscriptions je souhaiterais que les noms se mets les aprés les autres.
Merci.
A+