Msgbox ou pas selon valeur d'une autre cellule
Résolu
meaurysse
Messages postés
66
Date d'inscription
Statut
Membre
Dernière intervention
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
J'ai mis au point un MsgBox qui lors de la modification du contenu d'une cellule, demande si OUI ou NON on souhaite mettre à jour la date de modification de la ligne dans la colonne prévue à cet effet.
En gros quand je modifie le renseignement de la colonne "I", un MsgBox apparait me demandant si je veux bien mettre à jour la date de modification. Si je fais "OUI", la date du jour sera insérée dans la colonne "J" de cette ligne courante, et si je met "NON", rien ne se passe !
Jusqu'à là c'est parfait !!!
Cependant, il m'arrive de devoir modifier plusieurs fois les renseignements d'une ligne contenant déjà la date du jour, et j'aimerai que lorsque la date de modification est déjà celle du jour, le Msgbox ne propose pas de modifier la date (étant donné qu'elle l'est déjà).....
Ci-dessous, mon code VBA :
Le problème c'est que je ne sais pas trop où et comment je dois formuler mon code... afin qu'avant de me proposer le MsgBox après édition de la cellule à renseigner il analyse la donnée courante dans la cellule de la date pour voir qu'elle est déjà celle du jour et dans ce cas là, ne me propose plus de modifier la date.
Un peu tordu comme explication, désolé ;-)
...Pourtant ca m'a pas l'air sorcier comme macro mais je n'y parviens pas.... =(
Merci d'avance de votre aide et vos conseils
meaurysse
J'ai mis au point un MsgBox qui lors de la modification du contenu d'une cellule, demande si OUI ou NON on souhaite mettre à jour la date de modification de la ligne dans la colonne prévue à cet effet.
En gros quand je modifie le renseignement de la colonne "I", un MsgBox apparait me demandant si je veux bien mettre à jour la date de modification. Si je fais "OUI", la date du jour sera insérée dans la colonne "J" de cette ligne courante, et si je met "NON", rien ne se passe !
Jusqu'à là c'est parfait !!!
Cependant, il m'arrive de devoir modifier plusieurs fois les renseignements d'une ligne contenant déjà la date du jour, et j'aimerai que lorsque la date de modification est déjà celle du jour, le Msgbox ne propose pas de modifier la date (étant donné qu'elle l'est déjà).....
Ci-dessous, mon code VBA :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("I2:I20")) Is Nothing Then
If MsgBox("Voulez-vous mettre à jour la date?", vbYesNo + vbInformation, "Confirmer SVP...") = vbYes Then
Target.Activate
Range("J" & (ActiveCell.Row)) = Cells(1, 1).Value
End If
End If
End Sub
Le problème c'est que je ne sais pas trop où et comment je dois formuler mon code... afin qu'avant de me proposer le MsgBox après édition de la cellule à renseigner il analyse la donnée courante dans la cellule de la date pour voir qu'elle est déjà celle du jour et dans ce cas là, ne me propose plus de modifier la date.
Un peu tordu comme explication, désolé ;-)
...Pourtant ca m'a pas l'air sorcier comme macro mais je n'y parviens pas.... =(
Merci d'avance de votre aide et vos conseils
meaurysse
A voir également:
- Msgbox ou pas selon valeur d'une autre cellule
- Excel couleur cellule selon valeur - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Bloquer une cellule excel - Guide
4 réponses
Bonjour,
Si j'ai bien compris (si la date en J est différente de celle en A1 on propose la modification, sinon non ), essaie :
Cdlmnt
Via
Si j'ai bien compris (si la date en J est différente de celle en A1 on propose la modification, sinon non ), essaie :
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("I2:I20")) Is Nothing and Range("J" & (ActiveCell.Row)) <> Cells(1, 1).Value Then ' le reste sans changement
Cdlmnt
Via
Bonjour
Peut être comme ça
Cdlmnt
Peut être comme ça
Private Sub Worksheet_Change(ByVal Target As Range)
Dim li As Long
If Not Intersect(Target, Range("I2:I20")) Is Nothing Then
li = Target.Row
If Range("J" & li).Value <> Date Then
If MsgBox("Voulez-vous mettre à jour la date?", vbYesNo + vbInformation, "Confirmer SVP...") = vbYes Then
Range("J" & li) = Date
End If
End If
End If
End Sub
Cdlmnt
Re,
Dim est une instruction qui sert à déclarer les variables utilisées et à leur attribuer un type.
Ici, j'ai déclaré la variable li de type long (entier de -2 147 483 648 à -2 147 483 647) qui va récupérer la ligne de la cellule cliquée
C'est une bonne habitude à prendre, ça peut éviter pas mal d'erreurs, en particulier dues à des fautes de frappe.
Si en début de module du mets la directive
Option explicit
ça t'oblige à déclarer toutes les variables utilisées dans ce module.
PS. Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)
Bonne suite
Dim est une instruction qui sert à déclarer les variables utilisées et à leur attribuer un type.
Ici, j'ai déclaré la variable li de type long (entier de -2 147 483 648 à -2 147 483 647) qui va récupérer la ligne de la cellule cliquée
C'est une bonne habitude à prendre, ça peut éviter pas mal d'erreurs, en particulier dues à des fautes de frappe.
Si en début de module du mets la directive
Option explicit
ça t'oblige à déclarer toutes les variables utilisées dans ce module.
PS. Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)
Bonne suite
Ok alors en gros tu défini un mot genre "cc" "li" ou "zz" (peu importe en fait) et tu défini ce que c'est pour ensuite n'avoir plus qu'à indiquer le "zz" qui est reconnu par sa signification dans la formule? :)
C'est un raccourci simplement?
Sinon, où et comment avez-vous appris tout ça?
Moi je découvre petit à petit et commence un peu à comprendre comment ca marche le VBA mais c'est quand même super complexe quand on veut faire quelque chose... Je veux dire, on y arrive pas par intuition... il faut le savoir.
C'est un raccourci simplement?
Sinon, où et comment avez-vous appris tout ça?
Moi je découvre petit à petit et commence un peu à comprendre comment ca marche le VBA mais c'est quand même super complexe quand on veut faire quelque chose... Je veux dire, on y arrive pas par intuition... il faut le savoir.
Une variable est définie par un identifiant (un nom si tu veux), si possible qui évoque le rôle joué par cette variable (j'ai mis li pour ligne) et un type de donnée (entier, texte, booléen, date, tableau, .... Elle va recevoir une valeur (li = Target.Row) qui pourra être utilisé une ou plusieurs fois par la suite ( Range("J" & li).Value ...)
La notion de variable est incontournable en programmation, tu as de nombreux sites dans lesquels tu pourras trouver des tutos. (par exemple https://vb.developpez.com/cours/?page=vba
Bon courage
La notion de variable est incontournable en programmation, tu as de nombreux sites dans lesquels tu pourras trouver des tutos. (par exemple https://vb.developpez.com/cours/?page=vba
Bon courage