Je voudrais écrire du code qui s’exécutera à l’interception des évènements
d’ajout et/ou de suppression des lignes et/ou de colonnes par un utilisateur.
Existe-t-il un tel gestionnaire d’événement dans Microsoft Excel.
Une autre solution envisageable serait de retirer les lignes et les colonnes. Outils-Option-Affichage et décocher En-têtes de ligne et de colonne.
Starwing
michdenis
Bonjour Yattabi,
Tu veux une bidouille ?
Suppose que tu as une feuille masquée, nommée "toto" et que dans la cellule A6536 de cette feuille masquée , la formule suivante : þuil1!A65536 . Afin que cette feuille "toto" soit accessible à l'usager, tu l'as masques avec la ligne de commande suivante : Worksheets("Toto").Hidden = xlVeryHidden
à chaque fois que tu supprimeras une ligne, l'événement "Calculate" de la feuille "toto" s'exécutera et donc, tu as un événement susceptible de te rendre service ... tu peux appliquer la même chose en ce qui concerne les colonnes !
Comme seconde alternative, disons qu'il est possible d'intercepter l'événement "Supprimer" lorsque cela est fait à partir de la commande "Supprimer" du menu Édition. Les procédures qui suivent te permettent d'ajouter du code (des actions) à chaque fois que cette commande est appelée. Lorsque l'on est pas content du travail d'une fonction.. on l'a réécrit à sa manière ... ça aussi c'est possible dans Excel. !
La suite est là :
Ce qui suit est à copier dans un module Standard : '----------------------------------- Sub NouveauSupprimer()
Dim Cbar As CommandBarControl For Each Cbar In Application.CommandBars.FindControls(ID:)2) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
End Sub '-----------------------------------
'----------------------------------- Sub SupprimerNormal()
Dim Cbar As CommandBarControl For Each Cbar In Application.CommandBars.FindControls(ID:)2) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
End Sub '-----------------------------------
Voici la nouvelle fonction "supprimer" Tu peux ajouter au début ou à la fin des lignes de code pour faire le boulot supplémentaire que tu désires. Il est évidemment possible d'appeler tout simplement d'autres macros.
'------------------------------------- Sub Nouvelle_Action_Supprimer()
Dim Rg As Range, Nb As Long Dim A As Long, B As Long Dim C As Range, Are As Range
Set Rg = Selection
If Rg.Columns.Count = 256 Then For Each Are In Rg.Areas For Each C In Are.Rows ss = Are.Rows.Count B = B + 1 If C.Cells.Count = 256 Then A = A + 1 End If Next Next If A <> B And A = 0 Then Application.Dialogs(xlDialogEditDelete).Show ElseIf A = B Then Range(Rg.Address).Delete ElseIf A <> B And A <> 0 Then MsgBox "Impossible de faire le boulot demandé sur ce type de sélection." End If Else For Each C In Rg.Columns B = B + 1 If C.Cells.Count = 65536 Then A = A + 1 End If Next If A <> B And A = 0 Then Application.Dialogs(xlDialogEditDelete).Show ElseIf A = B Then Range(Rg.Address).Delete ElseIf A <> B And A <> 0 Then MsgBox "Impossible de faire le boulot demandé sur ce type de sélection" End If End If
'Tu peux ajouter ce que tu veux à la macro! MsgBox "Bonjour"
End Sub '-------------------------------------
Tout ceci peut être géré en utilisant des événements du ThisWorkbook comme: à copier dans Le ThisWorkbook de ton projet. '------------------- Private Sub Workbook_Activate() NouveauSupprimer End Sub '------------------- Private Sub Workbook_Deactivate() SupprimerNormal End Sub '-------------------
Salutations!
"Yattabi" a écrit dans le message de news: Bonjour,
Je voudrais écrire du code qui s'exécutera à l'interception des évènements d'ajout et/ou de suppression des lignes et/ou de colonnes par un utilisateur. Existe-t-il un tel gestionnaire d'événement dans Microsoft Excel.
Merci pour toute suggestion.
Bonjour Yattabi,
Tu veux une bidouille ?
Suppose que tu as une feuille masquée, nommée "toto" et que dans la cellule A6536 de cette feuille masquée ,
la formule suivante : þuil1!A65536 . Afin que cette feuille "toto" soit accessible à l'usager, tu l'as masques avec
la ligne de commande suivante : Worksheets("Toto").Hidden = xlVeryHidden
à chaque fois que tu supprimeras une ligne, l'événement "Calculate" de la feuille "toto" s'exécutera et donc, tu as un
événement susceptible de te rendre service ... tu peux appliquer la même chose en ce qui concerne les colonnes !
Comme seconde alternative, disons qu'il est possible d'intercepter l'événement "Supprimer" lorsque cela est fait à
partir de la commande "Supprimer" du menu Édition. Les procédures qui suivent te permettent d'ajouter du code (des
actions) à chaque fois que cette commande est appelée. Lorsque l'on est pas content du travail d'une fonction.. on l'a
réécrit à sa manière ... ça aussi c'est possible dans Excel. !
La suite est là :
Ce qui suit est à copier dans un module Standard :
'-----------------------------------
Sub NouveauSupprimer()
Dim Cbar As CommandBarControl
For Each Cbar In Application.CommandBars.FindControls(ID:)2)
Cbar.OnAction = "Nouvelle_Action_Supprimer"
Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8)
Cbar.OnAction = "Nouvelle_Action_Supprimer"
Next
End Sub
'-----------------------------------
'-----------------------------------
Sub SupprimerNormal()
Dim Cbar As CommandBarControl
For Each Cbar In Application.CommandBars.FindControls(ID:)2)
Cbar.OnAction = "Nouvelle_Action_Supprimer"
Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8)
Cbar.OnAction = "Nouvelle_Action_Supprimer"
Next
End Sub
'-----------------------------------
Voici la nouvelle fonction "supprimer"
Tu peux ajouter au début ou à la fin des lignes de code
pour faire le boulot supplémentaire que tu désires.
Il est évidemment possible d'appeler tout simplement
d'autres macros.
'-------------------------------------
Sub Nouvelle_Action_Supprimer()
Dim Rg As Range, Nb As Long
Dim A As Long, B As Long
Dim C As Range, Are As Range
Set Rg = Selection
If Rg.Columns.Count = 256 Then
For Each Are In Rg.Areas
For Each C In Are.Rows
ss = Are.Rows.Count
B = B + 1
If C.Cells.Count = 256 Then
A = A + 1
End If
Next
Next
If A <> B And A = 0 Then
Application.Dialogs(xlDialogEditDelete).Show
ElseIf A = B Then
Range(Rg.Address).Delete
ElseIf A <> B And A <> 0 Then
MsgBox "Impossible de faire le boulot demandé sur ce type de sélection."
End If
Else
For Each C In Rg.Columns
B = B + 1
If C.Cells.Count = 65536 Then
A = A + 1
End If
Next
If A <> B And A = 0 Then
Application.Dialogs(xlDialogEditDelete).Show
ElseIf A = B Then
Range(Rg.Address).Delete
ElseIf A <> B And A <> 0 Then
MsgBox "Impossible de faire le boulot demandé sur ce type de sélection"
End If
End If
'Tu peux ajouter ce que tu veux à la macro!
MsgBox "Bonjour"
End Sub
'-------------------------------------
Tout ceci peut être géré en utilisant des événements du ThisWorkbook comme:
à copier dans Le ThisWorkbook de ton projet.
'-------------------
Private Sub Workbook_Activate()
NouveauSupprimer
End Sub
'-------------------
Private Sub Workbook_Deactivate()
SupprimerNormal
End Sub
'-------------------
Salutations!
"Yattabi" <Yattabi@discussions.microsoft.com> a écrit dans le message de
news:31B3769E-C643-4165-887D-1625546548FE@microsoft.com...
Bonjour,
Je voudrais écrire du code qui s'exécutera à l'interception des évènements
d'ajout et/ou de suppression des lignes et/ou de colonnes par un utilisateur.
Existe-t-il un tel gestionnaire d'événement dans Microsoft Excel.
Suppose que tu as une feuille masquée, nommée "toto" et que dans la cellule A6536 de cette feuille masquée , la formule suivante : þuil1!A65536 . Afin que cette feuille "toto" soit accessible à l'usager, tu l'as masques avec la ligne de commande suivante : Worksheets("Toto").Hidden = xlVeryHidden
à chaque fois que tu supprimeras une ligne, l'événement "Calculate" de la feuille "toto" s'exécutera et donc, tu as un événement susceptible de te rendre service ... tu peux appliquer la même chose en ce qui concerne les colonnes !
Comme seconde alternative, disons qu'il est possible d'intercepter l'événement "Supprimer" lorsque cela est fait à partir de la commande "Supprimer" du menu Édition. Les procédures qui suivent te permettent d'ajouter du code (des actions) à chaque fois que cette commande est appelée. Lorsque l'on est pas content du travail d'une fonction.. on l'a réécrit à sa manière ... ça aussi c'est possible dans Excel. !
La suite est là :
Ce qui suit est à copier dans un module Standard : '----------------------------------- Sub NouveauSupprimer()
Dim Cbar As CommandBarControl For Each Cbar In Application.CommandBars.FindControls(ID:)2) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
End Sub '-----------------------------------
'----------------------------------- Sub SupprimerNormal()
Dim Cbar As CommandBarControl For Each Cbar In Application.CommandBars.FindControls(ID:)2) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
For Each Cbar In Application.CommandBars.FindControls(ID:G8) Cbar.OnAction = "Nouvelle_Action_Supprimer" Next
End Sub '-----------------------------------
Voici la nouvelle fonction "supprimer" Tu peux ajouter au début ou à la fin des lignes de code pour faire le boulot supplémentaire que tu désires. Il est évidemment possible d'appeler tout simplement d'autres macros.
'------------------------------------- Sub Nouvelle_Action_Supprimer()
Dim Rg As Range, Nb As Long Dim A As Long, B As Long Dim C As Range, Are As Range
Set Rg = Selection
If Rg.Columns.Count = 256 Then For Each Are In Rg.Areas For Each C In Are.Rows ss = Are.Rows.Count B = B + 1 If C.Cells.Count = 256 Then A = A + 1 End If Next Next If A <> B And A = 0 Then Application.Dialogs(xlDialogEditDelete).Show ElseIf A = B Then Range(Rg.Address).Delete ElseIf A <> B And A <> 0 Then MsgBox "Impossible de faire le boulot demandé sur ce type de sélection." End If Else For Each C In Rg.Columns B = B + 1 If C.Cells.Count = 65536 Then A = A + 1 End If Next If A <> B And A = 0 Then Application.Dialogs(xlDialogEditDelete).Show ElseIf A = B Then Range(Rg.Address).Delete ElseIf A <> B And A <> 0 Then MsgBox "Impossible de faire le boulot demandé sur ce type de sélection" End If End If
'Tu peux ajouter ce que tu veux à la macro! MsgBox "Bonjour"
End Sub '-------------------------------------
Tout ceci peut être géré en utilisant des événements du ThisWorkbook comme: à copier dans Le ThisWorkbook de ton projet. '------------------- Private Sub Workbook_Activate() NouveauSupprimer End Sub '------------------- Private Sub Workbook_Deactivate() SupprimerNormal End Sub '-------------------
Salutations!
"Yattabi" a écrit dans le message de news: Bonjour,
Je voudrais écrire du code qui s'exécutera à l'interception des évènements d'ajout et/ou de suppression des lignes et/ou de colonnes par un utilisateur. Existe-t-il un tel gestionnaire d'événement dans Microsoft Excel.