Microsoft 365 Code VBA pour insérer/Supprimer ligne dans un Tableau

  • Initiateur de la discussion Initiateur de la discussion djkev76
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

djkev76

XLDnaute Nouveau
Bonjour à tous,

Etant novice dans le codage VBA, j'ai besoin de vos services : à partir d'un Tableau défini, je souhaiterai pouvoir avoir 3 cas en cliquant sur 4 boutons :
- Insérer un nombre de lignes définis par l'utilisateur (sous forme de MsgBox) sous la ligne n°1 du Tableau, en conservant l'état de la ligne 1 comme modèle de lignes
- Supprimer 1 ou plusieurs lignes prédéfinies par l'utilisateur (sous forme de MsgBox)
- Effacer tout le tableau (RAZ), en supprimant les lignes insérées (sauf ligne n°1 du Tableau), en effaçant les cellules B3 et C3 qui sont des cellules nombre à entrer et en conservant la cellule D3 (car formule automatique)

Merci d'avance pour votre retour.
 

Pièces jointes

Bonjour et bienvenu

pour un novice, je conseille toujours de commencer par utiliser l'enregistreur de macro, qui bien souvent permet de donner une idée du code mis en jeu par l'action qu'on souhaite faire
ensuite.. il suffit d'adapter et optimiser ce code
ce qui, pour tes 3 boutons donnerait ces 3 macros à associer chacune à un de tes boutons
VB:
Sub InsertLine()
nbLigne = Application.InputBox("Combien de lignes souhaitez vous ajouter?")
With ActiveSheet.ListObjects(1)
    For i = 1 To nbLigne
        .ListRows.Add (1)
    Next i
End With
End Sub
Sub DeleteLine()
nbLigne = Application.InputBox("Combien de lignes souhaitez vous supprimer?")
With ActiveSheet.ListObjects(1)
    For i = 1 To nbLigne
        .ListRows(1).Delete
    Next i
End With
End Sub
Sub ClearLine()
With ActiveSheet.ListObjects(1)
    .DataBodyRange.ClearContents
End With
End Sub
 
Merci pour ton code, en revanche je souhaiterais que
- les lignes soient copiés en dessous de la ligne créée et non au-dessus
- Que j'ai le choix de la ou des lignes à supprimer (exemple, je ne veux supprimer que les lignes 3 et 5 de mon tableau sans que le reste ne soit altéré
- Que la ligne "n°1" de mon modèle reste en haut du tableau
 
Insérer un nombre de lignes définis par l'utilisateur (sous forme de MsgBox) sous la ligne n°1 du Tableau, en conservant l'état de la ligne 1 comme modèle de lignes
qu'appelles tu la ligne 1: la ligne d'entete?

Que la ligne "n°1" de mon modèle reste en haut du tableau
c'est ce que fait la macro: elle insère une ligne sous la ligne d'entete



les lignes soient copiés en dessous de la ligne créée et non au-dessus
quelles lignes sont copiées?? il est question juste d'insérer une ligne vide.. pas de copier coller..?

regarde les codes suivants avec les commentaires

VB:
Sub InsertLine()
nbLigne = Application.InputBox("Combien de lignes souhaitez vous ajouter?")
With ActiveSheet.ListObjects(1)
    For i = 1 To nbLigne
        .ListRows.Add
        'si on ne spécifie rien, la ligne sera créée EN BAS: comme dernière ligne
        '.ListRows.Add (1) si tu spécifies 1: la ligne sera créée en première position: Juste en dessous de la ligne d'entete
        '.ListRows.Add (4) si tu spécifies 4: la ligne sera créée en 4eme position
    Next i
End With
End Sub
Sub DeleteONELine()
nbLigne = Application.InputBox("tapez la ligne à supprimer")
With ActiveSheet.ListObjects(1)
    .ListRows(nbLigne).Delete
End With
End Sub
Sub DeleteLines()
nbLigne = Application.InputBox("tapez les lignes en ordre croissant à supprimer séparée d'un -")
LigToSup = Split(nbLigne, "-")

For i = UBound(LigToSup, 1) To LBound(LigToSup, 1) Step -1
    With ActiveSheet.ListObjects(1)
        .ListRows(CDbl(LigToSup(i))).Delete
    End With

Next i
End Sub
Sub ClearLine()
With ActiveSheet.ListObjects(1)
    .DataBodyRange.ClearContents
End With
End Sub
 
qu'appelles tu la ligne 1: la ligne d'entete?
C'est la 1ere ligne du tableau où j'ai entré des valeurs et la somme automatique, je souhaite que cette ligne fasse office de référence pour les autres lignes insérées, pour éviter de recopier les formules a chaque création de ligne

c'est ce que fait la macro: elle insère une ligne sous la ligne d'entete
Ca c'est bon



quelles lignes sont copiées?? il est question juste d'insérer une ligne vide.. pas de copier coller..?
Je souhaite garder les fonctions de ma ligne d'en tete
regarde les codes suivants avec les commentaires

VB:
Sub InsertLine()
nbLigne = Application.InputBox("Combien de lignes souhaitez vous ajouter?")
With ActiveSheet.ListObjects(1)
    For i = 1 To nbLigne
        .ListRows.Add
        'si on ne spécifie rien, la ligne sera créée EN BAS: comme dernière ligne
        '.ListRows.Add (1) si tu spécifies 1: la ligne sera créée en première position: Juste en dessous de la ligne d'entete
        '.ListRows.Add (4) si tu spécifies 4: la ligne sera créée en 4eme position
    Next i
End With
End Sub
Sub DeleteONELine()
nbLigne = Application.InputBox("tapez la ligne à supprimer")
With ActiveSheet.ListObjects(1)
    .ListRows(nbLigne).Delete
End With
End Sub
Sub DeleteLines()
nbLigne = Application.InputBox("tapez les lignes en ordre croissant à supprimer séparée d'un -")
LigToSup = Split(nbLigne, "-")

For i = UBound(LigToSup, 1) To LBound(LigToSup, 1) Step -1
    With ActiveSheet.ListObjects(1)
        .ListRows(CDbl(LigToSup(i))).Delete
    End With

Next i
End Sub
Sub ClearLine()
With ActiveSheet.ListObjects(1)
    .DataBodyRange.ClearContents
End With
End Sub
 
qu'appelles tu la ligne 1: la ligne d'entete?
C'est la 1ere ligne de mon Tableau

c'est ce que fait la macro: elle insère une ligne sous la ligne d'entete




quelles lignes sont copiées?? il est question juste d'insérer une ligne vide.. pas de copier coller..?
Je souhaite garder les formules de ma ligne d'en-tête

regarde les codes suivants avec les commentaires

VB:
Sub InsertLine()
nbLigne = Application.InputBox("Combien de lignes souhaitez vous ajouter?")
With ActiveSheet.ListObjects(1)
    For i = 1 To nbLigne
        .ListRows.Add
        'si on ne spécifie rien, la ligne sera créée EN BAS: comme dernière ligne
        '.ListRows.Add (1) si tu spécifies 1: la ligne sera créée en première position: Juste en dessous de la ligne d'entete
        '.ListRows.Add (4) si tu spécifies 4: la ligne sera créée en 4eme position
    Next i
End With
End Sub
Sub DeleteONELine()
nbLigne = Application.InputBox("tapez la ligne à supprimer")
With ActiveSheet.ListObjects(1)
    .ListRows(nbLigne).Delete
End With
End Sub
Sub DeleteLines()
nbLigne = Application.InputBox("tapez les lignes en ordre croissant à supprimer séparée d'un -")
LigToSup = Split(nbLigne, "-")

For i = UBound(LigToSup, 1) To LBound(LigToSup, 1) Step -1
    With ActiveSheet.ListObjects(1)
        .ListRows(CDbl(LigToSup(i))).Delete
    End With

Next i
End Sub
Sub ClearLine()
With ActiveSheet.ListObjects(1)
    .DataBodyRange.ClearContents
End With
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Tableau
Réponses
24
Affichages
1 K
Retour