Ajouter ligne automatiquement à la fin du tableau

Bonjour le forum,

Existe t-il un code permettant d'ajouter une ligne automatiquement à la fin d'un tableau lorsque celui-ci est complet ?

J'ajoute mes données dans le tableau à l'aide d'un formulaire, il faudrait donc que la ligne s'ajoute lorsque je clique sur "valider".

Le fichier joint étant un exemple que j'ai créé (car je ne peux pas joindre le fichier original, fichier interne) il faudrait dans l'idéal que les formules se copient. Les formules sans le contenu donc.

Merci par avance des pistes que vous pourrez m'apporter,

Cordialement,

SV

243classeur1.xlsm (20.80 Ko)

bonjour Steven-1947

voici un code qui fonctionne a adapter sur ton classeuur que je n'ai pas ouvert

Private Sub CommandButton1_Click()

Dim derlign As Long
    derlign = IIf([A1] = "", 1, [A65536].End(xlUp).Row + 1)
    Range("A" & derlign) = TextBox1
    Range("B" & derlign) = TextBox4
    Range("C" & derlign) = TextBox3
    Range("D" & derlign) = TextBox2
    'ETC...............................................

End Sub

je n'ai vu aucune formules dans l'exemple

bonjour steven-1947

après avoir ouvert ton fichier

voici le code a mettre dans le code du bouton pour remplacer l'autre afin que les bordures suivent l'ajout de ligne

Private Sub CommandButton1_Click()

Dim derlign As Long
    derlign = IIf([A1] = "", 1, [A65536].End(xlUp).Row + 1)
If Me.TextBox1.Value = "" Then
  MsgBox "Entrer une valeur,svp"
  Exit Sub
  End If
With Sheets("feuil1")
    .Range("A" & derlign) = TextBox1
    .Range("B" & derlign) = TextBox4
    .Range("C" & derlign) = TextBox3
    .Range("D" & derlign) = TextBox2
    'formatage tableau
    .Range("A" & derlign).Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeTop).LineStyle = xlNone
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlInsideVertical).LineStyle = xlContinuous
    .Range(("A" & derlign), ("D" & derlign)).VerticalAlignment = xlCenter
    'bordure de lignes en gras
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeRight).Weight = xlThick
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlInsideVertical).Weight = xlThick
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeBottom).Weight = xlThick
    .Range(("A" & derlign), ("D" & derlign)).Borders(xlEdgeLeft).Weight = xlThick
   Call effacetextbox

End With
End Sub

Sub effacetextbox()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
End Sub

et je t'ai rajouter un effacement des textbox après l'appui sur le bouton

Bonjour,

1) Nommer ton tableau (en dynamique...)

2) Renuméroter (au moins, à défaut de les renommer complètement) tes TextBox dans l'ordre.

3) Réajuster l'ordre de tabulation, de façon qu'ils se suivent lors de la saisie, en tabulant.

4) Réécrire la procédure :

  • en utilisant le nom du tableau,
  • en insérant une ligne en fin (qui en conservera la mise en forme)
  • en utilisant une boucle pour affecter les valeurs des TextBox (à la place d'énumérations indigestes...)
  • et si ce n'est pas trop demander ! indenter correctement le code.
Private Sub CommandButton1_Click()
    Dim dl%, i%
    With [Tablo]
        dl = .Rows.Count + 1
        .Rows(dl).Insert
        For i = 1 To 4
            .Cells(dl, i) = Controls("TextBox" & i).Value
        Next i
    End With
End Sub

bonjour à tous

pourquoi du VBA dans une base de données Excel ?

menu Accueil, "mettre sous forme de tableau". C'est tout.

on peut utiliser menu Données "formulaire" si nécessaire.

MFerrand a écrit :

Bonjour,

1) Nommer ton tableau (en dynamique...)

2) Renuméroter (au moins, à défaut de les renommer complètement) tes TextBox dans l'ordre.

3) Réajuster l'ordre de tabulation, de façon qu'ils se suivent lors de la saisie, en tabulant.

4) Réécrire la procédure :

  • en utilisant le nom du tableau,
  • en insérant une ligne en fin (qui en conservera la mise en forme)
  • en utilisant une boucle pour affecter les valeurs des TextBox (à la place d'énumérations indigestes...)
  • et si ce n'est pas trop demander ! indenter correctement le code.
Private Sub CommandButton1_Click()
    Dim dl%, i%
    With [Tablo]
        dl = .Rows.Count + 1
        .Rows(dl).Insert
        For i = 1 To 4
            .Cells(dl, i) = Controls("TextBox" & i).Value
        Next i
    End With
End Sub

bonsoir MFerrand

waouh ca c'est un réduction de code

Bonjour à vous et merci pour vos solutions.

Grisan29, en effet il n'y a aucunes formules dans le documents que j'ai joint. Je l'ai fabriqué en quelques minutes pour montrer ce que je souhaitais et je pensais adapter le code à mon "vrai fichier", qui lui comporte des formules.

Un grand merci pour ton aide.

Mferrand merci également pour ta réponse très complète. Ces conseils me serviront à l'avenir.

Et oui c'est une belle réduction de code

Jmd, comme dit précédemment c'est un "fichier test" que j'ai fait pour illustrer ma demande, mon fichier interne sur lequel je compte adapter les codes, est plus complexe et nécessite du VBA.

Un grand merci à vous tous, je vais mettre les mains dans le cambouis pour tester tout ça

SV

Bonjour,

Une autre solution avec la mise sous forme de tableau (Excel 2007+).

Cdlt.

342classeur1.xlsm (27.63 Ko)
Private Sub CommandButton1_Click()
Dim LR As ListRow
    With Worksheets(1).ListObjects(1)
        Set LR = .ListRows.Add
        With LR.Range
            .Cells(1, 1) = TextBox1
            .Cells(1, 2) = TextBox4
            .Cells(1, 3) = TextBox3
            .Cells(1, 4) = TextBox2
        End With
    End With
    Set LR = Nothing
End Sub
Rechercher des sujets similaires à "ajouter ligne automatiquement fin tableau"