Problème lors d'un ajout multiple de produits dans un tableau

Bonjour à tous,

Je viens vers vous aujourd'hui car je rencontre une difficulté sur le code,

j'ai un formulaire avec lequel je peux rentrer la commande de mon client et les différents produits associés (souvent des formules composées de plusieurs produits)

Mon problème est que quand je valide ce formulaire, mes données se rentrent automatiquement dans un tableau. Jusqu'ici tout fonctionne (merci Thierry)

Cependant lorsque j'ajoute une nouvelle commande, au lieu d'appliquer un Endxlup+1, le programme inscrit la première donnée de cette nouvelle commande sur la dernière ligne de la précédente au lieu de se mettre dans la cellule du dessous (en +1) J'ai essayé pas mal de combine mais je sèche.

Je vous mets en lien mon code + Screenshots pour mon explication

'========================= GESTION COMMANDE ============================
L = WsCmd.Range("F1000").End(xlUp).Row
H = L

With Me.List_Pieces
    For i = 0 To .ListCount - 1
       For j = 0 To 5
          WsCmd.Cells(L, j + 7) = Me.List_Pieces.List(i, j)
       Next j
    L = L + 1
    Next i
End With

For i = H To L - 1
    For Each CTRL In Me.Controls
        If IsNumeric(CTRL.Tag) = True Then
            If CTRL.Tag <> "2" Then
                WsCmd.Cells(i, CInt(CTRL.Tag)) = CTRL
            Else
                WsCmd.Cells(i, 2) = CDate(Me.txt_date) 'Sinon on a une date en Texte dans la feuille !
            End If
        End If
    Next CTRL
Next i
test1 test2

En espérant avoir été assez clair, je reste à votre disposition pour plus d'infos,

Merci!
Rémy

Bonjour Rémy,

Et d'après votre code, vous ne voyez pas d'où peut provenir le problème !?

Si je vous dis qu'il se situe ici

L = WsCmd.Range("F1000").End(xlUp).Row

Je vous site : "au lieu d'appliquer un Endxlup+1"

@+

Bonjour Bruno et merci pour votre réponse,

J'aurai aimé que ce soit aussi simple, cependant si je mets un +1 voila ce que cela donne: je suis hors tableau pour la première entrée (par contre c'est parfait pour la suite)

test

Cordialement,

Bonjour,

Le tableau à l'air d'être un tableau structuré. Si on avait eu son nom, on aurait pu t'aider plus précisément. Sans cela, tu peux faire ça. C'est moins joli mais ça devrait marcher.

L = WsCmd.Range("F1000").End(xlUp).Row +1
If L = 5 then L = 4

Bonjour Rémy, Salut JoyeuxNoel

Autre méthode, qui ajoute une ligne automatiquement si besoin

Set TblStructuré = ThisWorkbook.Sheets("NomFeuille").ListObjects("NomTableau")

 With TblStructuré
    Set CelF = .ListColumns("NomDuneColonne").Range.Find("")
    If CelF Is Nothing Or .ListRows.Count = 0 Then
      .ListRows.Add: Lig = .ListRows.Count
    Else
      Lig = CelF.Row - .HeaderRowRange.Row
    End If
  End With

@+

Hello Bruno,

Oui, voilà c'était un truc du genre que j'imaginais. M'enfin j'aurais fait plus brouillon que ça ^^

Bonjour à toutes et tous,

Allez, soyons fou !...

Puisque l'on travaille avec un tableau structuré (et non une plage...).

A adapter.

Public Sub Marerimy()
Dim lo As ListObject, r As Range, n As Long, nn As Long, i As Long, j As Long

    Set lo = Range("Tableau1").ListObject
    With lo
        If .InsertRowRange Is Nothing Then
            Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set r = .InsertRowRange.Cells(1)
        End If
    End With

    n = r.Row - lo.HeaderRowRange.Row

    With Me.List_Pieces
        For i = 0 To .ListCount - 1
            For j = 0 To 5
                r.Offset(, 6 + j) = Me.List_Pieces.List(i, j)
            Next j
            Set r = r.Offset(1)
        Next i
    End With

    nn = r.Row - lo.HeaderRowRange.Row

    r.Resize(n - nn - 1).Value = CDate(Me.txt_date)

    For i = n To nn
        For Each CTRL In Me.Controls
            If IsNumeric(CTRL.Tag) = True Then
                If CTRL.Tag <> "2" Then
                    lo.ListRows(i).Range.Cells(1, CInt(CTRL.Tag) - 1) = CTRL
                End If
            End If
        Next CTRL
    Next i

End Sub

Bonjour,

Merci à tous pour vos interventions, j'ai enfin pu étudier toutes vos possibilités,

J'ai pu participer à cette conversation sur un autre forum et j'ai eu une très bonne réponse également sans trop toucher à ce que j'ai fait, je me permets de le partager,

Il m'a suffit de remplacer les deux premières lignes de code par cela:

 L = WsCmd.Cells(Rows.Count, 6).End(xlUp).Row
  Do While IsEmpty(WsCmd.Cells(L, 6)): L = L - 1: Loop
  L = L + 1: H = L

Et cela marche parfaitement!

Je mets le sujet en résolu ! encore merci à vous

Rechercher des sujets similaires à "probleme lors ajout multiple produits tableau"