XL 2016 Code VBA insertion-suppression de ligne sans affecter une macro

Yoyo01000

XLDnaute Junior
Bonjour,
tout d'abord, bonne année à vous tous !
Si je m'en réfère à vous, c'est pour savoir que faut-il faire pour qu'un code de macro ne soit pas affecté par la suppression ou l'insertion d'une ligne/tableau ?

Si j'insère une ligne à "tableau" :


tableau

Ma macro, bien sûr, ne le prend pas en compte :

Me.Range("A2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[2],""Janvier"",'saisie ANDON'!C[5],(RC[13]))"
Me.Range("A2").Resize(32).FillDown
Me.Range("A34").FormulaR1C1 = "=IF(RC[13]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("B2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[1],""Février"",'saisie ANDON'!C[4],(RC[12]))"
Me.Range("B2").Resize(32).FillDown
Me.Range("B34").FormulaR1C1 = "=IF(RC[12]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("C2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[0],""Mars"",'saisie ANDON'!C[3],(RC[11]))"
Me.Range("C2").Resize(32).FillDown
Me.Range("C34").FormulaR1C1 = "=IF(RC[11]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("D2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-1],""Avril"",'saisie ANDON'!C[2],(RC[10]))"
Me.Range("D2").Resize(32).FillDown
Me.Range("D34").FormulaR1C1 = "=IF(RC[10]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("E2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-2],""Mai"",'saisie ANDON'!C[1],(RC[9]))"
Me.Range("E2").Resize(32).FillDown
Me.Range("E34").FormulaR1C1 = "=IF(RC[9]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("F2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-3],""Juin"",'saisie ANDON'!C[0],(RC[8]))"
Me.Range("F2").Resize(32).FillDown
Me.Range("F34").FormulaR1C1 = "=IF(RC[8]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("G2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-4],""Juillet"",'saisie ANDON'!C[-1],(RC[7]))"
Me.Range("G2").Resize(32).FillDown
Me.Range("G34").FormulaR1C1 = "=IF(RC[7]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("H2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-5],""Août"",'saisie ANDON'!C[-2],(RC[6]))"
Me.Range("H2").Resize(32).FillDown
Me.Range("H34").FormulaR1C1 = "=IF(RC[6]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("I2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-6],""Septembre"",'saisie ANDON'!C[-3],(RC[5]))"
Me.Range("I2").Resize(32).FillDown
Me.Range("I34").FormulaR1C1 = "=IF(RC[5]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("J2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-7],""Octobre"",'saisie ANDON'!C[-4],(RC[4]))"
Me.Range("J2").Resize(32).FillDown
Me.Range("J34").FormulaR1C1 = "=IF(RC[4]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("K2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-8],""Novembre"",'saisie ANDON'!C[-5],(RC[3]))"
Me.Range("K2").Resize(32).FillDown
Me.Range("K34").FormulaR1C1 = "=IF(RC[3]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"
Me.Range("L2").FormulaR1C1 = _
"=COUNTIFS('saisie ANDON'!C[-9],""Décembre"",'saisie ANDON'!C[-6],(RC[2]))"
Me.Range("L2").Resize(32).FillDown
Me.Range("L34").FormulaR1C1 = "=IF(RC[2]=""TOTAL"",SUM(R[-32]C:R[-1]C),"""")"

Que faut-il que je fasse pour cela ?

Par avance, merci pour vos réponses
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour bénéficier en VBA des avantages offerts par la mise sous forme de tableau Excel d'un plage, utilisez l'objet ListObject qui le représente.
En principe les totaux se mettent sur une lignes spéciale en fin dont la plage est représentée par la propriété TotalsRowRange du ListObject.
Mais normalement la macro ne devrait plus servir à rien s'il y était mis une bonne fois pour toutes des formules utilisant les références aux élément du tableau, car elle suivent automatiquement les ajouts et suppressions de lignes dans le corps du tableau.
 

Yoyo01000

XLDnaute Junior
Peux-tu éclairer ma lanterne stp ? Car pour moi c'est un peu du charabia :)
Un exemple de code ou quelque chose du genre, si tu peux ?
Je téléverse mon fichier, si ça peut aider.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Votre tableau ne comporte pas de vraie ligne de total. Cochez la case pour la créer, et supprimez la fausse. Ensuite mettez y les formules adéquates: En A34, à propager sur 12 colonnes :
Code:
=SOMME([Janvier])
En M34 :
Code:
=SOMME(Tableau2[[#Totaux];[Janvier]:[Décembre]])
En A2, à propager sur 32 lignes et 12 colonnes :
Code:
=NB.SI.ENS('saisie ANDON'!$C:$C;Tableau2[#En-têtes];'saisie ANDON'!$F:$F;[@[RESPO/Postes]])
Attention, j'ai plusieurs fois rectifié la formule qui précède par des éditions successives, notamment pour mettre des références absolues aux colonnes C et F de la feuille "saisie ANDON"
En M3 :
Code:
=SOMME(Tableau2[@[Janvier]:[Décembre]])
Normalement vous ne devriez plus avoir besoin de macro pour les actualiser.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Toutefois pour mettre en place les formules que j'ai indiquées vous pouvez utiliser une procédure du module de l'objet Worksheet représentant la feuille commençant comme ça :
VB:
Sub Actualisation()
Me.[Tableau2[Janvier]].Resize(, 12).FormulaR1C1 = "=COUNTIFS('saisie ANDON'!C3,Tableau2[#Headers],'saisie ANDON'!C6,[@[RESPO/Postes]])"
Me.[Tableau2[Total/Année]].FormulaR1C1 = "=SUM(Tableau2[@[Janvier]:[Décembre]])"
Me.[Tableau2[[#Totals],[Janvier]]].FormulaR1C1 = "=SUM([Janvier])"
Me.[Tableau2[[#Totals],[Janvier]]].AutoFill Destination:=[Tableau2[[#Totals],[Janvier]:[Décembre]]], Type:=xlFillDefault
Me.[Tableau2[[#Totals],[Total/Année]]].FormulaR1C1 = "=SUM(Tableau2[[#Totals],[Janvier]:[Décembre]])"
Après avoir créé la ligne de totaux officielle, quand même.
 

Discussions similaires


Haut Bas