Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

  • Classeur1 - Exemple test.xlsx
    17 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
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
 

djkev76

XLDnaute Nouveau
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
 

vgendron

XLDnaute Barbatruc
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
 

djkev76

XLDnaute Nouveau
Je souhaite garder les fonctions de ma ligne d'en tete
 

djkev76

XLDnaute Nouveau

 

djkev76

XLDnaute Nouveau
Bonjour
Tu as déjà le code dans mon post 5
Oups désolé Une autre question : j'ai une numérotation automatique de lignes du tableau, j'ai intégré une formule LIGNE en ajoutant 1. Seulement quand je supprime des lignes le chrono ne se met pas à jour voir me mets une erreur #REF. Sais tu comment faire pour remettre à jour automatiquement les références?
 

vgendron

XLDnaute Barbatruc
il faudrait que tu repostes ton fichier avec ton tableau et indiquer clairement de quoi tu parles
1ere ligne: ligne de données ou ligne d'entete?
pourquoi effacer un tableau mais garder la première ligne de données??
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…