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
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
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.
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