Insérer une ligne apres avoir sélectionné une cellule

Bonjour à tous,

Ultra méga novice en VBA, je me permets de vous solliciter pour avoir un code me permettant de faire ceci :

Sur une feuille de calcul excel, j'ai 3 tableaux séparés, avec des données distinctes.

le premier tableau A12:FXX

le second tableau H12:OXX

le troisieme tableau Q12:VXX

J'aimerai pouvoir créer un bouton de commande par tableau pour insérer une ligne apres la selection d'une cellule.

Par exemple, je sélectionne la cellule D41, et la macro vient ajouter une ligne 42 entre les colonnes A et F (au pire, il faut peut être dire qu'on doit absolument sélectionner la cellule en colonne A pour le 1er tableau, en colonne H pour le second et en colonne Q pour le dernier)

et si possible faire en sorte que les cellules de la ligne nouvellement crée soient vides de couleur.

J'espere être assez clair,

merci

julien

Bonjour,

Quel genre de tableau utilises tu ? C'est toi qui à "dessiner" le tableau ou tu utilises les tableaux structurés ?

Si c'est des tableaux structurés, utilise le code ci-dessous. (si tu ne sais pas comment faire je t'expliquerais, de plus un fichier aurais été le bienvenue ;) )

Sub AjoutLigne()
    Dim NomTBL As String
    Dim TBL As ListObject
    Dim Entete As Long, Lig As Long, Diff As Long

    On Error GoTo Err
    If Not ActiveCell.ListObject Is Nothing Then 'Si la cellule active se trouve dans le scop d'un tableau alors :
        NomTBL = ActiveCell.ListObject.Name 'La variable NomTBL prend pour valeur le nom du tableau
        Set TBL = ActiveSheet.ListObjects(NomTBL) 'La variable TBL représente un object de type "Tableau"
        Entete = TBL.Range.Row 'La variable EnTete prend pour valeur la première ligne du tableau
                                '(afin de psoition le tableau dans l'espace de la feuille)
        Lig = ActiveCell.Row 'La variable Lig prend pour valeur la ligne de la cellule active
        Diff = Lig - Entete 'La variable diff représente donc la position dans le tableau de là où une ligne doit-être insérée
        TBL.ListRows.Add (Diff + 1) 'Ajout d'une ligne
    End If
    Exit Sub
Err: MsgBox "Impossible d'ajouter une ligne", vbCritical, "Erreur"
End Sub

Bonjour Gautier,

c'est parfait, j'ai modifié le code que tu m'as envoyé et j'ai intégré les noms des tableaux (qui n'en étaient pas au départ, mais du coup ça marche nickel maintenant)

merci beaucoup

julien

Je comprend pas pourquoi tu as fait cette modif, (normalement) le code fonctionne pour n'importe quel tableau quel que soit le nom qu'il porte !

PS: je remet le code avec une petite sécurité en plus ;)

Sub AjoutLigne()
    Dim NomTBL As String
    Dim TBL As ListObject
    Dim Entete As Long, Lig As Long, Diff As Long

    On Error GoTo Err
    If Not ActiveCell.ListObject Is Nothing Then 'Si la cellule active se trouve dans le scop d'un tableau alors :
        NomTBL = ActiveCell.ListObject.Name 'La variable NomTBL prend pour valeur le nom du tableau
        Set TBL = ActiveSheet.ListObjects(NomTBL) 'La variable TBL représente un object de type "Tableau"
        Entete = TBL.Range.Row 'La variable EnTete prend pour valeur la première ligne du tableau
                                '(afin de psoition le tableau dans l'espace de la feuille)
        Lig = ActiveCell.Row 'La variable Lig prend pour valeur la ligne de la cellule active
        Diff = Lig - Entete + 1 'La variable diff représente donc la position dans le tableau de là où une ligne doit-être insérée
        If TBL.ListRows.Count = 0 Then
            MsgBox "Pour executer le code, il faut au minimum une donnée dans " & Chr(10) & _
            "l'une des colonnes de la première ligne du tableau """ & TBL.Name & """.", vbExclamation, "Ajout impossible"
            Exit Sub
        End If
        TBL.ListRows.Add (Diff)  'Ajout d'une ligne
    End If
    Exit Sub
Err: MsgBox "Impossible d'ajouter une ligne", vbCritical, "Erreur"
End Sub

L'avantage de ce code est que tu peux te passer de trois boutons différents, tu as juste besoin de lié la macro à un raccourci clavier ;)

et si tu préfères, je peux rajouter une ligne de contrôle des tableaux sur lesquels tu à le droit d'ajouter les lignes. (Tu peux ajouter autant de tableau que tu veux, ce qui est pénible c'est que tu seras obligé de venir modifier le code si tu ajoutes des tableaux "autorisés").

L'avantage, c'est que tu as un seul code pour gérer plusieurs tableaux ;)

Sub AjoutLigne()
    Dim NomTBL As String
    Dim TBL As ListObject
    Dim Entete As Long, Lig As Long, Diff As Long, i As Long
    Dim AllowTBL()
    Dim CtrlTBL As Boolean

    On Error GoTo Err
    AllowTBL = Array("Tableau1", "Tableau2", "Tableau3") 'Liste des tableaux autorisés
    If Not ActiveCell.ListObject Is Nothing Then 'Si la cellule active se trouve dans le scop d'un tableau alors :

        NomTBL = ActiveCell.ListObject.Name 'La variable NomTBL prend pour valeur le nom du tableau
        CtrlTBL = False 'La variable CtrlTBL nous assurera que le tableau sélectionné fait partie de la liste
        For i = LBound(AllowTBL) To UBound(AllowTBL) 'Bouvle sur tous les noms de tableaux autorisés
            If AllowTBL(i) = NomTBL Then 'si le tableau sélectionné correspond à un nom de tableau de la liste alors :
                CtrlTBL = True 'La variable CtrlTBL passe à l'état "VRAI"
                Exit For 'On sort de la boucle
            End If
        Next i
        If CtrlTBL = False Then 'Si la variable CTRL est restée à l'état "FAUX" (le tableau n'appartient donc pas à la liste) alors :
            MsgBox "Vous n'êtes pas autorisé à faire cette action sur """ & NomTBL & """.", vbExclamation, "Tableau non-autorisé" 'Message d'erreur pour l'utilisateur
            Exit Sub 'On sort du programme
        End If
        Set TBL = ActiveSheet.ListObjects(NomTBL) 'La variable TBL représente un object de type "Tableau"
        Entete = TBL.Range.Row 'La variable EnTete prend pour valeur la première ligne du tableau (afin de psoition le tableau dans l'espace de la feuille)
        Lig = ActiveCell.Row 'La variable Lig prend pour valeur la ligne de la cellule active
        Diff = Lig - Entete + 1 'La variable diff représente donc la position dans le tableau de là où une ligne doit-être insérée
        If TBL.ListRows.Count = 0 Then
            MsgBox "Pour executer le code, il faut au minimum une donnée dans " & Chr(10) & _
            "l'une des colonnes de la première ligne du tableau """ & TBL.Name & """.", vbExclamation, "Ajout impossible"
            Exit Sub
        End If
        TBL.ListRows.Add (Diff)  'Ajout d'une ligne
    End If
    Exit Sub
Err: MsgBox "Impossible d'ajouter une ligne", vbCritical, "Erreur"
End Sub

Bonjour à tous les 2,

@GGautier : A mon grand étonnement, récemment, j'ai créé un tableau (via VBA en fonction d'un nom de feuille) et son nom était forcé avec un underscore indésirable. Impossible d'agir sur le tableau avec le nom normalement car le nom était bien celui que je lui avais attribué.

En fait, la propriété Name valait NOMTAB alors que la propriété DisplayName valait _NOMTAB.

Mais en utilisant la propriété DisplayName je n'ai pas eu de problème pour agir sur le tableau...

Cdlt,

Bonjour 3GB ,

Iintéressant comme situation 🤔 En tout cas je ne connaissais pas "DisplayName", je garde ça sous le coude ! Merci 😉

Rechercher des sujets similaires à "inserer ligne selectionne"