MSGBOX - Diriger une action si oui et une autre si NON

Bonjour,

En sortant de ma feuille de calcul vente (Clic sur onglet investissement), je lance un contrôle qui alerte que si j'ai sélectionné une activité, je mets en évidence que la cellule nombre d'heures et vide.

Je pose la question de savoir si c'est normal ou pas.

A la question de la MSGBOX voulez-vous corriger = "oui" je retourne dans la feuille ventes et me positionne sur la cellule A1 par exemple.

A la réponse "Non" (Confirme que c'est normal), je reste dans la feuille active (Suite au changement de feuille au départ onglet investissement) et me positionne dans la cellule A1.

J'ai essayé toutes les solutions possibles suivant mon niveau de compétence, je n'ai pas réussi.

Lorsque j'arrive à traiter la réponse "oui", la réponse non me retourne dans la feuille de vente.

Visiblement je ne maitrise pas le retour de vbOk ou vbNo

Ligne de code dans la feuille vente.

'************************************************************
'Contrôle qu'il n'y a pas une activité avec des heures sans tarif horaire
'A défaut on affecte le prix moyen de l'exercice précédent
'************************************************************
Dim sRepy As String
Dim sRep As String
Dim Derli   'Dernière ligne
Dim r       'Compteur
Dim Activite 'Aliment l'activité concernée
    Derli = 37  'Positionnement de la dernière ligne de contrôle
      r = 0       'Initialisation de la variable

For r = 10 To Derli Step 1
     If Range("H" & r).Text <> "" And Range("R" & r).Value = 0 Then
        Activite = Range("H" & r).Text
        MsgBox "Vous avez sélectionné une activité qui ne comporte pas d'heures prévisionnelles, êtes vous sûr de cette option ! " & Chr(10) & Chr(10) & _
        "Cette sitution est possible si vous aviez du chiffre d'affaires dans l'exercice N-1 et que vous n'envisagez pas d'action commerciale dans le nouvel exercice. " & Chr(10) & Chr(10) & _
        "Veuillez apporter les éventuelles corrections soit : " & Chr(10) & Chr(10) & _
        "     - " & "Activité conernée           :   " & Activite & Chr(10) & Chr(10) & "Voulez-vous procéder à une correction ? ", vbQuestion + vbYesNo, "Prix de vente horaire"

        'sRep = vbOK

        MsgBox sRep
    End If
Next r

        If sRep = vbOK Then Sheets("Ventes").Activate
        Range("A1").Select

       ' If srep = vbCancel Then Range("A1").Select

  ' Cor2 = 0

End Sub

Situation que je ne comprends pas toujours bien, lorsque je mets un IF VBA me dit que le END IF n'est pas nécessaire, j'ai du mal à comprendre la subtilité.

Je joins un extrait de mon classeur ou le sujet me pose souci.

Merci par avance de votre concours.

Bonjour,

Ton fichier de s'ouvre pas sur ma machine ...

Le message ...

"Excel a rencontré un problème au niveau d'une ou de plusieurs références de formules dans cette feuille de calcul. Vérifiez que les références de cellules, noms de plages, noms définis et liens de vos formules sont tous corrects.

ric

Bonjour,

Premièrement, si VBA ne te demande pas de If, c'est qu'il ne comprends pas que c'est un IF, revois ta façon de l'écrire.

Pour ta msgbox, je te conseille de plutôt utiliser une msgbox avec vbyesno en paramètre, ça s'écrirait comme ça :

Sub test
Reponse = msgbox("aimes-tu le chocolat?",vbyesno)

If reponse = vbyes then
   msgbox("Moi aussi!")
Elseif reponse = vbno then
   msgbox("Ah... Dommage...")
End If
End sub

Il est important de stocker le retour d'une msgbox avec un vbyesno, tu ne peux pas juste écrire une ligne avec la msgbox, sinon tu auras une erreur, elle renvoie une valeur que tu dois ensuite utiliser.

C'est ce que j'ai fait en plaçant la reponse dans une variable, bonne journée.

Bonjour,

Ton fichier de s'ouvre pas sur ma machine ...

Le message ...

"Excel a rencontré un problème au niveau d'une ou de plusieurs références de formules dans cette feuille de calcul. Vérifiez que les références de cellules, noms de plages, noms définis et liens de vos formules sont tous corrects.

ric

Bonjour ric

La réponse AUSECOUR a résolu mon problème.

Merci tout de même de ta bonne volonté

Bonjour,

Premièrement, si VBA ne te demande pas de If, c'est qu'il ne comprends pas que c'est un IF, revois ta façon de l'écrire.

Pour ta msgbox, je te conseille de plutôt utiliser une msgbox avec vbyesno en paramètre, ça s'écrirait comme ça :

Sub test

Reponse = msgbox("aimes-tu le chocolat?",vbyesno)

If reponse = vbyes then

msgbox("Moi aussi!")

Elseif reponse = vbno then

msgbox("Ah... Dommage...")

End If

End sub

Il est important de stocker le retour d'une msgbox avec un vbyesno, tu ne peux pas juste écrire une ligne avec la msgbox, sinon tu auras une erreur, elle renvoie une valeur que tu dois ensuite utiliser.

C'est ce que j'ai fait en plaçant la reponse dans une variable, bonne journée.

Bonjour,

Tes explications m'ont permis de comprendre la logique, j'ai fait la modification et tout fonctionne comme je le souhaitais.

Merci pour ton conseil, je vais pouvoir boucler ce dernier point de contrôle.

J'ai modifié les lignes de code mais en réalité, je n'arrive pas retourner sur ma page vente, il doit y avoir une erreur de syntaxe.

Dim sRep As String

Dim Derli 'Dernière ligne

Dim r 'Compteur

Dim Activite 'Aliment l'activité concernée

Derli = 37 'Positionnement de la dernière ligne de contrôle

r = 0 'Initialisation de la variable

For r = 10 To Derli Step 1

If Range("H" & r).Text <> "" And Range("R" & r).Value = 0 Then

Activite = Range("H" & r).Text

sRep = MsgBox("Vous avez sélectionné une activité qui ne comporte pas d'heures prévisionnelles, êtes vous sûr de cette option ! ", vbQuestion + vbYesNo, "Prix de vente horaire")

If sRep = vbOK Then Sheets("Ventes").Activate.Range("A1").Select A cette réponse je n'arrive pas à retourner sur la page

End If

If sRep = vbNo Then Range("A1").Select A cette réponse également je n'arrive pas à positionne rle curseur en haut de la page

End If Erreur de compilation End If sans bloc If incompréhension suivant mes premières remarques.

End If

Next r

End Sub

Il semble qu'à la place de vbOK , il faut mettre le chiffre 6 pour que la condition fonctionne. Par contre je ne sais pas pourquoi.

Bonjour,

Ici, il faut écrire en deux lignes...

Sélection de la feuille

Puis sélection de la cellule

If sRep = vbOK Then 
Sheets("Ventes").Activate
Range("A1").Select
...
...

Ric

Bonjour

peux être plus simple a voir

A+

Maurice

Sub test()
    If MsgBox("aimes-tu le chocolat?", vbYesNo, "Demande de confirmation") = vbYes Then
        MsgBox ("Moi aussi!")
    Else
        MsgBox ("Ah... Dommage...")
    End If
End Sub

Bonjour,

C'est normal que ça ne fonctionne pas avec vbOK, les variables de type vbOK, VbNO stockent des nombres, une msgbox de type vbyesno renvoie deux valeurs possibles, vbYes et vbNo, vbYes n'a pas la même valeur que vbOK, c'est pour ça que ton If ne fonctionne pas, car tu mets une valeur que ne peut pas renvoyer ta msgbox, remplace donc VbOK par VbYes et ça fonctionnera

Bonne journée

@Ausecour

screen

« et arrête de dire vbOK, vbOK ? » (dixit Léon à Mathilda ; dans le film « Léon », de Luc Besson)

dhany

Voici ce qui fonctionne dans l'immédiat :

Dim sRep As Integer

Dim Derli2 'Dernière ligne

Dim r2 'Compteur

Dim Activite 'Aliment l'activité concernée

Derli2 = 37 'Positionnement de la dernière ligne de contrôle

r2 = 0 'Initialisation de la variable

For r2 = 10 To Derli2 Step 1

If Range("H" & r2).Text <> "" And Range("R" & r2).Value = 0 Then

Activite = Range("H" & r2).Text

sRep = MsgBox("Vous avez sélectionné une activité qui ne comporte pas d'heures prévisionnelles, êtes vous sûr de cette option ! " & Chr(10) & Chr(10) & _

"Cette sitution est possible si vous aviez du chiffre d'affaires dans l'exercice N-1 et que vous n'envisagez pas d'action commerciale dans le nouvel exercice. " & Chr(10) & Chr(10) & _

"Veuillez apporter les éventuelles corrections soit : " & Chr(10) & Chr(10) & _

" - " & "Activité conernée : " & Activite & Chr(10) & Chr(10) & "Voulez-vous procéder à une correction ? ", vbQuestion + vbYesNo, "Prix de vente horaire")

If sRep = 6 Then

Worksheets("Ventes").Activate

Range("A1").select

End If

If sRep = 7 Then

Worksheets("Achats").Activate [/Surligner]

End If

End If

Next r2

End Sub

@Ausecour

Screen.jpg

« et arrête de dire vbOK, vbOK ? » (dixit Léon à Mathilda ; dans le film « Léon », de Luc Besson)

dhany

Merci Dany ça fonctionne mieux. Ce qui est fou c'est que cette condition je l'ai utilisé plusieurs fois dans mon programme.

Pourquoi je me suis obstiné sur VBOK je me le demande.

Merci bien

C'est sûr celle-ci je vais la retenir LOL

Merci bien pour ton concours, je ne comprends toujours pas pourquoi je me suis obstiné à mettre OK , car ce n'est pas la première fois que j'utilise cette condition.

Merci encore

Rechercher des sujets similaires à "msgbox diriger action"