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

insertion d'une ligne automatique dans un tableau excel.

ATHE RIOVELI

XLDnaute Occasionnel
Bonsoir à tous,
je souhaite une correction pour mon code.
Lorsque je met une donne en B3, et que je valide, je souhaite une insertion de ligne automatique. La cellule La ligne ou se trouve EFFECTIF doit aussi décaler vers le bas.
Voici ici le code et le fichier :

VB:
Option Explicit

Dim flag1 As Boolean ' Déclaration de flag1

Private Sub Worksheet_Change(ByVal Target As Range)
    If flag1 Or ListObjects.Count = 0 Then Exit Sub
    flag1 = True 'pour bloquer la macro
    Dim br As Range, r As Range, P As Range
    Set br = ListObjects(1).DataBodyRange
   
    '---Décale les moyennes en fonction de la ligne EFFECTIF---
    If br.Rows(br.Rows.Count).Row + 1 = [EFFECTIF].Row Then
        [EFFECTIF].EntireRow.Insert
        [EFFECTIF].EntireRow(0).Clear 'efface la ligne précédente
    End If
   
    '---Efface les doublons dans la colonne A---
    Set P = Intersect(Target, br.Columns(1))
    If Not P Is Nothing Then
        For Each r In P
            If Application.CountIf(br.Columns(1).Offset(1), r) > 1 Then
                r.Select
                MsgBox "Doublon !", vbExclamation
                r.ClearContents
            End If
        Next
    End If
   
    '---Suppression des lignes des noms effacés dans la colonne A---
    On Error Resume Next
    br.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
   
    flag1 = False
End Sub
 

Pièces jointes

  • LITES 2C3.xlsm
    16.9 KB · Affichages: 3
Dernière modification par un modérateur:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir ATHE RIOVELI,
Une macro événementielle comme Worksheet_Change doit se trouver obligatoirement dans la feuille concernée et non dans un module standard. Voir PJ.
Je ne suis pas allé plus loin dans l'analyse.
Cependant la réactivation de Application.EnableEvents = True oit se trouver vraiment à la fin, car comme vous faites des accès comme ws.Range("C1").Value = "Total Effectif" la macro boucle sur elle même puisque vous modifiez une cellule.
 

Pièces jointes

  • LITES 2C3.xlsm
    19.9 KB · Affichages: 2

Discussions similaires

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