Ajouter une ligne en bas de tableaux

Bonjour à tous,

Etant débutant, je bloque sur un code VBA.

Dans une feuille, j'ai 3 tableaux :

Tableau 1 : de B3 à C23

Tableau 2 : de B25 à C45

Tableau 3 : de B47 à C67

J'aimerai créer 3 boutons, 1 par tableau.

J'aimerai que le bouton 1 permet de copier la dernière ligne (donc la n°23) et de la coller sur la ligne n°23. L'ex ligne n°23 descend donc en ligne n°24.

Pour les boutons 2 et 3, j'aimerai le même principe mais avec les tableau 2 et 3.

J'ai commencé à faire un code mais cela me copie l'avant dernière ligne du tableau 3. JE joins mon fichier.

Merci d'avance,

Cardi

4cardi.xlsm (21.43 Ko)

Bonjour

Pour le bouton1 :

Sub Copier_Coller1()

Range("B3:C3").Copy
Range("B24").PasteSpecial

End Sub

Idem pour les autres bouton, à adapté bien évidement

Merci mais il faut rechercher à chaque fois la dernière ligne du tableau car si on clique par exemple 5 fois sur le bouton, cela doit copier et ajouter 5 lignes.

Ah ok, ce que tu veux quand tu clic sur le bouton

  • Insérer une ligne sous le tableau
  • Copier les données de la dernière ligne du tableau
  • Coller la ligne sur la ligne insérée

C'est ça ?

De plus, ça serais bcp plus simple si tes 3 tableaux pouvais être l'un à coté de l'autre au lieux de l'un en dessous de l'autre...

Oui c'est cela sauf que je veux insérer la nouvelle ligne non pas sous le tableau mais juste au-dessus de la dernière ligne.

Pour les tableaux l'un en dessous des autres, ce n'est pas possible dans mon cas

ok alors voilà ce que j'ai fait :

  • J'ai déplacé ton tableau d'une colonne à droite
  • A gauche de la dernière cellule tu tableau1 j'ai mis un marqueurs (du texte qui me sert de référence)
  • Je masque la colonne B
  • Je récupère le numéro de la ligne ou est présent le marqueurs
  • J’insère une ligne au dessus de la ligne ou se trouve le marqueurs
  • Je remet la dernière valeur tu tableau sur la ligne précédemment créer
6cardi.xlsm (20.14 Ko)

Très bonne idée, cela fonctionne parfaitement, merci !

Après il te reste juste à mettre un marqueur différents pour chaque tableau, faire un copier coller du code en l'adaptent au marqueur. Ca fonctionne mais apr_s je suis pas très fane, si jamais par mégarde la ligne avec le marqueur est supprimée le code ne fonctionnera plus :/

Ca marche parfait, par contre mon tableau réelle ne fait pas juste 2 colonnes mais 20 colonnes.

J'ai bien modifié "D" par la colonne "T"

Cela donne : Range("A" & a & ":T" & a).Insert Shift:=xlDown

Mais quand je lance la macro, cela ajoute bien la ligne mais cela copie seulement jusqu'à la colonne D.

Que faut-il modifier?

J'ai trouvé comment faire mais cela ne doit pas être optimal

Sub Ligne()
a = Cells.Find("Tbl(1)", , xlValues).Row
Range("A" & a & ":T" & a).Insert Shift:=xlDown
Cells(a, 4) = Cells(a + 1, 4)
Cells(a, 5) = Cells(a + 1, 5)
Cells(a, 8) = Cells(a + 1, 8)
Cells(a, 9) = Cells(a + 1, 9)
Cells(a, 12) = Cells(a + 1, 12)
Cells(a, 13) = Cells(a + 1, 13)
Cells(a, 14) = Cells(a + 1, 14)
Cells(a, 15) = Cells(a + 1, 15)
Cells(a, 19) = Cells(a + 1, 19)
Cells(a, 20) = Cells(a + 1, 20)
End Sub

Par contre, cela copie des valeurs et non les formules. J'aimerai copier les formules sur la ligne insérée, c'est possible?

Bon, tout le monde va être contant J'ai trouvé une solution plus sur et ça marche avec un nombre de colonne infini !

Ce que j'ai fait :

  • Je sélectionne la plage de cellule contenant le premier tableau (B3:C23)
  • Je renomme cette plage en la nommant "Tableau1"
  • Et j'utilise le petit code que je t'ai concocté ci-dessous
(Ce qui veux dire que tu n'as plus besoins de marqueurs comme dans ma première solution)
Sub Macro1()
NbLig = [Tableau1].Rows.Count
NbCol = [Tableau1].Columns.Count

[Tableau1].Rows(NbLig + 1).Insert

For i = 1 To NbCol
[Tableau1].Item(NbLig + 1, i) = [Tableau1].Item(NbLig + 2, i)
Next i
End Sub
4cardiv2.xlsm (17.82 Ko)

Attention légère modif pour le code !

Sub Macro1()
NbLig = [Tableau1].Rows.Count
NbCol = [Tableau1].Columns.Count

[Tableau1].Rows(NbLig).Insert

For i = 1 To NbCol
[Tableau1].Item(NbLig, i) = [Tableau1].Item(NbLig + 1, i)
Next i
End Sub

Cela marche parfaitement merci, par contre cela copie des valeurs et non les formules. J'aimerai copier les formules sur la ligne insérée, c'est possible?

Je n'ai plus mon pc avec moi, je te rep demain matin

Bonjour

Alors voilà, tu peux utiliser ce code, le seul "problème" c'est qu'il ne marche pas si il y a des cellules fusionnées... Donc dans notre exemple pour que ça fonctionne j'ai retiré la fusion des cellule de la colonne B.

Sub Macro1()

NbLig = [Tableau1].Rows.Count

[Tableau1].Rows(NbLig).Copy
[Tableau1].Rows(NbLig).Insert Shift:=xlDown

End Sub

Ou une autre solution qui revient au même

3cardiv3.xlsm (23.93 Ko)

Super, merci beaucoup, j'ai opté pour la 1ere solution !

Rechercher des sujets similaires à "ajouter ligne bas tableaux"