Ajouter des conditions a une macro
Bonjour le Forum, j'aimerai ajouter une condition à ma macro actuelle, c'et une macro qui efface des
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 entire 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 pice 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 Subric
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 Subric
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