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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Yoyo01000

XLDnaute Occasionnel
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
 
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.
 
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:
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
996
Réponses
6
Affichages
92
Réponses
11
Affichages
726
Retour