Ajout de lignes les une après les autres VBA

Bonjour a tous, je suis nouveau sur ce forum et débutant en VBA.

Avant tous je sais qu'il existe des topics similaires à mon probleme mais je n'arrive pas à les adapter (je suis une bille en VBA) Je vous colle ci-joint le topic qui me semble le plus approprier : https://forum.excel-pratique.com/excel/inserer-ligne-a-le-suite-d-un-tableau-t37396.html

Voici mon probleme, j'ai crée un bouton auquel j'ai affecter une macro qui va copier/coller mon première onglet puis insérer une ligne dans l'onglet consolidation budget avec des liens entre tous ces onglets (qui ne fonctionne plus car j'ai dus supprimer pas mal de paramètre afin d’alléger mon fichier.)

Jusqu'ici tous va bien...

Mais des lors que je clique plusieurs fois sur mon bouton excel colle la ligne en plein milieu et non pas à la fin de mon tableau. Je souhaiterais que tte les nvlles lignes s'ajoute à la suite.

Je sait que mon probleme vient de cet endrois mais je ne sait pas comment le régler :

Sheets("Consolidation Budget à cloture").Select

Rows("7:7").Select

Selection.Copy

Rows("8:8").Select

Selection.Insert Shift:=xlDown

Range("B8").Select

Application.CutCopyMode = False

ActiveCell.FormulaR1C1 = 23

Merci d'avance pour votre aide.

Bonjour Axxel, bonjour le forum,

Remplace le bout de code par (non testé) :

Dim DL As Integer

DL = Cells(Application.Rows.Count,1).End(xlUp).Row
Rows(DL).Copy
Rows(DL + 1).Insert Shift:=xlDown
Cells(DL+1, 2).Value=23

Merci ThauThème

Malheureusement cela ne fonctionne pas.

Bonjour Axxel, bonjour le forum,

Il éviter autant que tu le peux les Select qui ne font que ralentir l'exécution du code... Essaie comme ça :

Sub Nvxonglet()
Dim DL As Integer

Worksheets(1).Copy Before:=ActiveSheet
NewSheet = Format(Now, "yymmdd_hhmmss")
ActiveSheet.Name = NewSheet
Range("A14:E32").ClearContents
Range("H14:CD32").ClearContents
Range("CC14:CD32").ClearContents
With Sheets("Consolidation Budget à cloture")
    DL = .Cells(Application.Rows.Count, 2).End(xlUp).Row
    .Rows(DL).Copy
    .Rows(DL + 1).Insert Shift:=xlUp
    .Cells(DL + 1, 2).Value = 23
    .Cells(DL + 1, 3).FormulaR1C1 = "=" & NewSheet & "!R11C83"
    .Cells(DL + 1, 4).FormulaR1C1 = "=" & NewSheet & "!R11C93"
    .Cells(DL + 1, 5).FormulaR1C1 = "=" & NewSheet & "!R11C85"
    .Cells(DL + 1, 6).FormulaR1C1 = "=" & NewSheet & "!R11C89"
    .Cells(DL + 1, 7).FormulaR1C1 = "=" & NewSheet & "!R11C96-" & NewSheet & "!R13C96"
    .Cells(DL + 1, 8).FormulaR1C1 = "=" & NewSheet & "!R13C96"
    Cells(DL + 1, 11).Select
End Sub

Je vient d'essayer ta macro ont ce rapproche de ce que je veut mais tous est décaler et je ne comprend pas comment fonctionne le DL et a quoi cela sert !

Une chose qui me parais bizarre aussi c'est que normalement si je change juste "Shift:=xlDown" en "Shift:=xlUp" il devrais me faire apparaitre la ligne en dessous non ?

Bonjour Axxel, bonjour le forum,

La variable DL sert à définir la dernière ligne éditée de la colonne B de l'onglet Consolidation Budget à cloture

Le code modifié et testé (mais comme je ne sais pas exactement ce que tu veux...) :

Sub Nvxonglet()
Dim DL As Integer

Worksheets(1).Copy Before:=ActiveSheet
NewSheet = Format(Now, "yymmdd_hhmmss")
ActiveSheet.Name = NewSheet
Range("A14:E32").ClearContents
Range("H14:CD32").ClearContents
Range("CC14:CD32").ClearContents
With Sheets("Consolidation Budget à cloture")
    DL = .Cells(Application.Rows.Count, 2).End(xlUp).Row
    .Rows(DL).Copy
    .Rows(DL + 1).Insert Shift:=xlUp
    .Cells(DL + 1, 2).Value = 23
    .Cells(DL + 1, 3).FormulaR1C1 = "=" & NewSheet & "!R11C83"
    .Cells(DL + 1, 4).FormulaR1C1 = "=" & NewSheet & "!R11C93"
    .Cells(DL + 1, 5).FormulaR1C1 = "=" & NewSheet & "!R11C85"
    .Cells(DL + 1, 6).FormulaR1C1 = "=" & NewSheet & "!R11C89"
    .Cells(DL + 1, 7).FormulaR1C1 = "=" & NewSheet & "!R11C96-" & NewSheet & "!R13C96"
    .Cells(DL + 1, 8).FormulaR1C1 = "=" & NewSheet & "!R13C96"
    .Select
    .Cells(DL + 1, 11).Select
End With
Application.CutCopyMode = xlCopy
End Sub

IMPECCABLE !!! tous marche comme je veut merci beaucoup.

J'ai une dernière question, est il possible de renommer automatiquement la cellule ou apparait le nombre "23" en fonction du nom de l'onglet comme avec cette formule "=STXT(CELLULE("filename";'Lot 1 détail des taches'!A1);TROUVE("]";CELLULE("filename";'Lot 1 détail des taches'!A1))+1;32)".

Je ne sait pas si je me suis fait comprendre

Bonjour Axxel, bonjour le forum,

Content que ça fonctionne enfin... Sinon, je suis bien trop nul en formules pour pouvoir te répondre. Si tu m'expliques ce que fait la formule, je pourrais peut-être te coder ça en VBA...

Alors pour ne rien te cacher je suis aller la récupérer sur un topic et je ne comprend pas vraiment non plus son fonctionnement, je me suis contenté de la coller dans mon fichier...

En tous cas je te remercie grandement pour le coup de main !!

Bonjour le forum,

Je me permet de revenir sur ce topic car je voudrais rajouter une macro pour sommer des cellules d'une feuille vers une autre feuille. Lorsque j'enregistre une macro voici la formule :

ActiveCell.FormulaR1C1 = "=SUM('Lot 1 détail des taches'!R[3]C[76]:R[28]C[79])"

Malheureusement je n'arrive pas l'intégrer dans la macro que Thauthème a écrite

Pouvez vous m'aider ?

Cordialement

Axxel

Rechercher des sujets similaires à "ajout lignes vba"