Insertion de lignes à la fin de plusieurs tableaux

12test-macro.xlsm (35.27 Ko)

Bonjour,

Je me permets de vous contacter car je travaille actuellement sur l’élaboration d’un document ayant pour but de recueillir des informations auprès de plusieurs partenaires. Je souhaiterai laisser la possibilité aux utilisateurs du fichier de créer une ou plusieurs lignes à la fin du ou des tableaux en cliquant sur l’icône « + ». Etant débutant en ce qui concerne le langage de programmation VBA, j’ai tout d’abord tenté de rédiger mon code avec l’enregistreur de macro, puis en « farfouillant » sur plusieurs forums sans parvenir au résultat attendu, c’est pourquoi je sollicite votre aide. Je souhaiterais que chacune des lignes créées se situent à la fin du/des tableaux, en conservant la mise en forme, ainsi que les calculs, tout en permettant à l’utilisateur de saisir dans les cellules « jaunes » le reste sera protégé.

Vous trouverez ci-dessous, le code que j'ai affecté au premier icône mais celui-ci ne répond pas à mes attentes dans la mesure où la ligne se crée dans le troisième (et non sur le premier) tableau, à l'avant dernière ligne (et non à la dernière) et ne conserve pas les calculs de la colonne H.

Sub InsertLigne1()
Range("C" & Rows.Count).End(xlUp).Select
ActiveCell.EntireRow.Insert

End Sub

Je vous remercie par avance pour votre aide.

Bonjour, comme vous le constaterez vous même avec le code que vous utilisez :

Vous testez pour trouver le dernier numéro de ligne utilisé : Range("C" & Rows.Count).End(xlUp).Select

Ensuite l'insertion reste faisable ( en dupliquant la ligne précédente pour garder les formules)

Le problème reste que si celà est faisable pour "Autres services Extérieurs" cette méthode ne peut pas fonctionner pour les autres catégories.

Excel ne peut pas deviner à quel endroit se termine Achats ou à quel endroit se termine Services Extérieurs.

ou alors il faut stocker cachés sur la feuille le numéro de chaque dernière ligne et dans la macor intertion penser à rajouter +1 à ces numéro. ?

10test-errd.zip (214.39 Ko)

Tout d'abord merci pour votre réponse.

Je suis d'accord avec vous. N'est-il pas possible d'affecter une macro pour chacun des 3 icônes, qui identifierait la dernière ligne du tableau correspondant ?

Je vous joins le fichier sur lequel je me suis inspiré de l'idée et qui illustre parfaitement ma demande. Malheureusement, le code ne semble pas dispo.

Rebonjour, il me semble que le plus simple est de stocker les numeros de dernières lignes de chaque tableau :

Voir exemple en retour cellule A1 A2 A3 ( pour le rendu final la couleur de la police peut être en blanc pour ne pas voir les chiffres )

Ainsi trois macros différentes avec modification des numéros de dernières lignes.

18test-macro.xlsm (35.79 Ko)

Rebonjour,

Une nouvelle fois je te remercie pour ton aide. Ton idée de déterminer les dernières lignes de chacun des tableaux via les A1, A2 et A3 permet en effet de solutionner mon problème. Toutefois, les lignes ne s'insèrent pas à la dernière ligne du tableau mais à l'avant dernière et dans la colonne "H", elles copient la formule de calcul de la ligne suivante (voir photo ci-dessous). Par ailleurs, je souhaiterais que la macro puisse être effectuée lorsque la feuille est protégée. J'ai tenté d'ajouter deux lignes de code à la première macro sans succès.. Le Mdp est : TEST

Encore merci !!

16test-macro.xlsm (36.96 Ko)
Sub InsertLigneachats()
ActiveSheet.Unprotect
numligneachat = Range("A1").Value
numligneservice = Range("A2").Value
numligneautres = Range("A3").Value

Range("A" & numligneachat).Select
ActiveCell.EntireRow.Insert
Range("A1").Value = numligneachat + 1
Range("A2").Value = numligneservice + 1
Range("A3").Value = numligneautres + 1
ActiveSheet.Protect
End Sub
test macro

Pour information, j'ai tenté de changer les valeurs initiales des cellules A1, A2 et A3 en 6,11 et 16. Les lignes insérées se créent bien à la fin du tableau mais je perds la mise en forme initiale et la formule de calcul à la colonne H ne se reporte pas et la somme du "TOTAL GROUPE 1" ne prend pas en compte les dernières lignes..

test2

Oops j'ai oublier de décaler le resultat.

Je vous remercie pour le code de verrouillage. Je me permets de revenir vers vous car si j'insère une ligne dans le tableau celle-ci va se créer en ligne 5, soit à l'avant dernière ligne du tableau. N'est-il pas possible que celle-ci se créée à la dernière ligne du tableau, soit à la ligne 6 de la capture d'écran ? Par ailleurs, la ligne créée (ligne 5) reprend la formule de calcul (colonne H) de la ligne 6 "=somme(E6:G6)", or je souhaiterais que la formule soit, "=somme(E5:G5)". Idem pour les deux autres macros. Est-ce envisageable ? Encore merci à vous.

test2

Bonjour

Je me base sur la recherche des titres puis de la couleur des cellules dans le tableau sans regarder si les lignes sont vides, j'espère que je la conserve

Sub InsertRowswithSpecificValue(sheetName, col, val)
Dim rg As Range
Dim sh As Worksheet
Dim ligne, couleur, couleur_prec
Set sh = Worksheets(sheetName)
sh.Unprotect
Set rg = sh.Range("C:C")
ligne = rg.Find(What:=val, After:=rg.Cells(rg.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Set rg = sh.Range("C" & CLng(Mid(ligne, len(col)+1)) + 1)
couleur = rg.Interior.Color
couleur_prec = couleur
ligne = CInt(Mid(ligne, len(col)+1)) + 1
While couleur = couleur_prec
ligne = ligne + 1
Set rg = sh.Range("C" & ligne + 1)
couleur = rg.Interior.Color
Wend
Set rg = sh.Range(CStr(ligne + 1) & ":" & CStr(ligne + 1))
rg.EntireRow.Insert
sh.Protect
End Sub

Sub InsertLigneachats()
Call InsertRowswithSpecificValue("M22_surcoûts_compensations", "C", "ACHATS")
End Sub

Sub InsertLigneservices()
Call InsertRowswithSpecificValue("M22_surcoûts_compensations", "C", "SERVICES EXTERIEURS")
End Sub

Sub InsertLigneautres()
Call InsertRowswithSpecificValue("M22_surcoûts_compensations", "C", "AUTRES SERVICES EXTERIEURS")
End Sub

Vu avec la correction de la formule addition de ligne.

Bonjour Scraper. sympa l'approche par le titre

Bonjour Scraper ! Tout d'abord je te remercie de t'être penché sur le sujet.

Après avoir testé ta macro, je confirme que celle-ci permet bien d'insérer la ligne à la fin de chacun des tableaux. Cela fonctionne très bien sur les deux premiers tableaux mais pas sur le troisième. Cependant, l'insertion de la ligne ne permet pas de conserver la mise en forme initiale du tableau et le calcul de la colonne "H" n'est pas reporté. En effet, je souhaiterais que sur toutes les lignes créées, à la colonne "H" la formule =somme(...:...) se reporte automatiquement.

Exemple sur la capture ci-dessous: à la ligne 6 qui a été créée, je souhaiterais que la cellule H6 comporte la formule "=somme(E6:G6)" et que cette nouvelle ligne puisse être prise en compte dans le calcul "TOTAL GROUPE 1" à la ligne 19. Idem pour les autres lignes qui seront créées. Cela vous semble-t-il envisageable ?

En vous remerciant par avance.

test3

L'intertion ligne avec formule est corrigée dans mon précédent post.

A tester normalement c'est bon.

MAGNIFIQUE !!! Un énorme merci à vous pour le temps consacré !!!

Rechercher des sujets similaires à "insertion lignes fin tableaux"