Excel - Exécuter la macro lorsque l'élément est sélectionné dans la liste déroulante
Problème
J'ai été en mesure de créer une macro qui remplira la cellule de la colonne A avec la date et la cellule de la colonne B avec l'heure (avec des références relatives afin qu'il le fasse sur la ligne dans laquelle se trouve le curseur) et ai appelé c'est datetimeentry (c'est un module)
Sub datetimeentry () '' datetimeentry Macro '' ActiveCell.Value = Date ActiveCell.Offset (0, 1) .Range ("A1"). Sélectionnez ActiveCell.Value = Time ActiveCell.Offset (0, 2) .Range ("A1 ") .Sélectionnez End Sub
- J'ai également créé une liste déroulante dans la colonne C parmi laquelle choisir. Ce que je veux faire, c'est ceci:
- Je souhaite que la macro s'exécute une fois que j'ai sélectionné quelque chose dans la liste déroulante. Cette macro doit être exécutée sur la même ligne que la cellule dans laquelle je l'ai sélectionnée.
Par exemple, si je sélectionne dans la liste déroulante de la cellule c1156, je souhaite que la macro soit exécutée et insère la date dans A1156 et l'heure dans B1156, puis passe à la cellule D1156 pour que je puisse entrer une valeur.
Solution
Permettez-moi d’abord de dire que l’échec est une option très valable:
Vous devez définir cette fonction:
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
End Sub
Disons que la feuille dont nous parlons est sheet1
- Alors ouvrez le VBE et double-cliquez sur sheet1 sur l'explorateur de projet
- Collez cette routine et lisez les commentaires dans le code concernant les blancs
Private Sub Worksheet_Change (ByVal Target As Range) 'ici 3 est la colonne numéro 3 qui est la colonne C If (Target.Column 3), puis quittez Sub Application.EnableEvents = False thisrow = Target.Row If Target.Value = "" Alors "maintenant vous pouvez commenter le code s'il n'a pas de sens ', mais l'idée est de savoir si la cellule de la colonne C a été effacée, ' la date et l'heure correspondantes doivent également être effacées. Cellules (thisrow, "A") = "" Cellules (thisrow, "B") = "" Autres cellules (thisrow, "A") = Date Cells (thisrow, "B") = Heure de fin si Application.EnableEvents = True End Sub
Notez que
Merci à rizvisa1 pour cette astuce sur le forum.