Msgbox conditionnelle

Bonjour à tous,

Je début tout juste sur VBA et j'aurais besoin d'un petit conseil.

Voilà, j'ai une liste déroulante sur une feuille et j'aimerais afficher un message lorsqu'on sélectionne certaines valeurs de la liste.

J'ai trouvé sur internet qu'il fallait utiliser les Msgbox mais j'ai essayé sur un exemple simple et ça ne marche pas.

Sur un fichier vierge, je crée une liste déroulante contenant A,B, C et D et j'écris la macro suivante :

Sub Sel()

If cellule.Value = "A" Then

Msgbox ("Vous avez sélectionné A")

End Sub

Mais il ne se passe rien, pourriez-vous me guider s'il vous plaît ?

En vous remerciant

Bonjour Wam

Je viens de tester cela et il semblerait que ça fonctionne

Sub Sel()

If ActiveCell.Value = "A" Then

MsgBox "Vous avez sélectionné A"

End If

End Sub

Bonjour Lilly,

J'ai bien copié la macro que tu m'as proposée mais il n'y a aucun effet quand je sélectionne A.

Merci pour ton aide

Bonjour,

Pour détecter la modification de la valeur d’une cellule, il faut que tu utilises la procédure évènementielle Worksheet.Change

Exemple avec la détection d’une modification de la valeur de A1.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$A$1" Then
        If Target.Value = "A" Then MsgBox ("Vous avez sélectionné A")
    End If
End Sub

La procédure doit être placée dans le module de la feuille concernée.

A+

SALUT

ESSAI CA COPIER LE MACROS SI LA VERSION D4EXEL N EST PAS COMLPATIBLE

MERCI

Merci AMIR pour ton aide mais ça ne fonctionne pas.

En revanche, le code de frangy fonctionne parfaitement, merci !!

Par contre, si je saisis bien ton code, il n'affichera la Msgbox que pour la valeur A dans A1.

Comment faire si je veux étendre la Msgbox à plusieurs cellules, voire un tableau de cellules où chaque cellule est une liste déroulante identique ? J'ai essayé

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Address = "$A$1" Or "$A$2" Then

If Target.Value = "A" Then MsgBox ("Vous avez sélectionné A")

End If

End Sub

Et

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Address = "$A$1:$C$15" Then

If Target.Value = "A" Then MsgBox ("Vous avez sélectionné A")

End If

End Sub

Respectivement pour le cas de deux cellules et un tableau de cellules...sans succès.

Merci pour votre aide

Pour étendre la détection à la plage A1:C15 :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("$A$1:$C$15")) Is Nothing Then
        If Target.Value = "A" Then MsgBox ("Vous avez sélectionné A")
    End If
End Sub

A+

Merci frangy, ça marche à la perfection et en plus, j'en apprends plus sur le VBA, merci !!!

A présent, ma tâche se complique et j'aimerais n'afficher la Msgbox qu'à condition que dans le tableau, on va dire A est sélectionné 3 fois par exemple.

Je ne sais pas si je suis clair mais j'aimerais que l'on puisse remplir les cellules comme on le souhaite et que dès qu'il y a au moins 3 A sélectionnés sur une ligne, la Msgbox 'Trop de A' s'affiche avec cerise sur le gâteau, la non prise en compte de la dernière sélection donc...ça me paraît tendu.

Merci pour toute aide

Un exemple, toujours sur la plage A1:C15

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MaPlage As Range
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("$A$1:$C$15")) Is Nothing Then
        Set MaPlage = Cells(Target.Row, 1).Resize(, 3)
        If Application.CountIf(MaPlage, "A") >= 3 Then
            MsgBox ("Trop de A avec cerise sur le gâteau")
            Application.EnableEvents = False
            Target.Value = ""
            Application.EnableEvents = True
        End If
    End If
End Sub

A+

SALUT

svp essai ça

merci

Salut à vous,

Merci pour votre précieuse aide et particulièrement à frangy !!

Le dernier code ne semble pas fonctionner ou c'est moi qui l'utilise mal, j'ai essayé de le trifouiller un chouia mais rien n'y fait, aucune Msgbox n'apparaît.

En vous remerciant

Bonjour,

Avec un exemple ce sera plus clair

19wam21.zip (12.82 Ko)

A+

Effectivement frangy, merci beaucoup !!

J'ai réussi à adapter le code à mes besoins mais comme quand y en a plus, y en a encore...j'ai deux questions encore.

La première, c'est comment modifier le code pour que la prise en compte des A ne soit pas systématiquement liée à la première colonne ? Je m'explique, Si je saisis dans une ligne dans l'ordre A,B,C,A,D,A...j'ai bien 3 A mais aucun message.

La seconde, comment modifier le code pour qu'il me fasse le même travail pour A et B ? Par exemple, si j'ai au moins 3 A ou B, exemple A,B,C,D,A; la Msgbox s'affiche ?

En te remerciant infiniment pour ton aide


PS :j'ai essayé les Countifs avec plusieurs critères mais il digère mal

J'ai réussi à répondre à ma seconde question en ajoutant les différents critères par un "+" dans la ligne If Application.CountIf(MaPlage, "A") + Application.CountIf(MaPlage, "B") >= 3 Then...

Mais je n'arrive toujours pas à faire en sorte peu importe où se situe la sélection sur la ligne et peu importe où elle démarre, d'avoir quand même le message, passés 3 A ou B.

Merci pour votre aide

Bonjour,

Il faudrait que tu m'indiques sur quelle plage doit s'appliquer le traitement.

Dans l'exemple, la procédure est appliquée sur A1:C5.

A+

En fait, j'ai remarqué qu'en utilisant un tableau plus grand, et qu'en démarrant ma sélection en A3, rien ne se passait, contrairement à quand je commence en A1. J'aimerais que ça fonctionne peu importe où démarre la sélection.

Exemple : Si je mets A en A3,A4 et A5, le message s'affiche.

J'espère avoir été clair. Merci énormément en tout cas.

Peux-tu répondre à ma demande ?

A+

En fait, je ne m’intéresse qu'à une ligne de A1 à A15 et je reproduis le code pour chaque ligne.

Mais pour cette ligne précisément, j'aimerais que n’apparaissent jamais, peu importe l'ordre plus de 3 A ou B.

J'espère avoir été clair et avoir répondu à ta question.

Merci beaucoup

Patience, on va y arriver

Si tu souhaites prendre en compte la totalité des lignes 1 à 15, la plage sera $1:$15.

C'est bien cela ?

Tu peux tester ce code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MaPlage As Range
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("$1:$15")) Is Nothing Then
        Set MaPlage = Target.EntireRow
        If (Application.CountIf(MaPlage, "A") + Application.CountIf(MaPlage, "B")) >= 3 Then
            MsgBox ("Trop de A et B")
            Application.EnableEvents = False
            Target.Value = ""
            Application.EnableEvents = True
        End If
    End If
End Sub

A+

Rechercher des sujets similaires à "msgbox conditionnelle"