Microsoft 365 Msgbox VByesno

JBL07

XLDnaute Occasionnel
Bonjour le forum,

Qui peut m'aider ?
Sur le petit fichier joint, je voudrais que, si j'inscris "CAR" dans une cellule de la colonne H (en-tête : "Mode"), et que la valeur sur la même ligne en colonne D (en-tête : "Config") est supérieure à 150,00, une boite de dialogue VBYesNo apparaisse, avec le message " la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", puis que la valeur s'efface si le choix est NO
Le nombre de lignes n'est pas figé

Merci par avance, je n'y arrive pas tout seul :)
 

Pièces jointes

  • Test.xlsm
    12.7 KB · Affichages: 7
Solution
re
le test se fait en minuscule
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rep As VbMsgBoxResult
If (Target.Column = 8 Or Target.Column = 4) And Target.Count = 1 Then
If Target = "" Then Exit Sub
If Val(Cells(Target.Row, "D")) > 150 And LCase(Cells(Target.Row, "H")) = "géotime" Then Rep = MsgBox("la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbYesNo)
If Rep = vbNo Then Cells(Target.Row, "H") = ""
End If
End Sub

patricktoulon

XLDnaute Barbatruc
bonsoir
colle ça dans le module de ta feuille "liste"
VB:
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rep As VbMsgBoxResult
    If Target.Column = 8 Then
        If Target = "" Then Exit Sub
        If Target.Offset(, -4) > 150# And Target = "car" Then Rep = MsgBox("la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbYesNo)
        If Rep = vbNo Then Target = ""
    End If
End Sub
ca fonctionne avec "car","Car","CAR"
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Pour le fun en une ligne :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count = 1 Then If Target.Column = Range("h1").Column And UCase(Target) = "CAR" And Cells(Target.Row, "d") > 150 Then If MsgBox("La valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbQuestion + vbYesNo + vbDefaultButton2) = vbNo Then Target.ClearContents
End Sub
 

JBL07

XLDnaute Occasionnel
Hello,

Merci pour vos réponses !
Il semble par contre que cela ne fonctionne que si je renseigne la cellule en D ( Config) en premier
Il faudrait que cela soit réversible car je peux être amené à remplir la cellule en H d'abord
 

JBL07

XLDnaute Occasionnel
Tu veux dire ça ?

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rep As VbMsgBoxResult
If Target.Column = 8 Then
If Target = "" Then Exit Sub
If Target.Column = 4 Then
If Target = "" Then Exit Sub
If Target.Offset(, -4) > 150# And Target = "car" Then Rep = MsgBox("la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbYesNo)
If Rep = vbNo Then Target = ""
End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
non le test doit doit se faire sur le target.offset(,-4)
je recapitule
si on tape "car" sous n'importe quelle casse en H si d>150 message ;on est ok
maintenant tu dis si en D c'est vide
je te reponds et alors que veux tu faire ?
et c'est là que tu va te rendre compte de ton problème de conception (ou pas ;) )
 

JBL07

XLDnaute Occasionnel
Ah ok... et bien le tableau sera rempli en 2 temps - Parfois H (avec CAR ou d'autres valeurs textes) en premier, parfois D en premier, et H complété ensuite
Dans les 2 ordres de saisie, si la réponse est NO, je souhaite que la cellule en H soit effacée
 

patricktoulon

XLDnaute Barbatruc
RE
ok
c'est un peu différent
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rep As VbMsgBoxResult
    If (Target.Column = 8 Or Target.Column = 4) And Target.Count = 1 Then
        If Target = "" Then Exit Sub
        If Val(Cells(Target.Row, "D")) > 150 And LCase(Cells(Target.Row, "H")) = "car" Then Rep = MsgBox("la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbYesNo)
        If Rep = vbNo Then Cells(Target.Row, "H") = ""
    End If
End Sub
 

JBL07

XLDnaute Occasionnel
Re,

Je réouvre car j'ai un autre petit souci :)
J'ai transposé le code dans un autre classeur, avec un tableau à la structure totalement identique, avec une seule variante : la valeur à prendre en compte en H n'est pas "CAR", mais "Géotime" -
Ca ne fonctionne plus
Je peux agir sur D, mais rien à faire avec H - J'ai fait des tests en raccourcissant le mot, en enlevant l'accent, la majuscule... ça coince :)
 

patricktoulon

XLDnaute Barbatruc
re
le test se fait en minuscule
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rep As VbMsgBoxResult
If (Target.Column = 8 Or Target.Column = 4) And Target.Count = 1 Then
If Target = "" Then Exit Sub
If Val(Cells(Target.Row, "D")) > 150 And LCase(Cells(Target.Row, "H")) = "géotime" Then Rep = MsgBox("la valeur Config est supérieure à l'Offre, voulez-vous confirmer ?", vbYesNo)
If Rep = vbNo Then Cells(Target.Row, "H") = ""
End If
End Sub
 

Discussions similaires

Réponses
11
Affichages
178
Réponses
3
Affichages
517
Réponses
9
Affichages
157

Statistiques des forums

Discussions
312 207
Messages
2 086 244
Membres
103 162
dernier inscrit
fcfg