Fonction CountIf en VBA
Bonsoir
A l'aide de votre site j'ai réussi à creer un bout de code vba par contre je bloque sur une ligne avec Countif par conséquent je viens soliciter votre aide.
Voici le code que j'ai fait pour le moment :
Sub selection()
Dim nombre_de_doseur As Integer, tests As Integer
nombre_de_doseur = Range("Doseurs")
tests = Range("Tests")
nbre_de_tests_d1a = "B5:" & "B" & (tests + 4) 'concaténation
nbre_de_tests_d1b = ("(B5:" & "B44)") & (",(C5" & ":C" & (tests - 36)) & ")" 'concaténation
doseur1a = "" & nbre_de_tests_d1a & "" 'résultat de la concaténation
doseur1b = "" & nbre_de_tests_d1b & "" 'résultat de la concaténation
nbre_de_tests_faits_d1a = WorksheetFunction.CountA(Range(doseur1a))
nombre_de_o_d1a = WorksheetFunction.CountIf(Range(doseur1a), "O") 'Compte le nombre de O pour le doseur 1 si moins de 40 tests à faire
If (tests <= 40) And nombre_de_doseur = 1 Then
If nbre_de_tests_faits_d1a <> 0 Then
If nbre_de_tests_faits_d1a = tests And nombre_de_o_d1a = 0 Then
Range("J11") = "Conforme"
Else: Range("J11") = "Non Conforme"
MsgBox "Certains tests ne sont pas conformes"
End If
Else: MsgBox "Certains tests non pas été faits"
End If
ElseIf (tests > 40) And nombre_de_doseur = 1 Then
'Range(doseur1b).Select
nbre_de_tests_faits_d1b = WorksheetFunction.CountA(Range(doseur1b))
nombre_de_o_d1b = WorksheetFunction.CountIf(Range(doseur1b), "O")
If nbre_de_tests_faits_d1b <> 0 Then
If nbre_de_tests_faits_d1b = tests And nombre_de_o_d1b = 0 Then
Range("J11") = "Conforme"
Else: Range("J11") = "Non Conforme"
MsgBox "Certains tests D2b ne sont pas conformes"
End If
Else: MsgBox "Certains tests D2b non pas été faits"
End If
End If
End Sub
La formule
nombre_de_o_d1b = WorksheetFunction.CountIf(Range(doseur1b), "O")
déclenche une erreur pourtant dans la première moitié du code cela fonctionne.
Je vous joint mon fichier et je reviendrais vers vous si besoin afin d'expliquer ce que je souhaite réaliser.
Merci d'avance pour votre aide et bravo pour votre site.
Bonjour Scorpdragon,
Bonjour Game Over,
La méthode WorksheetFunction.CountIf ne fonctionne pas sur une plage discontinue.
Tu peux faire le test en réalisant le comptage sur chacune des plages
D’abord, tu redéfinis la plage
nbre_de_tests_d1b = "C5:C" & (tests - 36)
puis tu effectues un comptage distinct
nombre_de_o_d1b = WorksheetFunction.CountIf(Range("B5:B44"), "O") + WorksheetFunction.CountIf(Range(doseur1b), "O")
A+
Merci pour la solution je vais essayer