Ajouter x lignes dans mon Tableau
Bonjour à vous tous,
J'ai un petit problème pour ajouter un nombre défini de lignes dans mon tableau d'un maniére automatique (VBA)
mon tableau peut se placer peu importe la colonne.
Je veut à la selection d'une cellule qu'il m'ajoute 10 lignes en dessous.
j'ai trouvé un conde intéressant mais je n'arrive as à l'adapter à mon besoin:
ce code ajoute uniquement une seule ligne
Merci pour votre aide
***************
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,
Les tableaux structurés ne sont pas prévus pour insérer des lignes vides !
Développe un peu pour expliquer ce que tu envisages de faire, il te sera probablement indiqué une autre méthode de conception.
Conseil : Quand vous joignez des classeurs faites en sorte qu'ils soient vraisemblables. Anonymisé ne veut pas dire sans queue ni tête ! Votre classeur doit rester compréhensible : Si on n'a pas besoin de connaitre les noms, Numéro de téléphone ou de carte bleue ni les adresses emails l'ensemble doit rester cohérents !
A+
Merci pour votre message
je viens d'ajouter un exemple
Merci
Bonjour,
Pour ajouter des lignes autant que le curé peut en bénir utilisez la macro ci dessous. Cependant vous ne devriez JAMAIS avoir besoin de générer plusieurs lignes vides : On ajoute une ligne en ajoutant des données à la ligne suivante...
Il est d'usage de ne pas utiliser le nom générique pour ce genre de tableau : J'ai renommé votre tableau TPays car il ne contenait qu'une colonne mais TList aurait aussi bien pu faire l'affaire...
Ce genre de tableau ne devrait pas être positionné n'importe ou :
Positionnez les systématiquement sur la première ligne et première colonne si c'est un tableau multi-colonnes prenez l'habitude de ne rien mettre d'autre sur la feuille. Si au contraire c'est une feuille de paramètres ou vous aurez plusieurs listes de 1 ou 2 colonnes mettez les toutes sur la première ligne avec une colonne vide pour séparer chaque tableau. et renommez les significativement.
Sub test()
Dim TData As ListObject
Set TData = Range("Tpays").ListObject
TData.ListRows.Add
End SubCette autre formulation est acceptable :
Sub testx()
Dim TData As ListObject
Set TData = ActiveSheet.ListObjects(1)
TData.ListRows.Add
End SubCependant vous ne devriez JAMAIS avoir besoin de générer plusieurs lignes vides : On ajoute une ligne en ajoutant des données à la ligne suivante...
Voici une manière correcte d'agrandir votre tableau :
Sub test2()
Dim TData As ListObject, LR, Z$
Set TData = Range("Tpays").ListObject
For i = 1 To 10
Set LR = TData.ListRows.Add
Z = LR.Range.Offset(-1).Value
LR.Range.Value = Left(Z, 1) & (Mid(Z, 2) + 1)
Next
End Sub
A+
bonjour Galopin01, Achraf12,
@Galopin01, moi, je mets souvent les totaux du tableau juste dessus le tableau, donc le tableau commence sur ligne 2.
Sub AjoutLigne()
Dim LO, r, i
On Error Resume Next
Set LO = ActiveCell.ListObject 'cellule active fait partie d'un tableau structuré
On Error GoTo 0
If LO Is Nothing Then MsgBox "ce n'est pas un tableau structuré", vbCritical: Exit Sub
With LO
r = ActiveCell.Row - .Range.Row
If r = 0 Then MsgBox "c'est l'entête !!!", vbInformation: Exit Sub
For i = 1 To 10
.ListRows.Add(r + i).Range.Range("A1").Value = "insérer_" & i
Next
End With
End SubPS. on peut supprimer cette ligne
If r = 0 Then MsgBox "c'est l'entête !!!", vbInformation: Exit SubMerci pour sotre support