Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
196
Réponses
3
Affichages
550
Réponses
9
Affichages
173
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…