Ajouter des conditions a une macro

Bonjour le Forum, j'aimerai ajouter une condition à ma macro actuelle, c'et une macro qui efface des

11comptaexemple.xlsm (69.69 Ko)

lignes dans un journal d'écritures comptable, il suffit de sélectionner une cellule de mon journal, et la macro m'efface la ligne entière, le problème est que si je sélectionne une cellule en dehors de la plage du journal, par sécurité je ne voudrais pas quelle macro s'effectue, et c'est bien une des conditions.

Par contre si la ligne a effacer est la bonne, j'aimerai que un messageBox, m'informe en m'indiquant le contenu de la ligne à effacer, ensuite il n'y a plus que a choisir si oui ou non on efface la ligne. j'espère que je me suis bien expliqué, je joins un petit fichier simplifié de ce que j'aimerai.

merci pour votre aide

Bonjour,

Un essai ...

Sub effacerLigne()

   'Cette macro efface la ligne entire de n'importe quelle cellule selectionnŽe dans la meme
   'et ensuite trie les Žcritures par no de rŽfŽrence

   If ActiveCell.Row >= 8 And ActiveCell.Row <= 507 And ActiveCell.Column >= 2 And ActiveCell.Column <= 7 Then

      If Msgbox("Veux-tu effacer la ligne " & Cells(ActiveCell.Row, "C") & " € " & Format(Cells(ActiveCell.Row, "G"), "##0.00") & " ?" & _
            Chr(10) & Chr(10) & " (on ne peut pas effacer plusieurs lignes à la fois !!) ", vbYesNo, "Demande de confirmation") = vbNo Then
         Exit Sub
      Else
           ActiveSheet.Unprotect
         ActiveSheet.Range(Replace("B_,C_,D_,E_,F_,G_", "_", ActiveCell.Row)).ClearContents

         'trier par no de pice suite a effacement soit par colonne D
         ActiveWorkbook.Worksheets("Journal").Sort.SortFields.Clear
         ActiveWorkbook.Worksheets("JOURNAL").Sort.SortFields.Add Key:=Range("D8:D507"), _
                        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With ActiveWorkbook.Worksheets("Journal").Sort
            .SetRange Range("B8:G507")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
         End With

         Range("B8").Select

         ActiveSheet.Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True
         ActiveSheet.EnableSelection = xlNoRestrictions
      End If
   Else
      Msgbox "La cellule selectionnée n'est pas à l'intérieur du journal ... "
   End If
End Sub

ric

Merci Ric, cette macro fonctionne parfaitement du premier coup, c'est exactement ce que je désirais.

Par la même occasion je profite pour une autre question.... j'ai une plage de cellules que je déverrouille par macro avec un petit bouton à proximité, j'ai un autre bouton en dessous pour re-proteger la plage en question afin de la sécuriser et éviter un effacement de données inopportun.

Ma question est : y au t'il la possibilité d'ouvrir la plage en cliquant sur le petit bouton d'ouverture, changer le contenu des cellules et....par sécurité que la macro qui re-protège la plage, se mette en action automatiquement disons 2 minutes après(temps largement suffisant pour effectuer les changements), ceci éviterait un oubli et assurerait une sécurité maximum....

Merci pour votre aide

Bonjour,

À placer dans un module ...

Sub Tempo()
   ActiveSheet.Unprotect
   Application.OnTime Now + TimeValue("00:02:00"), "Verrou"
End Sub

Sub Verrou()
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

ric

merci ric, encore une fois cela fonctionne parfaitement bien, j'avais essayé de chercher la solution sur divers forums, mais cela ne fonctionnait pas bien... je faisait à l'envers, alors que dans ton code d'abord tu attend deux minutes et ensuite tu appelle la macro qui verrouille.

Merci

Rechercher des sujets similaires à "ajouter conditions macro"