XL 2019 Pb enregistrement sur derniere ligne de tableau

Did25

XLDnaute Occasionnel
Bonjour je suis actuellement sur un problème d'enregistrement de données sur des tableaux ,tout fonctionne très bien sauf l'enregistrement des données sur la dernière ligne vide de mes tableaux ,je ne trouve pas la solution à mon problème ,voici mon code VBA ,merci de bien vouloir me donner la solution

'Procédure validation données

Private Sub cmdbajouter_click()

Dim nbcontrole As Integer
Dim NouvelleLigne As Range
Dim MaFeuille As String

'on récupère le nom de la feuille du menu déroulant
MaFeuille = CboNomFeuille.Value
'on test si la feuille est bien valide
If Me.CboNomFeuille.Value = "" Then

MsgBox "Veuillez sélectionner un cycle de 5 semaines ", vbOKOnly + vbInformation, "Validation"
Exit Sub

End If
'on récupère le nombre de controle dans le usf
nbcontrole = 6
'on se positionne sur la derniere ligne de la table de donnée
Set NouvelleLigne = Sheets(MaFeuille).Cells(Rows.Count, 2).End(xlUp).Offset(1, 1)

For x = 1 To nbcontrole
NouvelleLigne = Me.Controls("Cont" & x).Value
'Me.Cont1.value = format(Me.Cont1.value,"jj/mm/aaaa")
Set NouvelleLigne = NouvelleLigne.Offset(0, 1)
Next x
'on réinitialise les champs du formulaire à vide

For x = 1 To nbcontrole
Me.Controls("Cont" & x).Value = ""
Next x

CboNomFeuille.Value = ""
'on affiche un message de validation de saisie
MsgBox "La validation a bien été envoyé sur la feuille : " & MaFeuille, vbOKOnly + vbInformation, "Validation"


End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Didier, bonjour le forum,

Peut-être comme ça :

VB:
Private Sub cmdbajouter_click()
Dim nbcontrole As Integer 'inutile. ce n'est pas une variable mais une constante écrite en dur !...
Dim NouvelleLigne As Range
Dim MaFeuille As String

If Me.CboNomFeuille.Value = "" Then
    MsgBox "Veuillez sélectionner un cycle de 5 semaines ", vbOKOnly + vbInformation, "Validation"
    Exit Sub
End If

MaFeuille = CboNomFeuille.Value

'on se positionne sur la derniere ligne de la table de donnée
Set NouvelleLigne = Worksheets(MaFeuille).Cells(Rows.Count, 2).End(xlUp).Offset(1, 1)

For x = 1 To 6
    NouvelleLigne.Offset(0, x - 1).Value = Me.Controls("Cont" & x).Value
    'Me.Cont1.value = format(Me.Cont1.value,"jj/mm/aaaa")
Next x

'on réinitialise les champs du formulaire à vide
For x = 1 To 6
Me.Controls("Cont" & x).Value = ""
Next x

CboNomFeuille.Value = ""
'on affiche un message de validation de saisie
MsgBox "La validation a bien été envoyé sur la feuille : " & MaFeuille, vbOKOnly + vbInformation, "Validation"
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Ton problème était de prendre la colonne 2 pour définir la cellule NouvelleLigne. Avec un tableau structuré on est obligé de partir d'en haut pour avoir la première cellule vide sinon on utilise la dernière ligne du tableau. Remplace ton code par :

VB:
Private Sub UserForm_Initialize()
Dim feuille As Worksheet

For Each feuille In Worksheets
Select Case feuille.CodeName 'codename etant le nom de la feuille
    Case "Feuil1", "Feuil2", "Feuil4", "Feuil5", "Feuil6", "Feuil7", "Feuil8"
    Case Else
        Me.CboNomFeuille.AddItem feuille.Name
    End Select
Next feuille
End Sub

Private Sub cmdbquitter_click()
Unload Me
End Sub

Private Sub cmdbajouter_click()
Dim LI As Integer
Dim OD As Worksheet

If Me.CboNomFeuille.Value = "" Then
    MsgBox "Veuillez sélectionner un cycle de 5 semaines ", vbOKOnly + vbInformation, "Validation"
    CboNomFeuille.SetFocus
    Exit Sub
End If
Set OD = Worksheets(CboNomFeuille.Value)
If OD.Range("C2").Value = "" Then
    LI = 2
Else
    OD.ListObjects(1).ListRows.Add
    LI = OD.Range("C1").End(xlDown).Row + 1
End If
For x = 1 To 6
    OD.Cells(LI, x + 2).Value = Me.Controls("Cont" & x).Value
    Me.Controls("Cont" & x).Value = ""
Next x
CboNomFeuille.Value = ""
MsgBox "La validation a bien été envoyé sur la feuille : " & MaFeuille, vbOKOnly + vbInformation, "Validation"
End Sub
 

Discussions similaires

Réponses
3
Affichages
715

Statistiques des forums

Discussions
314 656
Messages
2 111 606
Membres
111 218
dernier inscrit
Jean-Kev