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
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"
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
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
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
Re : Conditions sur chaque cellule d'une plage de données
Re,
Bonjour Tototiti et bravo
J'en profite pour préciser que j'ai retiendu que dans la plage, les cellules ne peuvent contenir que VRAI ou FAUX.
A+
kjin
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
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
Merci encore
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...
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
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.
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
Re : Conditions sur chaque cellule d'une plage de données
Super tototiti, un vrai as!!!
Ca fonctionne. Je t'en remercie, merci a toi aussi kjin! vous m'avez vraiment dépané!
Bonne journée à vous et merci encore!