Lancement d'une macro avant la suppression d'une ligne

Résolu
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011 - 22 nov. 2010 à 14:58
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011 - 30 nov. 2010 à 12:52
Bonjour,
J'aimerais savoir si on peut avoir une macro qui se lance quand on veut supprimer une ligne?
J'ai deux feuilles excel sous lesquelles je fais des traitements. Quand je veux supprimer une ligne de la feuille 2 la macro doit chercher dans la 1ere feuille une ligne ayant les memes données de la ligne qu'on veut supprimer pour m'ecrire la date du jour dans la derniere colonne de la ligne de la feuille 1.
Quelqu'un à une idée?
Merci d'avance
Safounette


Be The Change in this world :)

3 réponses

l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
23 nov. 2010 à 12:03
Salut,

Je ne pense pas que tu puisse affecter une macro a un tel evenement, par contre tu peux faire une macro qui recupere des données dans la ligne active puis la supprime puis fais ce que tu veux.

si tu bloque au niveau du code enregistre une mini macro pour recuperer des bouts de code a remodeler.
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 14
26 nov. 2010 à 13:42
Salut,

comme sur vbfrance on ne recule devant rien, et ce même devant l'impossible

Voici une méthode qui permet de détecter une tentative de suppression.
Cette méthode s’appuie sur l'evenement "clic" de la classe "Office.CommandBarButton"

le code qui suit est à coller dans le code de "ThisWorkBook"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit


Private Sub Workbook_Open()
    'initialisation de la classe
    Set XlAppli.XL = Excel.Application
    Call XlAppli.InitClass
    DoEvents
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'on vide la classe avant de sortir
    Call viderclass
End Sub


Code à coller dans un module (par exemple: module1)
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit

Public XlAppli As New ClasseAppli, MyFileIsOpen As Boolean
Sub viderclass()
    Call XlAppli.EmptyClass
End Sub


Code à coller dans un module de classe que tu renommes en "ClasseAppli"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit

Public WithEvents XL As Excel.Application
Dim ClassCmdBrBtn() As ClasseCommandeBarBouton, NbButton As Integer
'Permet de vider la classe
Public Sub EmptyClass()
    Dim i As Integer
    For i = 1 To NbButton
        On Error Resume Next
        Set ClassCmdBrBtn(i).BoutonBarre = Nothing
    Next
End Sub
'Remplissage de la classe
Public Sub InitClass()
    Dim i As Integer, j As Integer, k As Integer, MyCmdBar() As Object, CmdBtn As Object, IDAlreadyIn As Boolean
    
    'liste des barres qui contiennent les boutons à ajouter à la classe
    ReDim Preserve MyCmdBar(3)
    Set MyCmdBar(0) = Application.CommandBars("Worksheet Menu Bar").Controls("&Edition") 'menu édition
    Set MyCmdBar(1) = Application.CommandBars("Cell") 'menu contextuel de la feuille (clic droit dans la feuille)
    Set MyCmdBar(2) = Application.CommandBars("Row")
    j = 0
    For k = 0 To 2
        'on Ajoute à la classe le/les bouton(s) qui nous intéresses
        For Each CmdBtn In MyCmdBar(k).Controls 'on boucle sur les controls
            'les boutons qui nous intéresses seront repères par leur ID
            Select Case CmdBtn.ID
                Case 21, 292, 293, 478
                    IDAlreadyIn = False
                    'ici on vas vérifier si le bouton est déjà dans la classe
                    'évidemment seulement si il y déjà quelque chose dedans.
                    If j > 0 Then
                        For i = 1 To j 'on boucle sur la classe
                            If ClassCmdBrBtn(i).BoutonBarre.ID CmdBtn.ID Then IDAlreadyIn True
                        Next
                    End If
                    If IDAlreadyIn = False Then 'si le bouton n'est pas encore dans la classe
                        j = j + 1
                        ReDim Preserve ClassCmdBrBtn(j) 'on redimensionne la classe pour lui ajouter le bouton
                        Set ClassCmdBrBtn(j) = New ClasseCommandeBarBouton 'on creer l'intance
                        Set ClassCmdBrBtn(j).BoutonBarre = CmdBtn 'on ajoute le bouton
                    End If
            End Select
        Next
    Next k
    NbButton = j
End Sub


Code à coller dans un module de classe que tu renommes en "ClasseCommandeBarBouton"
'Macro Créée par : BigFish (Philippe E)
'le :26-11-2010
'V1.1
'
Option Explicit

Public WithEvents BoutonBarre As Office.CommandBarButton

Private Sub BoutonBarre_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    'Range("a2").Value = Ctrl.Caption
    'Range("a3").Value = Ctrl.ID
    ' les captions des boutons qui nous intéresses sont : "&Supprimer...", "&Supprimer", "&Couper"
    CancelDefault = True 'on désactive l'action du bouton
    Action 'on lance notre propre action
End Sub
Sub Action()
    'ici le code à exécuter en remplacement de l'action bouton
    'pour la démo j'ai mis une boite de message
    MsgBox "Vos droits sur ce fichier ne vous permettent pas d’accéder à ces fonctions !", vbExclamation
End Sub


une fois le code dans ton fichier, enregistre, ferme le fichier puis ouvre le à nouveau cela aura pour effet de charger la classe

A+
3
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011
30 nov. 2010 à 12:52
Bonjour Philippe,
Merci pour ton code ca me remonte le moral :) j'avais pensé à proteger la feuille contre la suppression et puis créer un bouton et l'affecter une macro qui ote la protection au début, fait les traitements que je veux, supprime la ligne de la cellule selectionnée et apres reprotège la feuille vu que j'ai beaucoup de feuilles dans mon classeur et seule une feuille est concernée par ce traitement :)
Je vais garder les deux versions!
Merci encore HelpfullBigFish :)

Be The Change in this world :)
0
Rejoignez-nous