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

XL 2019 Excel 2019 VBA Probleme sur creation de ligne en 1ere position

Cheyenne_2021

XLDnaute Junior
Bonjour,
1 tableau structuré avec 1 ligne d’entete.

Au moment de la création d’une nouvelle ligne en 1ere position, juste sous l’entete, j’ai 2 bugs differents (selon la methode utilisée) que je ne m’explique pas car la creation d’une ligne en 1ere position fonctionne ailleurs

  • Si j’utilise Selection.ListObject.ListRows.Add (1), la ligne se créé avec la couleur de l’entête.
  • J’ai donc tenté de remettre la couleur de la ligne à blanc, j’ai recopié la macro générée par Excel et j’ai un 1004 sur le .pattern
Sub inserer_ligne_Année()

Call Initialisation_Variables_Public

Call Deverrouiller_feuille(Onglet_Année)

With Sheets("Année")

colent = Range("Année[[#Headers]]").Row 'no de ligne de l'entete

Range("Année").Rows(1).Select 'se positionner sur la 1ere ligne du tableau structure Année

Selection.ListObject.ListRows.Add (1)

Range("Année").Rows(1).Select

'With Selection.Interior

Range("A3").Interior.Pattern = xlNone

.TintAndShade = 0

.PatternTintAndShade = 0

End With

End With

Call Verouiller_feuille(Onglet_Année)

End Sub

  • Si j’utilise pour la creation de la ligne Selection.EntireRow.Insert CopyOrigin:=xlFormatFromRightOrBelow
  • Les mises en forme conditionnelles des lignes du tableau se retrouvent dans l’entête !

Merci,
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ne mettez pas de couleur à l'entête, alors, laissez celle de la ligne d'entête du TableStyle ou définissez en un nouveau, personnalisé, si elle ne vous convient pas.
 

Dranreb

XLDnaute Barbatruc
À moitié seulement, c'est vrai …
Mais si on trafique les couleurs par rapport à celles définies par le TableStyle c'est normal qu'il applique des options en cas d'ajout d'une ligne derrière une dont le format a été modifié, fut-ce celle de l'entête.
Si vous ne voulez pas créer un style de tableau pour ça, vous pouvez toujours supprimer toute couleur de fond à la ligne ajoutée, comme ça il appliquera à nouveau celle définie pour le corps du tableau.
 

Cheyenne_2021

XLDnaute Junior
Dranreb ;
en effet si j'enleve la couleur de fond de l’entête, ca fonctionne.
Si je lui met un Tablesize de Excel, ca ne fonctionne pas mais c'est peut-etre "trop tard" ?
Job75 :
Il plante sur la ligne .Rows(3) ..etc en me disant que je suis sur une feuille protégee alors que je la deverouille juste avant. Par contre dans la ligne, j'ai des cellules verrouillés car contenant des formules, serait-ce ça le probleme ? Mais comment je peux deverouiller les zones de façon momentanée ?
Merci
 

job75

XLDnaute Barbatruc
Il plante sur la ligne .Rows(3) ..etc en me disant que je suis sur une feuille protégee alors que je la deverouille juste avant.
Je ne comprends pas mais bon si le mot de passe pour protéger la feuille est "Cheyenne" :
VB:
With Sheets("Année")
    .Unprotect "Cheyenne"
    With .ListObjects("Année").Range
        .ListObject.ListRows.Add 1
        .Rows(3).AutoFill .Rows(2).Resize(2), xlFillFormats
    End With
    .Protect "Cheyenne"
End With
 

Cheyenne_2021

XLDnaute Junior
Job75 : J'ai pourtant un module qui déverrouille et verrouille dans mon module principal. Je sais qu'il fonctionne car je l’utilise dans tous mes fichiers Excel.
Call Deverrouiller_feuille(Onglet_Année)
Call Verouiller_feuille(Onglet_Année)
 

Dudu2

XLDnaute Barbatruc
Si il y a au moins 1 ligne présente dans le tableau avant insertion, si le style du tableau et de l'entête en particulier n'est pas le défaut (voir messages de @Dranreb), il suffit de copier la ligne suivante du tableau et de faire un PasteSpecial xlPasteFormats sur la ligne insérée. Mais la manip devant fonctionner je suppose dans tous les cas, lors de l'insertion de la 1ère ligne, c'est râpé ! Avec effet en chaîne. D'où l'utilité des respecter le format des tableaux structurés.
 

Dudu2

XLDnaute Barbatruc
Ou peut-être plus simple...
VB:
    With WorkSheets("Année").ListObjects("Année")
        .ListRows.Add 1
        '.DataBodyRange.Rows(1).Interior.Pattern = xlNone
        .DataBodyRange.Rows(1).Interior.Color = xlNone
    End With
Le style par défaut s'applique alors.
 

Cheyenne_2021

XLDnaute Junior
Dudu2 : J'ai un 1004 sur la ligne du Databody . Je crois que ce tableau ne veut plus rien entendre.
ca fonctionne en remettant l’entête sans couleur intérieure,c'est déjà bien.
Les prochaines fois, je respecterai les couleurs d'Excel.
Merci à tous les 3.
 

Cheyenne_2021

XLDnaute Junior
Bonjour,
Je reviens avec le même problème, c'est à dire ajout d'une ligne en 1ere ligne du tableau avec Selection.ListObject.ListRows.Add (1) et il reprend la mise en forme de l'entête (onglet DUPOND_Jerome) ! Et j'ai tenté de mettre à blanc la ligne d’entête (onglet DURAND_Pierre), il conserve la mise en forme de l’entête sur 2 colonnes.
Pourtant j'ai strictement respecté la mise ne forme d'Excel , je n’ai RIEN changé.
Je vous remercie de votre aide.
 

Pièces jointes

  • Copie de RI_Suivi Projet v 5.2.1_repartition-1.xlsm
    107.8 KB · Affichages: 15

Dranreb

XLDnaute Barbatruc
Bonsoir.
Force est de constater ce que vous dites …
Et même une procédure se terminant par les instructions de l'enregistreur de macro ne parvient pas à éliminer ça :
VB:
Sub Test()
Dim LOt As ListObject, TSt As TableStyleElement, Rng As Range, IntTSt As Interior, IntRng As Interior
Set LOt = Feuil4.ListObjects(1)
Set TSt = LOt.TableStyle.TableStyleElements(xlHeaderRow)
Set Rng = LOt.Range
Set IntTSt = TSt.Interior
Set IntRng = Rng(1, 1).Interior
If MsgBox("Couleur de fond de l'entête." _
   & vbLf & "Définie par le style de tableau """ & TSt.Parent.Parent.Name & """ :" _
   & vbLf & "— Pattern=" & IntTSt.Pattern & ", ColorIndex=" & IntTSt.ColorIndex & ", Color=" & IntTSt.Color _
   & vbLf & "Définie par le format surajouté :" _
   & vbLf & "— Pattern=" & IntTSt.Pattern & ", ColorIndex=" & IntRng.ColorIndex & ", Color=" & IntTSt.Color _
   & vbLf & "Voulez vous supprimer le formatage surajouté ?", vbYesNo) = vbNo Then Exit Sub
With Rng.Interior
   .Pattern = xlNone
   .TintAndShade = 0
   .PatternTintAndShade = 0
   End With
End Sub
L'opération manuelle effectuée lors de l'enregistrement rétablit toutefois au passage les dispositions du style de tableau, au moins provisoirement.
Remarque: j'avais déjà constaté aussi des bizarreries à ce sujet. À votre place je reconvertirais le tableau en plage normale, je mettrais Aucune couleur de fond dessus puis je le remettrais sous forme de tableau.
 
Dernière édition:

Discussions similaires

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