Microsoft 365 rajout ligne en conservant les formats et liste déroulante.

blancolie

XLDnaute Impliqué
Bonjour le forum,

Dans ce fichier exemple, j'aimerais rajouter une ligne automatique en conservant les formats et liste déroulante juste en cliquant en B4 mais le soucis la macro que j'ai dans un autre fichier si je rajoute un autre tableau comme ds cette exemple cela ne marche plus vu que mes tableaux sont nommés.

ce que je veux, c'est pouvoir quand je rajoute un tableau 2 lignes en dessous avoir la possibilité d'avoir cette option.

Merci d'avance pour votre aide.
 

Pièces jointes

  • exemple.xlsm
    8.7 KB · Affichages: 21

Dudu2

XLDnaute Barbatruc
Bonjour,
Encore un énoncé de problème difficilement compréhensible.
j'aimerais rajouter une ligne automatique
Au-dessus ? En-dessous ? Ok on va dire Les deux.
vu que mes tableaux sont nommés
Dans le fichier joint les tableaux ne sont pas nommés. Que faut-il en penser ? Il devraient l'être ? Ou pas ?
Que veux dire un "tableau nommé" ? Est-ce un tableau structuré ?

De plus, dans un tableau structuré, la reprise des formats et listes de validation est automatique.
L'insertion de ligne (clic droit Insérer) en haut ou en dessous décale tout vers le bas. S'il y a 2 lignes entre les 2 tableaux elles seront conservées.
Que faudrait-il donc faire de plus avec une macro ?
 
Dernière édition:

blancolie

XLDnaute Impliqué
Bonjour,

Pour répondre à ta question, oui, une ligne se rajoute automatiquement si on rentre une donnée et qu'on valide mais avant dans la cellule, il n 'y a rien, elle est vierge donc j'ai pas ma liste déroulante.

Voila pourquoi, je veux avoir une macro pour réaliser cette action

oui , c'est vrai que je ne suis pas précis. j'ai remis le fichier avec le code suivant. C'est bien un tableau structuré. Ce code suivant permet de faire apparaitre une ligne en dessous de mon tableau si la première cellule est remplie.

Comme vous pouvez constater dans ce fichier exemple, c'est quand une ligne se crée, l'écartement entre les tableaux diminue. j'aimerais qu'une ligne vierge se crée sans mise en forme, ni liste déroulante, juste une ligne normal ou on peut écrire sans déclencher une action.

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With [Tableau1]
    With .Rows(.Rows.Count + 1)
        If Not Intersect(ActiveCell, .Cells(1)) Is Nothing And .Cells(0, 1) <> "" Then
            .Rows(0).Copy .Cells(1)
            .SpecialCells(xlCellTypeConstants).ClearContents
        End If
    End With
End With
With [Tableau2]
    With .Rows(.Rows.Count + 1)
        If Not Intersect(ActiveCell, .Cells(1)) Is Nothing And .Cells(0, 1) <> "" Then
            .Rows(0).Copy .Cells(1)
            .SpecialCells(xlCellTypeConstants).ClearContents
        End If
    End With
End With
End Sub

Merci de votre aide
 

Pièces jointes

  • exemple-3.xlsm
    17.2 KB · Affichages: 4

Dudu2

XLDnaute Barbatruc
une ligne se rajoute automatiquement si on rentre une donnée et qu'on valide mais avant dans la cellule, il n 'y a rien, elle est vierge donc j'ai pas ma liste déroulante.
Si tu fait clic droit, Insérer / Lignes de tableau en-dessous, la ligne vient avec tout et le nombre de lignes entres Tableau1 et Tableau2 reste constant. Pas besoin de faire quoi que ce soit en VBA.

Ton code je comprends pas ce qu'il fait et il plante quand on manipe.

Si tu veux vraiment faire du code pour insérer un ligne, essaie ça:
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Tbl As ListObject
    
    'Sélection d'une seule cellule prise en compte
    If Target.Cells.Count > 1 Then Exit Sub
    
    'Parcours de Tableaux structurés de la feuille
    For Each Tbl In Me.ListObjects
    
        'Sélection de la cellule suivant la dernière ligne de la 1ère colonne du Tableau structuré
        If Target.Address = Tbl.ListColumns(1).DataBodyRange.Cells(Tbl.DataBodyRange.Rows.Count + 1).Address Then
            If MsgBox("Insérer une ligne à la fin du " & Tbl.Name & " ?", vbOKCancel + vbQuestion) = vbCancel Then Exit Sub
            Exit For
        End If
    Next Tbl
    
    'Pas de sélection à traiter détectée
    If Tbl Is Nothing Then Exit Sub

    'Insertion d'une ligne de Tableau structuré à la fin
    Tbl.ListRows.Add AlwaysInsert:=True
End Sub
 

Pièces jointes

  • exemple-3.xlsm
    18.1 KB · Affichages: 3
Dernière édition:

blancolie

XLDnaute Impliqué
Bonjour

Merci cela marche très bien et toujours le même nombre de ligne entre les tableaux. c'est cool.

Mon code à moi marche très bien mais à chaque fois qu'une ligne se rajoute, mes 2 tableaux se collaient.

Ds mon code, fallait mettre le nom du tableau pour que cela fonctionne.

Reste maintenant à adapter ton code à mon fichier réel.

Merci pour ton travail.
 

Discussions similaires

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly