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

Microsoft 365 Ajouter une ligne dans un tableau structuré

Lune999

XLDnaute Nouveau
Bonjour à toutes et tous,

J'essaye tant bien que mal depuis quelques jours de trouver comment ajouter une ligne à mon tableau lorsque la dernière cellule de la colonne C de ce dernier n'est pas vide.
Mon tableau démarre en A3 et fini en colonne BA.

Voici mes tentatives infructueuses comme vous vous en doutez...

Merci d'avance de votre aide

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False: Dim L%

With Sheets("Suivi Référencement")

For L = Range("A65536").End(xlUp).row To 2 Step -1
If Cells(L, 1) <> "" And Cells(L - 1, 1) <> "" Then
If Cells(L, 1) <> Cells(L - 1, 1) Then Cells(L, 1).EntireRow.Insert
End If
Next
End With
End Sub
-------------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("CellSaisie").Address Then

With Range("CellSaisie")
Range(Cells(.Row, "C"), Cells(.Row, "BA")).Insert
.Offset(-1, 0).Value = .Value

Application.EnableEvents = False
.Value = ""
Application.EnableEvents = True

.Offset(-1, 1).Select
End With
End If
End Sub
 
Solution
Bonjour à tous,

Essayez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("a4").ListObject
      If .ListRows.Count > 0 Then
         If .ListRows(.ListRows.Count).Range(1, "c") <> "" Then .ListRows.Add
      Else
         .ListRows.Add
      End If
   End With
End Sub

Le même code commenté
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("a4").ListObject   ' avec le tableau structuré TS qui contient la cellule A4
      If .ListRows.Count > 0 Then
         ' si l'objet référençant les lignes(.ListRows) du TS contient au moins une ligne
         ' On teste la cellule de la dernière ligne et de la colonne "c"
         ' si la cellule est vide, on ajoute une ligne
         If...

vgendron

XLDnaute Barbatruc
Bonjour

Avec un fichier, ce serait plus pratique et compréhensible

en attendant, un peu de lecture pour les tables structurées
 

Lune999

XLDnaute Nouveau
Bon j'ai essayé de faire deux nouvelles macros mais aucune ne fonctionne comme j'aimerais. L'une tourne en boucle sans s'arrêter mais ajoute bien une ligne à la fin, l'autre qui ne fonctionne pas mais je pense être proche de réussir...

Merci d'avance de vos conseils !


Macro qui tourne en boucle

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DerniereValeur As Long

DerniereValeur = Range("C" & Rows.Count).End(xlUp).Select 'Selectionne la dernière cellule du tableau "Suivi"

If Range("C" & Rows.Count).Value = "" Then

Exit Sub 'Si la dernière cellule de la colonne C est vide alors quitte la macro

Else
ActiveSheet.ListObjects("Suivi").ListRows.Add AlwaysInsert:=True 'autrement, insère une nouvelle ligne au tableau

End If

End Sub


Macro qui ne fonctionne pas

Private Sub Worksheet_Change(ByVal Target As Range)
Dim DerniereValeur As Long


DerniereValeur = Range("C" & Rows.Count).End(xlUp).Select 'Selectionne la dernière cellule du tableau "Suivi"

ActiveSheet.ListObjects("Suivi").ListRows.Add AlwaysInsert:=True 'autrement, insère une nouvelle ligne au tableau

Exit Sub

End Sub
 

Pièces jointes

  • Classeur1.xlsm
    11.6 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
Je ne comprend l'objectif de ton code..
ajouter une ligne au tableau "suivi" ??

AUCUN code n'est necessaire pour ca
il suffit d'écrire une donnée juste SOUS le tableau ==> la table structurée s'adapte automatiquement

sinon, si tu veux ajouter une ligne vide (ce qui est à éviter), tu peux cliquer sur le bouton "Ajouter ligne"

va voir le code associé (une ligne)
 

Pièces jointes

  • Classeur1 (1).xlsm
    19.7 KB · Affichages: 4

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Essayez :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("a4").ListObject
      If .ListRows.Count > 0 Then
         If .ListRows(.ListRows.Count).Range(1, "c") <> "" Then .ListRows.Add
      Else
         .ListRows.Add
      End If
   End With
End Sub

Le même code commenté
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("a4").ListObject   ' avec le tableau structuré TS qui contient la cellule A4
      If .ListRows.Count > 0 Then
         ' si l'objet référençant les lignes(.ListRows) du TS contient au moins une ligne
         ' On teste la cellule de la dernière ligne et de la colonne "c"
         ' si la cellule est vide, on ajoute une ligne
         If .ListRows(.ListRows.Count).Range(1, "c") <> "" Then .ListRows.Add
      Else
         ' si TS est vide, on ajoute sa première ligne
         .ListRows.Add
      End If
   End With
End Sub
:
 

Pièces jointes

  • Lune999- Insérer ligne dans TS- v1.xlsm
    20.1 KB · Affichages: 16
Dernière édition:

Lune999

XLDnaute Nouveau
Merci beaucoup pour ta réponse @mapomme, cela fonctionne du tonnerre !
Merci aussi pour ton aide @vgendron et pour répondre à ta question j'ai utilisée des formules qui ne fonctionnent pas si j'écris juste sous le tableau, par expl :
=SI($C3="";"";SI($D3<>"";$D3;AUJOURDHUI())))

J'avais donc besoin d'une formule pour ajouter une nouvelle ligne

Très bon après-midi à vous deux !
 

Lune999

XLDnaute Nouveau
Pour ça il suffit d'aller dans :
Fichier/Option/Formules/Activer le calcul itératif.

Par contre il faut modifier Excel chez tous les utilisateurs pour que cela ne provoque pas de bug
 

Pièces jointes

  • Capture.JPG
    89.6 KB · Affichages: 30

Discussions similaires

Réponses
2
Affichages
329
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…