Macro pour insérer des lignes dans un tableau
Bonjour à tous,
J'aimerais créer des lignes de code VBA afin de copier une ligne, par exemple la ligne 3 indiqué "2", puis la réinsérer juste en dessous. On aurait alors 14 lignes au lieu de 13. Je veux donc copier et non insérer car je veux une ligne qui contiennt les mêmes formules que celles qui l'entourent.
Pour cela j'ai mis ce code:
Sub AjouterNouvelleLigne()
' Spécifiez le numéro de la ligne à ajouter
Dim ligneAInserer As Integer
ligneAInserer = 3
Rows(ligneAInserer & ":" & ligneAInserer).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows(ligneAInserer - 1).Copy Destination:=Rows(ligneAInserer)
AjusterFormules ligneAInserer
End Sub
Sub AjusterFormules(ligne As Integer)
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
' Boucle à travers chaque cellule dans la ligne spécifiée
Dim cell As Range
For Each cell In ws.Rows(ligne).Cells
' Vérifie si la cellule contient une formule
If cell.HasFormula Then
' Ajuste la formule en remplaçant le numéro de ligne dans les références de cellules
cell.Formula = Replace(cell.Formula, ligne - 1, ligne)
End If
Next cell
End SubMais le soucis c'est que je veux aussi lorsque j'insère une ligne dans le tableau du dessus, insérer une ligne dans le tableau du dessous, au même endroit, c'est a dire au niveau de la ligne indiqué "2", mon soucis c'est que je ne sais pas comment indiqué que je veux copier cette ligne puisque si j'insére plusieurs ligne au dessus on ne sera plus à la ligne 23 mais peut être à 26...
Pour le code du dessus, j'indique la ligne 6 mais pour le 2ème tableau je ne peux donc pas indiquer une ligne qui risque de changer à chaque fois que j'ajoute une ligne dans le 1er tableau.
Donc comment faire ?
Merci à vous,
Mswin
EDIT modo : merci d'utiliser les balises de code disponibles dans le menu en cliquant sur l'icone </> . Faites attention la prochaine fois
Bonjour
Ton problème serait facilement réglé en utilisant les tableaux structurés (avantage les formules sont copié automatiquement)
Mais comme je ne comprend pas ce que tu veux exactement.... et que ton fichier nous aide en rien...
ci joint ma solution pour le 1er tableau
A+ François
Bonjour,
Merci d'ajouter votre version excel (2016, 2019, MAC2011, MAC2016...) dans la profil de votre compte. C'est plus facile pour celui qui vous répond.
Pour votre fichier, j'aurais plutôt placer le tableau du dessous à droite en colonne S
Après colonne A, vous mettez cette formule en A --> = ligne()
Formule à recopier vers le bas
En colonne S, vous mettez -->[s=co-1f497d][/s]= A2
Puis recopie vers le bas.
Après si ok le code devient plus simple à réaliser.
L'avantage est que vous suivez les deux tableaux sur chaque ligne
Sinon solution telle que proposée par Fanfan38
Cordialement
Au temps pour moi !
La version d'excel utilisé est la dernière version Microsoft 365 Apps sur pc.
Merci pour vos réponses, je ne peux malheureusement pas placer le tableau B à droite du A...
Sinon fanfan, ce que je voulais c'est de cliquer sur un bouton et que ça ajoute une ligne sur le tableau A (exactement ce que vous avez fait) mais qu'en même temps la même ligne sur le tableau B se copie. (Exemple: dans le fichier que vous m'avez transmis il y a la ligne 5 de copier dans le tableau A je voudrais que la ligne 5 du tableau B se copie en même temps).
Mon gros soucis et que je ne peux pas indiquer quelle ligne copier pour le tableau B car, comme il est en dessous du A ou l'on rajoute des lignes, la ligne à copier change constamment...
J'espère que c'est plus clair
Encore merci
Re
La version d'excel utilisé est la dernière version Microsoft 365 Apps sur pc.
Ok mais ce n'est pas sur un fil de discussion qu'il faut le renseigner mais, comme écrit, dans le profil de votre compte
Sans quoi on va vous reposer la même question une autre fois.
Merci pour vos réponses, je ne peux malheureusement pas placer le tableau B à droite du A...
OK. C'est Fanfan qui vous suit, donc je lui laisse le soin de finaliser. Sinon dans ce qu'il vous a proposé et la Sub AjouterNouvelleLigne(), remplacez ligneAInserer = 3 par ligneAInserer = =Activecell.row
Pensez à cloturer vos fil une fois terminés
Crdlt
Salut Dan
Ma macro c'est copie, l'autre c'était sa macro...
A+ François et merci