Conditions sur chaque cellule d'une plage de données

kems

XLDnaute Nouveau
Bonjour,

J'ai besoin de votre aide svp.
sur vba excel, j'effectue une vérification des données que j'ai, et pour cela j'ai une plage de données dont les cellules prennent les valeurs suivantes : VRAI ou FAUX.
J'aimerai afficher un msgbox au cas ou toutes les cellules de la plage auraient la valeur VRAI, cependant je ne sais pas comment m'y prendre. Je sais le faire pour qu'il m'affiche un msgbox à chaque fois que la condition est validée dans une cellule, donc autant de msgbox que de cellules validées...

Range("I39:J55").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("Total perf " & Range("D" & cell.Row).Value & ": Différences entre les totaux")
Next cell

Pourriez vous me donner un coup de main svp. Merci d'avance
 
G

Guest

Guest
Re : Conditions sur chaque cellule d'une plage de données

Bonjour Kems, le forum,


Code:
    Dim cell As Range
    Dim rep As Boolean
    rep = True
    For Each cell In Range("I39:J55")
        rep = rep And cell.Value = True
    Next cell
    If rep Then MsgBox "tout est  vrai"

A bientôt
 

kjin

XLDnaute Barbatruc
Re : Conditions sur chaque cellule d'une plage de données

Bonjour,
Code:
Sub Test()
x = Application.CountIf(Sheets(1).Range("I39:J55"), True) 'renvoie le nb de valeurs = VRAI dans la plage
y = Application.CountA(Sheets(1).Range("I39:J55")) 'renvoie le nb de valeurs dans la plage
If x = y Then MsgBox "ok"
End Sub
A+
kjin
 

tototiti2008

XLDnaute Barbatruc
Re : Conditions sur chaque cellule d'une plage de données

Bonjour kems,

une proposition :

Code:
BoolTest = True
For Each cell In Range("I39:J55")
If cell.Value = false Then
BoolTest = False
Exit For
End if
Next cell
If BoolTest Then MsgBox "tout est vrai"

Edit : Bonjour Hasco, Bonjour kjin. Un peu lent, moi, on dirait :). Ou alors vous êtes trés rapides ;)
 
Dernière édition:

kems

XLDnaute Nouveau
Re : Conditions sur chaque cellule d'une plage de données

merci pour vos réponses les amis, j'ai testé celle a HASCO et elle fonctionne, pour les autres je n'ai pas testé, mais cà m'a l'air d'etre bon. Je vous remercie quand même c'est super sympa.
Cependant je suis confronté à un autre soucis et j'espère que vous pourrez m'épauler la dessus aussi.
Au final sur ma macro j'ai donc le code suivant :

Sub contrôle()
Application.ScreenUpdating = False
Dim cell As Range
Dim rep As Boolean
rep = True

Sheets("Feuil1").Select

Range("I39:I55").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("Total perf " & Range("D" & cell.Row).Value & ": Différences entre les totaux")
Next cell

Range("E39:E45").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("Futures " & Range("D" & cell.Row).Value & ": Différences selon les répartitions")
Next cell

Range("F39:F52").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("Futures " & Range("D" & cell.Row).Value & ": Différences entre Contribution par poche et Fiche contribution")
Next cell

Range("G39:G45").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("CAT " & Range("D" & cell.Row).Value & ": Différences selon les répartitions")
Next cell

Range("H39:H52").Select
For Each cell In Selection
If cell.Value = FAUX Then MsgBox ("CAT " & Range("D" & cell.Row).Value & ": Différence entre Contribution par poche et Fiche contribution")
Next cell


For Each cell In Range("E39:I55")
rep = rep And cell.Value = True
Next cell
If rep Then MsgBox "tout est vrai"

Sheets("CI").Select


End Sub

J'aimerai cependant au lieu d'afficher un msgbox a chaque fois que la condition est validée dans la plage de cellule, n'afficher qu'un seul msgbox avec un récapitulatif de toutes les msgbox qu'il aurait du m'afficher.
Merci pour votre aide
 

kems

XLDnaute Nouveau
Re : Conditions sur chaque cellule d'une plage de données

salut tototiti
J'ai testé ton code If Application.WorksheetFunction.And(ActiveSheet.Range("I39:J55")) Then MsgBox "tout est vrai"
Cependant un souci : il m'affiche d'abord les erreurs (Les cellules qui ont pour valeur FAUX) et il me met un msgbox a la fin "tout est vrai" or ce dernier ne devrait apparaitre que si toutes les cellules sont à vrai.
Merci quand meme
 

kems

XLDnaute Nouveau
Re : Conditions sur chaque cellule d'une plage de données

Je m'excuse tititoto, une erreur de ma part, elle fonctionne bien ta macro, super un vrai génie, pourrait-tu m'expliquer son fonctionnement exactement stp? c'est bien beau de faire un copier coller, mais j'aimerai y comprendre quelque chose :D
Merci encore
 

tototiti2008

XLDnaute Barbatruc
Re : Conditions sur chaque cellule d'une plage de données

c'est trés simple, ça utilise la fonction AND (ET en français)
si dans ta feuille de calcul, tu écris :
=ET(I39:J55)
tu as exactement la même chose que fait le code. C'est pas moi qui suis génial, ce sont les fonctions Excel...

bon, tout ça ne résoud pas ta 2ème question...
 

kjin

XLDnaute Barbatruc
Re : Conditions sur chaque cellule d'une plage de données

Re,
Je ne vois pas vraiment ce qui te pose problème
Pour la première plage et parce que tu souhaites tester plage par plage
Code:
With sheets("Feuil1")
    If Application.And(.Range("I39:I55")) Then
    MsgBox "Tout est VRAI dans la plage I39:J55"
    Else
        For Each cel In .Range("I39:I55")
        If cel.Value = FAUX Then MsgBox ("Total perf " & Range("D" & cel.Row).Value & ": Différences entre les totaux")
        Next cel
    End If
'..[I].la suite du code[/I]
End With
A+
kjin
 
Dernière édition:

kems

XLDnaute Nouveau
Re : Conditions sur chaque cellule d'une plage de données

en fait je le fait plage par plage car chaque plage concerne une catégorie (Future, CAT, TOTAL PERF) et cela me permet de mentionner dans mon msgbox de quelle catégorie il s'agit quand la condition est vérifiée. Il s'en suit donc un msgbox chaque fois qu'une condition est vérifiée, alors que je souhaiterai n'avoir qu'un seul msgbox qui récapitule tous les messages qu'excel aurait dû m'afficher.
 

tototiti2008

XLDnaute Barbatruc
Re : Conditions sur chaque cellule d'une plage de données

basé sur le code de kjin :

Code:
Message = ""
With sheets("Feuil1")
    If Application.And(.Range("I39:I55")) Then
    Message = Message & "Tout est VRAI dans la plage I39:J55" & chr(10)
    Else
        For Each cel In .Range("I39:I55")
        If cel.Value = FAUX Then Message = Message & ("Total perf " & Range("D" & cel.Row).Value & ": Différences entre les totaux") & chr(10)
        Next cel
    End If
'..[I].la suite du code[/I]
 
Msgbox Message
End With
 

Discussions similaires

Réponses
7
Affichages
382
  • Résolu(e)
Microsoft 365 FORMULE Excel VBA
Réponses
17
Affichages
847

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 379
Messages
2 087 762
Membres
103 661
dernier inscrit
fcleves