Insérer au début du tableau

Bonjour 🤝
J'utilise une userform pour ajouter des données dans les colonnes de a:k
Je veux toujours ajouter les nouvelles données toujours à la ligne 2 après les en-têtes qui sont dans la ligne 1.
Les autres donnés seront déplacé vers la ligne 3 et ainsi de suite.
Merci d'avance pour votre aide

Bonjour,

Supposons que ton tableau soit un "Tableau structuré" nommé "Tableau2" ...

Ceci insérera une ligne en première place sous les entêtes ...

Range("Tableau2").Cells(1, 1).ListObject.ListRows.Add (2)

Il ne restera qu'à y copier les données provenant du userform ...

ric

Merci je vais essayer

Bonjour,

Je n'avais pas vu que tu avais double-posté et que galopin01 t'avait fait une suggestion ...

https://forum.excel-pratique.com/excel/inserer-au-debut-du-tableau-144757#p889668

ric

J'ai essayé le code

Il insert bien une ligne à la ligne 2 mais lorsque je rajoute des données. Celles qui étaient dans la ligne 2 sont écrasé avec addition d'une ligne vide en ligne 3.

😞

Bonjour,

Est-ce possible d'avoir un bout de fichier avec le code pour tester cela ??

Sinon, est-ce possible d'avoir le code complet de cette macro ??

ric

Bonjour,

Essaie ainsi :

Dim lo As ListObject
    Set lo = Range("Tableau1").ListObject
    If lo.InsertRowRange Is Nothing Then lo.ListRows.Add (1)

Sinon, un complément d'informations serait utile pour la suite.

Comme suggéré par ric (que je salue).

Cdlt.

Voilà le code du bouton ajouter de l'UF

Private Sub Valider_Click()

'contôle des saisies de la date de fabrication
If Dat.Value = "" Then
MsgBox ("Il faut indiquer la date !")
Exit Sub
End If
'controle du compteur
If Compt.Value = "" Then
MsgBox ("Veuillez saisir le nouveau kélomtrage, Merci!")
Exit Sub
End If
'contrôle du prix
If pri.Value = "" Then
MsgBox ("veuillez saisir le prix du litre, Merci !")
Exit Sub
End If
'contrôle de la somme du plein
If Somm.Value = "" Then
MsgBox ("Veuillez saisir la somme paiée, Merci !")
Exit Sub
End If

Range("Tableau2").Cells(1, 1).ListObject.ListRows.Add (2)

Sheets("Carburant").Range("A2").Value = CDate(Dat.Text)
Sheets("Carburant").Range("D2").Value = Compt.Text
Sheets("Carburant").Range("F2").Value = Somm.Text
Sheets("Carburant").Range("I2").Value = pri.Text
Sheets("Carburant").Range("J2").Value = "Bon"
Sheets("Carburant").Range("b2").Value = Range("a2").Value -
Range("A3").Value
Sheets("Carburant").Range("C2").Value = Range("D3").Value
Sheets("Carburant").Range("E2").Value = Range("D2").Value - Range("C2").Value

Unload SaisieAuto

End Sub

Le nouveau code c pareil

Pardon le dernier code fonctionne à merveille

Merci

Bonjour à tous,

Excuse-moi pour l'erreur de ligne ... tu n'avais pas fourni de fichier et j'ai utilisé un tableau que j'avais sous la main ... lequel comporte 2 lignes d'entête ...

Tant qu'à avoir un tableau structuré ... ce code-ci adresse le tableau ... non pas la feuille ...

Private Sub Valider_Click()
Dim lo As ListObject

    'contôle des saisies de la date de fabrication
    If Dat.Value = "" Then
        MsgBox ("Il faut indiquer la date !")
        Exit Sub
    End If
    'controle du compteur
    If Compt.Value = "" Then
        MsgBox ("Veuillez saisir le nouveau kilométrage, Merci!")
        Exit Sub
    End If
    'contrôle du prix
    If pri.Value = "" Then
        MsgBox ("Veuillez saisir le prix au litre, Merci !")
        Exit Sub
    End If
    'contrôle de la somme du plein
    If Somm.Value = "" Then
        MsgBox ("Veuillez saisir la somme payée, Merci !")
        Exit Sub
    End If

    Me.Somm = Replace(Somm, ".", ",")    ' < change le . en , au besoin
    Me.pri = Replace(pri, ".", ",")    ' < change le . en , au besoin

    Set lo = Range("Tableau1").ListObject
    If lo.InsertRowRange Is Nothing Then lo.ListRows.Add (1)

    Range("Tableau1").Cells(1, "A") = CDate(Dat.Text)
    Range("Tableau1").Cells(1, "D") = CLng(Compt)
    Range("Tableau1").Cells(1, "F") = CDbl(Somm)
    Range("Tableau1").Cells(1, "i") = CDbl(pri)
    Range("Tableau1").Cells(1, "J") = "Bon"
    Range("Tableau1").Cells(1, "B") = CDate(Range("Tableau1").Cells(1, "A")) - CDate(Range("Tableau1").Cells(2, "A"))
    Range("Tableau1").Cells(1, "C") = Range("Tableau1").Cells(2, "D")
    Range("Tableau1").Cells(1, "E") = Range("Tableau1").Cells(1, "D") - Range("Tableau1").Cells(1, "C")

    Unload SaisieAuto
End Sub

ric

Bonjour,

Ma vision matinale de la chose.

Pour la restitution des données dans le tableau !...

Cdlt.

Sub XXX()
Dim lo As ListObject, r As Range, bln As Boolean
    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)
            bln = True
        End If
    End With
    With r
        .Value = CDate(Dat.Text)    'A
        .Offset(, 3).Value = CLng(compt)    'C
        .Offset(, 5).Value = CDbl(Somm) 'F
        .Offset(, 8).Value = CDbl(pri)  'I
        .Offset(, 9).Value = "Bon"  'J
        If bln = False Then r.Offset(, 1).Value = r.Value - r.Offset(1).Value   'B
        If bln = False Then r.Offset(, 2).Value = r.Offset(1, 3).Value  'C
        If bln = False Then r.Offset(, 4).Value = CLng(compt) - r.Offset(1, 3).Value    'E
End Sub

Bonjour à tous,

Vision intéressante ...

Mais, ça prend beaucoup de matinales pour en arriver là ...

barbelongue

ric

Le cod de ric fonctionne après modification de 1 par 2.

Le code Jean Éric je n'ai pas pu l'adapter

Merci pour votre aide.

🙏

Rechercher des sujets similaires à "inserer debut tableau"