Insérer MsgBox YesNoCancel dans une macro

bonjour Forum,

Je souhaite que vous m'apportiez vos savoirs sur un blocage au niveau de l'insertion d'une MsgBox dans ma macro
Je voulais si la réponse est oui alors les valeurs seront copies
Mais sinon la cellule de saisie D1 sera effacée et sortie de la macro
Est si Annuler sortir de la MsgBox sans rien faire (la valeur sur D1 ne va pas être effacée)
Mais si une valeur n'est pas présente dans la base de données, la macro ne va pas intervenir
Avant d'insert la MsgBox ma macro marche parfaitement
Mon fichier ci-joint

d'avance, merci pour votre aide

Bonjour

réponse = MsgBox("Exemple Oui Non Annuler", vbExclamation + vbYesNoCancel)
If réponse = 6 Then
    'cas où on a cliqué sur "Oui" dans la boite de dialogue

ElseIf réponse = 7 Then
    'cas où on a cliqué sur "Non" dans la boite de dialogue

ElseIf réponse = 2 Then
    'cas où on a cliqué sur "Annuler" ou si on a refermé sans cliquer
    'sur aucun bouton dans la boite de dialogue

End If

A toi d'écrire la macro correspondant à chacun des cas.

OK ?

Bye !

Bonsoir gmb,

Merci pour la macro :) mais j’ai une question

Votre macro je doit la mettre après mon code ou ?

Sub Test_vr()

Dim ws_1 As Worksheet
Dim ws_2 As Worksheet
Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig

Dim réponse As Integer
réponse = MsgBox("Exemple Oui Non Annuler", vbExclamation + vbYesNoCancel)

If réponse = 6 Then
    'cas où on a cliqué sur "Oui" dans la boite de dialogue
    'Il faut donc écrire ici ce que doit faire la macro si on a cliqué sur "Oui" :
    '...
    '...
    '...

ElseIf réponse = 7 Then
    'cas où on a cliqué sur "Non" dans la boite de dialogue
    'Il faut donc écrire ici ce que doit faire la macro si on a cliqué sur "Non" :
    '...
    '...
    '...

ElseIf réponse = 2 Then
    'cas où on a cliqué sur "Annuler" ou si on a refermé sans cliquer
    'sur aucun bouton dans la boite de dialogue
    'Il faut donc écrire ici ce que doit faire la macro si on a cliqué sur "Annuler" :
    '...
    '...
    '...

End If

'Set ws_1 = Worksheets(1)
'Set ws_2 = Worksheets(2)

'Valeur_Test = ws_1.Cells(1, 4).Value

'DerniereLigne = ws_2.Cells(65536, 4).End(xlUp).Row

'Set Rech = ws_2.Columns(4).Find(Valeur_Test)

'If Not Rech Is Nothing Then
        Lig = Rech.Row
'End If

    'If réponse = vbYes Then

  'ws_2.Range(ws_2.Cells(Lig, 1), ws_2.Cells(Lig, 1)).Copy ws_1.Cells(15, 2)
  'ws_2.Range(ws_2.Cells(Lig, 2), ws_2.Cells(Lig, 2)).Copy ws_1.Cells(15, 4)
  'ws_2.Range(ws_2.Cells(Lig, 3), ws_2.Cells(Lig, 3)).Copy ws_1.Cells(18, 3)
  'ws_2.Range(ws_2.Cells(Lig, 5), ws_2.Cells(Lig, 5)).Copy ws_1.Cells(18, 5)

    'ElseIf réponse = vbNo Then

  'ws_1.Cells(1, 4).ClearContents

    'Else: Exit Sub

    'End If

End Sub

bonjour gmb,

Ca marche pas votre solution, car au début ma macro se déclenche une fois une valeur double est saisie
Cependant je voulais ajouter le msgbox s’affiche pour les trois boutant
Oui = extraire
Non = effacer la cellule D1 est quitter la sub
Annuler = exit sub

Pour votre proposition même si je le mets sur private sub worksheet_change ca va s’exécuter a chaque changent de valeur sur la cellule même si la valeur n’ai pas doublon ainsi quand je fait "non" D1 est effacé mais le msgbox reste affiché
je vous joint mon fichier

Merci

Salut,

Je verrais plutôt un code minimaliste comme ceci, tu dois modifier les deux procédures.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$1" And Target.Value <> "" Then
        Call Test_vr(Target)
    End If
End Sub
' // Test_vr By Jean-Paul (Valtrase) le : 10/03/2022
' // Procédure de test select case
Sub Test_vr(ByRef CellSearch As Range)
    Dim ws_2 As Worksheet
    Dim DerniereLigne As Integer
    Dim Lig
    Dim Rech As Range

    Set ws_2 = Worksheets(2)

    DerniereLigne = ws_2.Cells(65536, 4).End(xlUp).Row

    Set Rech = ws_2.Columns(4).Find(CellSearch)
    Application.EnableEvents = False
    If Not Rech Is Nothing Then
        Select Case MsgBox("Le texte recherché à été trouvé. Sélectionnez ce que vous voulez faire" & vbCrLf _
                           & "" & vbCrLf _
                           & "Cliquez sur OUI pour extraire la cellule." & vbCrLf _
                           & "Cliquez sur NON pour effacer la recherche et quitter la procédure." & vbCrLf _
                           & "Cliquez sur ANNULER pour quitter la procédure." & vbCrLf _
                           & "", vbYesNoCancel Or vbInformation Or vbDefaultButton3, Application.Name)

            Case vbYes

                Lig = Rech.Row
                ws_2.Range(ws_2.Cells(Lig, 1), ws_2.Cells(Lig, 1)).Copy Worksheets(CellSearch.Parent.Name).Cells(15, 2)
                ws_2.Range(ws_2.Cells(Lig, 2), ws_2.Cells(Lig, 2)).Copy Worksheets(CellSearch.Parent.Name).Cells(15, 4)
                ws_2.Range(ws_2.Cells(Lig, 3), ws_2.Cells(Lig, 3)).Copy Worksheets(CellSearch.Parent.Name).Cells(18, 3)
                ws_2.Range(ws_2.Cells(Lig, 5), ws_2.Cells(Lig, 5)).Copy Worksheets(CellSearch.Parent.Name).Cells(18, 5)

            Case vbNo
                CellSearch.Value = vbNullString
            Case vbCancel
                MsgBox "L'action à été annulée par l'utilisateur"
            Case Else
        End Select
    Else
        MsgBox "La valeur recherchée est introuvable dans le tableau"
    End If
    Application.EnableEvents = True
End Sub

Pour fini, je ne saurais trop te conseiller d'utiliser un tableau structuré en feuille2

Bonjour Jean-Paul,

c'est magique ce que tu viens de me transmettre, et je retiens votre conseil pour le tableau

je te remercie infiniment

Un essai à tester. Te convient-il ?

Bye !

gmb merci beaucoup

c'est parfait

Rechercher des sujets similaires à "inserer msgbox yesnocancel macro"