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.

[EDIT]

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

Rechercher des sujets similaires à "fonction countif vba"