Ajout d'une ligne dans un tableau

Bonjour à tous ...

Je sais que le sujet a déjà été abordé, j'ai pourtant essayé d'adapter au mieux mais je rencontre un problème que je n'arrive pas à résoudre. Je précise que je ne sais pas programmer en vba, je copie, j'adapte , c'est tout ...

Voici mon problème :

Je voudrais insérer une nouvelle ligne de données dans un tableau issu d'un UserForm à la dernière ligne vide de ce tableau.

Jusqu'ici pas de soucis dans le cas ou mon tableau comporte déjà des lignes (Onglet 2018).

Par contre, si mon tableau est vide (Onglet 2019), cela ne fonctionne plus

La nouvelle ligne créée est insérée en dehors du tableau !

J'ai essayé d'adapter ces deux codes en vain :

Dim derlign As Integer

If MsgBox("Confirmer l'ajout des données ?", vbYesNo, "Confirmation") = vbYes Then

Range("A3").Select

Selection.End(xlDown).Select

Selection.Offset(1, 0).Select

Dim derlign As Integer

Dim NumLigne As Integer

If MsgBox("Confirmer l'ajout des données", vbYesNo, "Confirmation") = vbYes Then

derlign = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1

Un peu d'aide serait la bienvenue ou un lien vers un sujet qui pourrait m'aider ...

Bonne journée.

8essai.xlsm (181.45 Ko)

Bonjour,

à tester,

Private Sub BTAjout_Click()
Dim derlign As Integer
    If MsgBox("Es tu sûre de vouloir ajouter ces données ?", vbYesNo, "Confirmation") = vbYes Then
        With ActiveSheet
            '.Unprotect
             rw = .Cells(Rows.Count, "A").End(xlUp).Row + 1  'dernière ligne renseignée de la colonne A + 1
            .Cells(rw, 1).Value = CDate(TBDate)
            .Cells(rw, 2).Value = CBClient
            .Cells(rw, 3).Value = CBType
            .Cells(rw, 4).Value = TBCommande
            .Cells(rw, 5).Value = TBDestinataire
            .Cells(rw, 6).Value = TBVille
            .Cells(rw, 7).Value = CBNiveauDePrep
            .Cells(rw, 8).Value = TBPreparateur
            .Cells(rw, 9).Value = TBEtiqueteur
            .Cells(rw, 10).Value = TBArticle
            .Cells(rw, 12).Value = CLng(TBQuantite)

            .Range("L:L").NumberFormat = "+ #0;- #0"
            .Range("A:A").NumberFormat = "m/d/yyyy"

            '.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:=""
        End With

          'Effacer les cellules du Formulaire
          TBDate = ""
          TBCommande = ""
          TBDestinataire = ""
          TBVille = ""
          TBPreparateur = ""
          TBEtiqueteur = ""
          TBArticle = ""
          TBQuantite = ""
    End If
End Sub

Salut Nouch,

Salut i20100,

dans les formulaires, un des secrets est le nom à donner aux contrôles pour se faciliter la vie... de codeur!

Ici, tes contrôles ayant tous la propriété TEXT, je les ai renommés "Info1", "Info2" ...

Comme tu veux les infos en majuscule, fais-le lors de la copie (UCASE) : pas de code intermédiaire lors de l'encodage!

Ce qui donne :

    iRow = Range("A" & Rows.Count).End(xlUp).Row + 1
    For x = 1 To 12
        If x <> 11 Then
            Cells(iRow, x) = UCase(Me.Controls("Info" & x).Text)
            Me.Controls("Info" & x).Text = ""
        End If
    Next

Plus court même avec la bizarrerie de la désignation...

Je suppose que tu as une BDD reprenant les désignations par code : je n'ai pas vu de formule dans le tableau : ne me dis pas que tu recopies chaque fois manuellement ?

A+

5essai.xlsm (174.02 Ko)

Bonjour,

Une autre proposition à étudier.

Cdlt.

5essai.xlsm (199.43 Ko)
Private Sub BTAjout_Click()
Dim lo As ListObject, Cell As Range
    If MsgBox("Es tu sûre de vouloir ajouter ces données ?", vbYesNo, "Confirmation") = vbYes Then
        'ActiveSheet.Unprotect
        Set lo = Worksheets("2019").ListObjects(1)
        With lo
            If .InsertRowRange Is Nothing Then
                Set Cell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
            Else
                Set Cell = .InsertRowRange.Cells(1)
            End If
        End With
        With Cell
            .Value = CDate(TBDate)
            .Offset(0, 1).Value = CBClient
            .Offset(0, 2).Value = CBType
            .Offset(0, 3).Value = TBCommande
            .Offset(0, 4).Value = TBDestinataire
            .Offset(0, 5).Value = TBVille
            .Offset(0, 6).Value = CBNiveauDePrep
            .Offset(0, 7).Value = TBPreparateur
            .Offset(0, 8).Value = TBEtiqueteur
            .Offset(0, 9).Value = TBArticle
            .Offset(0, 11).Value = CLng(TBQuantite)
        End With
        'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:=""
        'Effacer les cellules du Formulaire
        TBDate = ""
        TBCommande = ""
        TBDestinataire = ""
        TBVille = ""
        TBPreparateur = ""
        TBEtiqueteur = ""
        TBArticle = ""
        TBQuantite = ""
    End If

End Sub

Merci à tous pour vos réponses ...

J'ai bien regardé vos propositions et après essai, il n'y a que la solution de Jean-Eric qui fonctionne !

@Jean-Eric

@i20100

Merci pour ta réactivité, Post à 3:15, réponse à 3:29 mais ta solution ne résout malheureusement pas mon problème

@curulis57

En effet, ta solution de formulaire est bien plus simple et intéressante mais comme j'ai pu le dire, je ne fais que copier et adapter ce que je peux voir sur les forums et tuto ! Concernant mon problème de départ, ta solution ne résout pas non plus mon problème !

Hors-Sujet

Tu peux m'en dire un peu plus ?

"fais-le lors de la copie (UCASE) : pas de code intermédiaire lors de l'encodage"

En tout cas merci à vous ....

Rechercher des sujets similaires à "ajout ligne tableau"