MsgBox si 2 conditions

Hello tout le monde,

Peut être simple pour certains mais là, je ne trouve pas tout seul.... :/

Je cherche le code pour que :

Selon tableau de ce type :

12bandit-bug.xls (16.50 Ko)

Lorsque je clique sur le bouton il se passe les choses suivantes :

Si A1 n'est pas vide mais que B1 est vide alors message "Il manque la quantité de ABC !"

Si A2 n'est pas vide mais que B2 est vide alors message "Il manque la quantité de DEF !"

Ainsi de suite sur Nx de ligne.

En vous remerciant par avance

Bandit

Bonjour,

Voilà ma proposition :

Sub ContrôleQte()

'Déclaration des variables
Dim Lmax As Long, Lig As Long

'Détermination de la dernière ligne
Lmax = Range("A" & Rows.Count).End(xlUp).Row
'Boucle sur les lignes
For Lig = 2 To Lmax
    If IsEmpty(Range("B" & Lig)) Or Not IsNumeric(Range("B" & Lig)) Then MsgBox ("Quantité de " & Range("A" & Lig) & " à renseigner !")
Next Lig

End Sub
13bandit-bug.xlsm (17.44 Ko)

Néanmoins je pense qu'une MFC ferais aussi bien l'affaire, d'autant plus que s'il y a beaucoup de lignes non renseignées, tu vas être débordé de messages...

Bonjour,

Private Sub CommandButton1_Click()
    Dim msg$, aa, i%
    With Me
        aa = .Range("A1:B" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    End With
    For i = 2 To UBound(aa)
        If aa(i, 2) = "" Then
            If aa(i, 1) <> "" Then msg = msg & Chr(10) _
             & "Il manque la quantité de " & aa(i, 1) & " !"
        End If
    Next i
    MsgBox Replace(msg, Chr(10), "", 1, 1), vbInformation
End Sub

Cordialement.

edit: Salut Pedro !

Bonjour à toi,

je te propose ce code :

Sub Comp()
For Each Cell In Range("A2", Range("A10000").End(xlUp))
If Cell.Text <> "" And Cell.Offset(0, 1).Text = "" Then MsgBox "Il manque " & Cell.Text & " !"
Next Cell
End Sub

Et salut le Forum

Bonjour Bandit, le forum,

je te retourne ton fichier modifié :

16bandit-bug.zip (11.50 Ko)

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Salut Pedro22, MFerrand, Chbouli04 et dhany,

Tout d'abord un grand merci, tant pour la rapidité mais aussi pour la qualité de vos réponses et propositions !!

Maintenant se pose à moi 3 problèmes :

  • Etre novice et juge
  • Faire le choix entre 4 superbes propositions
  • Comment lancer l'impression après vérification et quand tout est bon ?

@ Pedro22 et Chbouli04 : Vos codes ont exactement le même comportement et sont ce que j'attendais.

@ Pedro22 : C'est quoi une MFC ?

@ MFerrand : Ton code rassemble l'action de Pedro22 et Chbouli04 mais lorsque tout est bon une MsgBox "bizarre" s'ouvre .... c'est obligé ?

@dhany : Ton code fait le job, c'est impec! mais je ne peux pas utilisé de cellules adjacentes dans le projet final. Merci à toi pour le temps passé.

Donc sans vouloir abuser ... est-qu'il serait possible de compléter vos codes avec l'action imprimer quand tout est OK ?

Encore merci à vous !

MFC = mise en forme conditionnelle, qui te permet, entre autres, de faire ressortir les cellules dont la valeur est négative (par exemple par un remplissage rouge).

A voir dans le bandeau "Accueil"

La proposition de MFerrand à 2 avantages :

Elle utilise des variables tableau (qui s’exécutent nettement plus rapidement qu'en travaillant directement sur la plage de données)

Elle n'affiche qu'une seule et unique MsgBox regroupant tous les cas à contrôler (mais le code est à ajuster pour éviter l'affichage si aucune erreur n'est retrouvée).

Dans la proposition de MFerrand, essaye en remplaçant :

MsgBox Replace(msg, Chr(10), "", 1, 1), vbInformation
'Par :
If Not IsEmpty(msg) Then MsgBox Replace(msg, Chr(10), "", 1, 1), vbInformation

@Bandit

merci pour ton retour d'infos ; mais une chose m'intrigue : au cas où tu aurais plusieurs centaines de lignes et qu'il y a aussi beaucoup de produits dont la référence est manquante, comment ça se passera si toutes les infos ne tiennent pas dans une MsgBox car ça dépasserait la hauteur de l'écran ? c'est pour ça que je t'ai proposé une solution avec une 3ème colonne (mais on peut aussi faire plus simplement en mettant juste une coche x quand il manque la quantité, et il suffit de lire à gauche la désignation ; et même, on peut ensuite filtrer sur la coche x ; c'est une simple lettre X minuscule, pas une case à cocher, car sinon, ça en ferait trop !).

mais bien sûr, si vraiment c'est pas possible d'utiliser des cellules adjacentes, c'est à oublier...

dhany

ajout : encore plus simple : sans ajouter de 3ème colonne, filtrer sur les valeurs vides de la 2ème colonne B "Qte"

et là, je rejoins volontiers jmd quand il dit : « pas besoin de VBA » !


rappel : onglet Données, groupe Trier et filtrer, commande Filtrer

pour plus d'infos sur le filtre, regarde l'aide Excel.

dhany

Bonjour,

Modifier la derniière ligne ainsi :

If msg <> "" Then MsgBox Replace(msg, Chr(10), "", 1, 1), vbInformation

NB- Un seul message récapitulatif...

Hello Tout Le Monde,

Encore merci à vous 4, ce forum à une vrai utilité et n'est pas de la "nian niotte" comme beaucoup d'autre.

Même si toutes les propositions faisaient le job, je me suis tourné vers celle de MFerrand après la petite modif.

J'ai rajouter un PrintOut derrière et donc maintenant ma feuille est vérifiée avant impression. C'est clairement ce qu'il me fallait.

A défaut de vous payer un verre, je vous remercie sincèrement pour l'aide que vous m'avait fournie ainsi qu'à tous les autres utilisateurs de ce forum.

Bravo !

A+

Bandit

Bandit a écrit :

À défaut de vous payer un verre, je vous remercie sincèrement pour l'aide que vous m'avez fournie...

Rechercher des sujets similaires à "msgbox conditions"