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