re,
@KRUG WOO --> Je rejoins ce que vgendron écrit.
Mais bon ici plus besoin de s'en occuper puisque Valtrase a fait tout le travail.
A voir si le demandeur va y piger quelque chose car il y avait moyen de faire plus simple.
Pour ma part, j'arrête de suivre ce fil
Cordialement
Bonsoir Dan,
Tu arrête de suivre le fil 😀. Valtrase m'a donné une idée, je vous partage ici ce que j'ai trouvé. Mon code marche à part le bouton suppression. je vais essayer aussi de trouvé le code qui supprime le listbox et en même temps les données dans sheet. Voici le code que j'utilise et qui marche:
Private Sub CommandButton_Ajouter_Click()
'Nouveau nom
Me.ListBox1.ListIndex = -1
Call efface
End Sub
Sub efface()
Me.TextClient = ""
Me.TextAgent = ""
Me.TextPays = ""
Me.TextDate = ""
Me.TextDescription = ""
Me.TextPf = ""
Me.TextStatut = ""
Me.TextDossier = ""
Me.TextPlateforme = ""
Me.TextBQ = ""
Me.TextEUR = ""
Me.TextUSD = ""
Me.TextMGA = ""
Me.CommandButton_supprimer.Locked = True
End Sub
Private Sub CommandButton_supprimer_Click()
'Le code permet donc de supprimer une ligne de tableau dans une feuille Excel
'à partir des données sélectionnées dans une ListBox d'un UserForm.
Dim Lig&
If Me.ListBox1 = "" Then Exit Sub
Lig = Me.ListBox1.ListIndex + 1
If MsgBox("Confirmer la suppression de la ligne selectionnée", 292, "Suppression") = 6 Then
Feuil1.Unprotect
[tableau1].Rows(Lig).Delete
Me.ListBox1.List = [tableau1].Value
Call efface
Feuil1.Protect
End If
Me.ListBox1.ListIndex = -1
End Sub
With Feuil1
Me.CommandButton_supprimer.Locked = True
Me.ListBox1.ColumnWidths = "100;150;110;100;70;50;50;50;50;50;50;90;90;90"
Me.ListBox1.List = [tableau1].Value
End With
End Sub
Private Sub CommandButton1_Click() 'Fermer
Unload Me
End Sub
Private Sub CommandButton2_Click() 'validation
Dim Lig
Dim ctrl As Control
Dim ChampsObligatoires As Variant
Dim i As Integer
'SAISIE AVEC TEXTBOX A REMPLIR OBLIGATOIREMENT
' Liste des TextBox obligatoires (à adapter selon vos besoins)
ChampsObligatoires = Array("textClient", "textAgent", "textEUR")
For i = LBound(ChampsObligatoires) To UBound(ChampsObligatoires)
Set ctrl = Me.Controls(ChampsObligatoires(i))
If Not ctrl Is Nothing Then ' Vérifier que le contrôle existe bien
If Trim(ctrl.Value) = vbNullString Then ' Trim enlève les espaces vides
MsgBox "Saisie du " & Mid(ctrl.Name, 5) & " obligatoire", , "Saisie obligatoire"
ctrl.SetFocus
Exit Sub ' Stoppe la vérification dès qu'un champ est vide
End If
Else
MsgBox "Erreur : Le champ '" & ChampsObligatoires(i) & "' n'existe pas sur le formulaire.", vbExclamation, "Erreur"
End If
Next i
Feuil1.Unprotect
With [tableau1].ListObject
If Me.ListBox1.ListIndex = -1 Then
Set Lig = .ListRows.Add: Lig = Lig.Index
Else
Lig = Me.ListBox1.ListIndex + 1
End If
.ListColumns("Client").DataBodyRange(Lig) = Me.TextClient.Value
.ListColumns("Agent").DataBodyRange(Lig) = Me.TextAgent.Value
.ListColumns("Pays").DataBodyRange(Lig) = Me.TextPays.Value
.ListColumns("Date").DataBodyRange(Lig) = Me.TextDate.Value
.ListColumns("Description").DataBodyRange(Lig) = Me.TextDescription.Value
.ListColumns("PF").DataBodyRange(Lig) = Me.TextPf.Value
.ListColumns("Statut").DataBodyRange(Lig) = Me.TextStatut.Value
.ListColumns("N°Dossier").DataBodyRange(Lig) = Me.TextDossier.Value
.ListColumns("Plateforme").DataBodyRange(Lig) = Me.TextPlateforme.Value
.ListColumns("BQ").DataBodyRange(Lig) = Me.TextBQ.Value
.ListColumns("Montant EUR").DataBodyRange(Lig) = Me.TextEUR.Value
.ListColumns("Montant USD").DataBodyRange(Lig) = Me.TextUSD.Value
.ListColumns("Montant MGA").DataBodyRange(Lig) = Me.TextMGA.Value
End With
Me.ListBox1.List = [tableau1].Value
Feuil1.Protect
End Sub
Private Sub ListBox1_Click()
If Me.ListBox1.ListIndex = -1 Then Exit Sub ' Vérifie qu'une ligne est bien sélectionnée
Me.TextClient = Me.ListBox1.Column(0)
Me.TextAgent = Me.ListBox1.Column(1)
Me.TextPays = Me.ListBox1.Column(2)
Me.TextDate = Me.ListBox1.Column(3)
Me.TextDescription = Me.ListBox1.Column(4)
Me.TextPf = Me.ListBox1.Column(5)
Me.TextStatut = Me.ListBox1.Column(6)
Me.TextDossier = Me.ListBox1.Column(7)
Me.TextPlateforme = Me.ListBox1.Column(8)
Me.TextBQ = Me.ListBox1.Column(9)
Me.TextEUR = Me.ListBox1.Column(10)
Me.TextUSD = Me.ListBox1.Column(11)
Me.TextMGA = Me.ListBox1.Column(12)
Me.CommandButton_supprimer.Locked = False
End Sub
Private Sub UserForm_Initialize()
Dim TabTS As Variant
Dim ws As Worksheet
Dim lo As ListObject
' Assurez-vous de référencer la bonne feuille et le bon tableau
Set ws = ThisWorkbook.Sheets("JN") ' Vérifiez que c'est bien la bonne feuille
Set lo = ws.ListObjects(1) ' Vérifiez que c'est bien le bon tableau
' Vérification si le tableau contient des données
If lo.DataBodyRange Is Nothing Then Exit Sub ' Si pas de données, on quitte
' Charger les données du tableau dans un tableau VBA
TabTS = lo.DataBodyRange.Value
' Définir le nombre de colonnes dans la ListBox
Me.ListBox1.ColumnCount = lo.ListColumns.Count
' Charger les données dans la ListBox
Me.ListBox1.List = TabTS
End Sub