peut-on détecter l'insertion de rows?

M

marc

Guest
euh tout est dans le titre :)
le but étant d'éxécuter une macro lors de l'insertion / suppression d'une ligne...
merci :)
 
@

@+Thierry

Guest
Salut Marc

Je me souviens avoir cherché et l'évènement "Worksheet_Change" semble capter uniquement la suppression de ligne... L'insertion semble ne faire aucun effet... Alors un paliatif semblerait efficace en utilisant l'évènement "Worksheet_Calculate"

A partir de là, il faut faire une colonne masquée qui contienne un compteur de ligne et qui serait pointée par cette macro...

Dans cette exemple, au préalable On écrit "1" en "A1" puis on écrit de A2 à A100 cette formule avec un "Drag" A1+ 1 (en "A2") jusqu'en "A100"...Puis on masque la Colonne "A"

Private Sub Worksheet_Calculate()
Dim i As Byte
Dim Plage As Range, Cell As Range

Set Plage = Me.Range("A1:A100")
i = 1
For Each Cell In Plage
On Error Resume Next
If Cell.Value <> i Then
TheMacro
Exit For
Else
i = i + 1
End If
Next

End Sub

Private Sub TheMacro()
Dim x As Byte
MsgBox "Changement Insertion ou Suppression de Ligne "

'ici on reconstruit le compteur
Application.EnableEvents = False
Cells(1, 1) = 1
For x = 2 To 100
Cells(x, 1).Formula = "=" & Cells(x - 1, 1).Address & "+ 1"
Next
Application.EnableEvents = True
End Sub


NB c'est une base de départ, je n'ai pas le temps de faire les tests nécessaires !!! j'ai un rendez vous !!!

Bon Aprèm
@+Thierry
 
B

Bill

Guest
Salut à tous



'Il faut nommer la plage dans laquelle il y aura _
l'insertion ou la suppression de ligne. Ici "plage1" _
Dans une cellule placer cette fontion : =LIGNES(Plage1) _
Quand le nombre de lignes change la macro fait la vérif.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim NbLigneInitial, NbLigneActuel As Long
NbLigneInitial = Range("a1").Value 'dépôt le l'ancien Nb de ligne
NbLigneActuel = Range("Feuil1!plage1").Rows.Count

If NbLigneActuel <> NbLigneInitial Then

MsgBox "Il y un changement du Nb de Ligne."

NbLigneInitial = NbLigneActuel
Range("a1").Value = NbLigneInitial
End If
End Sub
 
O

omicron

Guest
Bonjour Marc

Je pense que ces quelques lignes de codes devraient répondre à ton problème. Il suffit de les insérer dans l'objet Feuil. qui dans ton projet correspond à la feuille dans laquelle tu veux détecter les ajouts ou suppression de lignes.

Private Nombre_Lignes As Integer

Private Sub Worksheet_Activate()
Nombre_Lignes = ActiveSheet.UsedRange.Rows.Count
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.UsedRange.Rows.Count <> Nombre_Lignes Then
MsgBox "Création/Suppression de lignes détectée"
Nombre_Lignes = ActiveSheet.UsedRange.Rows.Count
End If
End Sub

Pour lancer ta macro il suffit de l'invoquer en remplacement du message.

J'ai testé. Celà fonctionne.

Bon courage pour la suite ....
 
@

@+Thierry

Guest
Bonsoir Omicron, Bill, Marc et le Forum

J'étais assez pressé, mais j'ai quand même précisé que l'insertion de ligne ne donne pas de réaction à l'évènement "Worksheet_Change" et je viens de tester les deux propositions respectives et non !!! Aucune n'est fiable pour capter correctement l'insertion de ligne...

J'ai perso trouvé que ce que je pondais était assez dans le style usine à gaz, et je serai le premier à apprécier une solution plus simple, mais c'est pas encore dans le sac !!

Bill n'est pas loin avec sa formule, par contre je pense qu'il faudrait à nouveau utiliser l'évènement "Calculate" en adaptant...

Par contre là je vais au lit car une rude semaine se pointe !

Mais je vous suggère de re-tester vos propositions, surtout en insertion.

Bonne nuit et bonne semaine (et bon courage à marc)
@+Thierry
 
O

omicron

Guest
Thierry,

Je suis assez intrigué par ce que tu cherches ...

Pourrais tu me dire sur la base du fichier que je te transmets, ce qui ne marche pas. Je l'ai testé et ne vois pas ce qui cloche. J'ai certainement laissé passer quelque chose ....

Amitiés
 

Pièces jointes

  • AlerteNombreLignesChange.zip
    8.7 KB · Affichages: 22
@

@+Thierry

Guest
Salut Omicron, Bill, Marc, le Forum

Eureka !! c'est encore un coup des nouveautés d'XP !! tu es sous Office XP Omicron ? (et probablement Bill ?)

Hier, de chez moi je n'avais que 2000 pour tester, mais maintenant, au bureau, je viens de re-tester ta procédure sous Win 2K / Office 2K et toujours aucune réaction pour une insertion de ligne (Ok pour une suppression)

Du coup je viens de faire le test depuis un de mes autres PCs équipé de Win XP Pro et Office XP 2002 et là c'est OK, l'évènement Change Capte bien l'insertion de lignes...

Donc OK sous Excel XP la suppression ET[/d] l'insertion de lignes sont bien captées par l'évènement "Worksheet_Change"

Sous Excel 2000 l'insertion de lignes n'est pas captée par l'évènement "Worksheet_Change"... (seule la suppression)

Donc reste à savoir sous quoi Marc travaille... Et reste à noter dans nos méninges cette différence (une de plus) entre XP et 2000

On en apprend tous les jours sur XLD ! merci a vous deux !

Bon Aprèm
@+Thierry
 
@

@+Thierry

Guest
Bonjour Omicron, Bill, Marc, le Forum

Juste pour confirmation, car j'aime bien, surtout lors de ce genre de problème, aller jusqu'au bout... vous êtes bien sous Office XP Omicron et Bill ?

Et quant à Marc, où est-il passé ?

Bonne Journée
@+Thierry
 

Discussions similaires

Réponses
10
Affichages
765
Réponses
1
Affichages
245

Statistiques des forums

Discussions
312 489
Messages
2 088 868
Membres
103 980
dernier inscrit
grandmasterflash38