Lancement d'une macro avant la suppression d'une ligne [Résolu]

Messages postés
8
Date d'inscription
mardi 19 octobre 2010
Statut
Membre
Dernière intervention
18 janvier 2011
- - Dernière réponse : 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 :)
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
221
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de l0r3nz1
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bigfish_le vrai
Messages postés
8
Date d'inscription
mardi 19 octobre 2010
Statut
Membre
Dernière intervention
18 janvier 2011
0
Merci
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 :)
Commenter la réponse de safouunette