Insertion ligne + formule dans 2 feuilles différentes

Bonjour à tous,

Je suis nouveau sur le forum et je vous expose mon problème.

J'ai deux tableaux dans deux feuilles différentes et chaque tableau possède ses propres formules. Lorsque je clique sur un bouton e souhaite insérer une nouvelle ligne dans le tableau de la feuille 1, en dessous de la cellule ou de la ligne active, tout en gardant la formule du tableau ==> Jusque là tout va bien 8) . Mais je souhaite également insérer une nouvelle ligne, au même endroit, dans le tableau de la feuille 2 (ca je sais faire) mais en copiant la formule du tableau de la feuille 2 ==> Et ca je n'y arrive plus

Je vous mets en PJ un exemple avec le bout de code que j'ai écrit. Je vous l'écris également ci-dessous :

Sub Bouton_Clic()

Application.ScreenUpdating = False 'Désactive l'actualisation de l'écran

Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert 'Insert ligne dans feuille 1 en dessous de la cellule sélectionnée

ActiveCell(1).EntireRow.Copy ActiveCell(2).Resize(1).EntireRow 'Copie la ligne de la cellule active dans la ligne insérée

For Each c In Intersect(ActiveSheet.UsedRange, Selection.Offset(1).EntireRow) 'Supprime le contenu des cellules ne contenant pas de formule

If Left(c.Formula, 1) <> "=" Then c.Value = ""

Next

Sheets(2).Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert 'Insère une ligne au même endroit dans la feuille 2

Application.CutCopyMode = False

End Sub

Merci d'avance pour votre aide et n'hésitez pas à me poser des questions si vous avez besoin de compléments.

74classeur1.xlsm (17.15 Ko)

Bonjour et bienvenue sur le forum

Ajoute ces deux instructions à ton code :

 Sheets(2).Rows(ActiveCell.Row & ":" & ActiveCell.Row).Copy Sheets(2).Cells(ActiveCell.Row + 1, 1)
 Sheets(2).Rows(ActiveCell.Row + 1 & ":" & ActiveCell.Row + 1).SpecialCells(xlCellTypeConstants, 23).ClearContents

et fais le test.

Bye !

Bonjour,

Une proposition avec les données mises sous forme de tableaux.

Cdlt.

Option Explicit

Private Sub cmdDEMO_Click()
Dim lo As ListObject, ACell As Range, lRow As Long

    On Error GoTo err_Handler

    Set ACell = ActiveCell: Set lo = Me.ListObjects(1)

    With lo
        lRow = ACell.Row - .HeaderRowRange.Row + 1
        .ListRows.Add Position:=lRow
    End With

    With Worksheets(2)
        .ListObjects(1).ListRows.Add Position:=lRow
    End With

exit_Handler:
    Set lo = Nothing: Set ACell = Nothing
    Exit Sub
err_Handler:
    MsgBox "Veuillez sélectionner une cellule du tableau.", vbInformation
    Err.Clear
    Resume exit_Handler

End Sub

GMB : Merci pour ton code, ca fonctionne mais par contre lorsque j'insère une première ligne (qui sera donc vide, avec uniquement les formules) et que je veux insérer une seconde ligne à partir de la première que j'ai inséré il me met un message d'erreur : "Erreur exécution '1004' - Pas de Cellule correspondante" et l'erreur provient de la deuxième ligne de code que tu m'as donné. Tu sais comment je peux régler le problème ?

Jean-Eric : Merci bcp également. Ca fonctionne. Par contre je suis un peu nul en VBA, c'est quelle partie du code qui permet de n'insérer des lignes uniquement entre les lignes qu'on sélectionne et de mettre un message d'erreur dans le cas contraire ?

Cdt

Re,

Voir les commentaires.

A te relire.

Cdlt.

Option Explicit

Private Sub cmdDEMO_Click()
' déclaration des variables
Dim lo As ListObject    ' Tableau de la feuille active
Dim ACell As Range      ' Cellule active
Dim lRow As Long        ' numéro de ligne dans le tableau pour insertion

    ' gestion erreur : si le tableau n'existe pas ou
    ' si la cellule sélectionnée n'est pas le tableau
    On Error GoTo err_Handler

    ' initialisation des variables
    ' cellule sélectionnée
    Set ACell = ActiveCell
    ' tableau 1 de la feuille active
    Set lo = Me.ListObjects(1)

    With lo
        ' numero de ligne pour insertion
        lRow = ACell.Row - .HeaderRowRange.Row + 1
        ' insertion ligne (avec les formules)
        .ListRows.Add Position:=lRow
    End With

    With Worksheets(2)
        ' idem précédent dans le tableau 1 de la feuille 2
        .ListObjects(1).ListRows.Add Position:=lRow
    End With

exit_Handler:
    ' on réinitialse les variables
    Set lo = Nothing: Set ACell = Nothing
    Exit Sub
err_Handler:
    ' le tableau n'existe pas ou la cellule sélectionnée n'est pas dans le tableau
    MsgBox "Veuillez sélectionner une cellule du tableau.", vbInformation
    Err.Clear
    Resume exit_Handler

End Sub

Bonjour à tous

DglingO a écrit :

Tu sais comment je peux régler le problème ?

Essaie en ajoutant une instruction de plus :

 Sheets(2).Rows(ActiveCell.Row & ":" & ActiveCell.Row).Copy Sheets(2).Cells(ActiveCell.Row + 1, 1)
 On Error Resume Next
 Sheets(2).Rows(ActiveCell.Row + 1 & ":" & ActiveCell.Row + 1).SpecialCells(xlCellTypeConstants, 23).ClearContents

Bye !

Bonjour à tous les deux,

Merci bcp pour votre aide. Ca marche super bien. Maintenant je vais essayé de faire pareil pour ajouter des colonnes à la fin de ces tableaux sachant que lorsque j'ajoute 3 colonnes au tableau de la feuille 1 je veux ajouter 7 colonnes au tableau de la feuille 2, toujours avec les formules. Je vais d'abord essayé tout seul et si je bloque je posterai nouveau sujet.

Encore merci les gars.

Bonjour à tous et bonne année,

En fait je viens de reprendre mon tableau après les fêtes et j'ai un problème.

La formule sur une ligne du tableau de l'onglet 2 renvoient aux données de la même ligne du tableau de l'onglet 1. Sauf que lorsque j'intègre une nouvelle ligne via la macro dans les deux tableaux, dans le tableau de l'onglet 2 cela me recopie la formule de la ligne du dessus et donc les formules ne sont plus bonnes.

Je vous ai mis un PJ un modèle : Si dans le premier onglet vous sélectionner la ligne sous laquelle vous voulez intégrer la nouvelle ligne (exemple ligne 8) et que vous cliquez sur le bouton : "ajouter une ligne"

=> Cela créer une nouvelle ligne vierge en ligne 9 dans le tableau de l'onglet 1 (Ca me va jusqu'ici)

=> Mais cela duplique une ligne avec sa formule dans le tableau de l'onglet 2 et ca me fout le bazar dans mes formules. Il faudrait que la ligne créée dans l'onglet 2 soit également en ligne 9 et que les formules renvoient aux données de la ligne 9 de l'onglet 1.

Si jamais vous avez une solution je suis preneur. Merci bcp.

34modele-v4.xlsm (37.13 Ko)

Bonjour,

Voir ton fichier et mes modifications.

Je ne sais pas si cela répondra à tes attentes.

Mais si tu veux utiliser les tableaux (Excel 2007+), tu dois respecter certaines règles.

Cdlt.

56modele-v4.xlsm (36.26 Ko)

Nota :

Menu Accueil / Styles de cellules : Peux-tu expliquer leurs nombres?

Bonjour et merci pour ta réponse.

En fait le problème est que dans le fichier xlsm que je vous ai transmis j'ai simplifié les formules mais dans le vrai tableau (cf. nouvelle PJ), j'utilise la fonction DECALER et donc je n'y arrive pas.

J'utilise la fonction DECALER dans le deuxième onglet de tel sorte que lorsque je souhaite ajouter une année, j'ai juste à faire un copier/coller de la précédente et cela pointera directement vers les bonnes valeurs de l'onglet 1.

Je vous mets en PJ mon tableau complet et ce que je souhaite est pouvoir ajouter une ligne en cliquant sur un bouton dans le tableau de l'onglet 1 et que cela ajoute une ligne au même endroit dans le tableau de l'onglet 2 en gardant les formules qui pointe vers la ligne insérer dans l'onglet 1.

Désolé si je n'ai pas été claire dans ma première demande.

65modele-v5.xlsm (43.44 Ko)

Bonjour,

Un petit up car je n'arrive pas à résoudre mon problème. Si quelqu'un pouvait m'aider svp

Merci bcp

Rechercher des sujets similaires à "insertion ligne formule feuilles differentes"