Msgbox ou pas selon valeur d'une autre cellule

Résolu/Fermé
meaurysse Messages postés 66 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 2 octobre 2020 - 19 janv. 2016 à 11:56
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 - 19 janv. 2016 à 16:31
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 :

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

4 réponses

via55 Messages postés 14501 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 novembre 2024 2 735
19 janv. 2016 à 12:02
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 :

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
1
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
19 janv. 2016 à 12:07
Bonjour

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
1
meaurysse Messages postés 66 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 2 octobre 2020
19 janv. 2016 à 12:45
Salut ccm81

Merci c'est EXACTEMENT ce que je voulais !!! =D Par contre, je n'aurai jamais su comment faire... sans ton aide =/

Pourrais-tu m'expliquer l'histoire des "DIM"? Et à quoi cela sert exactement?
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
Modifié par ccm81 le 19/01/2016 à 14:26
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
1
meaurysse Messages postés 66 Date d'inscription mercredi 7 mars 2012 Statut Membre Dernière intervention 2 octobre 2020
19 janv. 2016 à 15:08
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.
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
19 janv. 2016 à 16:31
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
0