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.
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.
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.
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.
Bonjour,
Un petit up car je n'arrive pas à résoudre mon problème. Si quelqu'un pouvait m'aider svp
Merci bcp