WorkSheetFunction - plusieurs conditions

Bonjour à tous,

J'ai deux feuilles : Rapport BXL et Rapport WALL, structures identiques, en colonne R des dates, en colonne X des "oui" ou d'autres entrées

Je calcule le pourcentage de oui par rapport au nombre de lignes, donc pour toute l'année qui me sert ensuite à nourrir mon userform : ok

Je trouve mes variables qui m'indiquent le nombre lignes pour chaque trimestre de l'année : ok

Là où je coince c'est pour sortir une autre variable : le nombre de lignes qui contiennent "oui" en colonne X par trimestre en R

Voilà où j'en suis

Dim nblignesTRAV_WALL_ANNEE As String, nblignesTRAV_BXL_ANNEE As String
Dim nbouiTRAV_WALL_ANNEE As String, nbouiTRAV_BXL_ANNEE As String
Dim ws1 As Worksheet, ws2 As Worksheet
Dim r As Range
Dim wf As WorksheetFunction
Dim d1 As Date, d2 As Date, d3 As Date, d4 As Date
Dim T1_WALL As Double, T2_WALL As Double, T3_WALL As Double, T4_WALL As Double
Dim T1_BXL As Double, T2_BXL As Double, T3_BXL As Double, T4_BXL As Double

Set ws1 = Worksheets("Rapport WALL")
Set ws2 = Worksheets("Rapport BXL")
Set wf = Application.WorksheetFunction
Set r = ws1.Range("R:R")
Set r2 = ws2.Range("R:R")

d1 = DateValue("01/01/2022")
d2 = DateValue("04/01/2022")
d3 = DateValue("07/01/2022")
d4 = DateValue("10/01/2022")

With ws1
T1_WALL = wf.CountIfs(r, ">=" & d1, r, "<" & d2)
T2_WALL = wf.CountIfs(r, ">=" & d2, r, "<" & d3)
T3_WALL = wf.CountIfs(r, ">=" & d3, r, "<" & d4)
T4_WALL = wf.CountIf(r, ">=" & d4)
nblignesTRAV_WALL_ANNEE = wf.CountA(Range("$A:$A"))
nbouiTRAV_WALL_ANNEE = wf.CountIf(Columns("X"), "Oui")
pourcentageWALL_ANNEE = nbouiTRAV_WALL_ANNEE / nblignesTRAV_WALL_ANNEE
End With

With ws2
T1_BXL = wf.CountIfs(r2, ">=" & d1, r2, "<" & d2)
T2_BXL = wf.CountIfs(r2, ">=" & d2, r2, "<" & d3)
T3_BXL = wf.CountIfs(r2, ">=" & d3, r2, "<" & d4)
T4_BXL = wf.CountIf(r2, ">=" & d4)
nblignesTRAV_BXL_ANNEE = wf.CountA(Range("$A:$A"))
nbouiTRAV_BXL_ANNEE = wf.CountIf(Columns("X"), "Oui")
pourcentageBXL_ANNEE = nbouiTRAV_BXL_ANNEE / nblignesTRAV_BXL_ANNEE
End With

TextBox1 = "Pour Bruxelles," & Chr(13) & Chr(10) & "Sur les " & nblignesTRAV_BXL_ANNEE & " engagements de l'année il y a" & Chr(13) & Chr(10) & nbouiTRAV_BXL_ANNEE & " engagements valides," & Chr(13) & Chr(10) & "soit " & Format(pourcentageBXL_ANNEE, "0.00 %")
TextBox2 = "Pour la Wallonie," & Chr(13) & Chr(10) & "Sur les " & nblignesTRAV_WALL_ANNEE & " engagements de l'année il y a" & Chr(13) & Chr(10) & nbouiTRAV_WALL_ANNEE & " engagements valides," & Chr(13) & Chr(10) & "soit " & Format(pourcentageWALL_ANNEE, "0.00 %")
'TextBox3 =

Savez-vous si je peux trouver un moyen d'utiliser WorksheetFunction avec conditions dans 2 colonnes différentes ?

Je cherche quelque chose du genre : WorksheetFunction.CountIfs(IF(r, ">=" & d1, r, "<" & d2, Columns("X"), "Oui")

Mais je ne parviens pas à trouver un syntaxe fonctionnelle, soit je m'y prends mal, soit je vais dans la mauvaise direction.

Pouvez-vous m'aider ?

Merci à tous, et de très joyeuses fêtes ;)

Bonsoir Lorence,

Une petite question qui me vient à l'esprit quand je lis votre post, pourquoi vouloir faire ça en VBA ?

Excel 365, n'est-il pas assez puissant pour ça

A+

Bonjour Bruno

Parce que ce n'est pas moi qui utilise cet outil. C'est pour une de mes collègues, pour lui faciliter les choses, mais c'est une bille en excel ;)

Une idée pour construire ma fonction ?

Bonne journée et joyeuses fêtes

Re,

Votre collègue sur Excel et vous sur VBA semble t'il

Je ne sais pas qui à écrit cette usine à gaz ce code mais franchement si vous ne savez pas le manipuler vous resterez dépendante

Voici la modification du début de code

Sub test()
  Dim nblignesTRAV_WALL_ANNEE As String, nblignesTRAV_BXL_ANNEE As String
  Dim nbouiTRAV_WALL_ANNEE As String, nbouiTRAV_BXL_ANNEE As String
  Dim pourcentageWALL_ANNEE As Single, pourcentageBXL_ANNEE As Single
  Dim ws1 As Worksheet, ws2 As Worksheet
  Dim r As Range, r2 As Range, x As Range, x2 As Range
  Dim wf As WorksheetFunction
  Dim d1 As Date, d2 As Date, d3 As Date, d4 As Date
  Dim T1_WALL As Double, T2_WALL As Double, T3_WALL As Double, T4_WALL As Double
  Dim T1_BXL As Double, T2_BXL As Double, T3_BXL As Double, T4_BXL As Double

  Set ws1 = Worksheets("Rapport WALL")
  Set ws2 = Worksheets("Rapport BXL")
  Set wf = Application.WorksheetFunction
  Set r = ws1.Range("R:R"): Set x = ws1.Range("X:X")
  Set r2 = ws2.Range("R:R"): Set x2 = ws2.Range("X:X")

  d1 = DateValue("01/01/2022")
  d2 = DateValue("04/01/2022")
  d3 = DateValue("07/01/2022")
  d4 = DateValue("10/01/2022")

  With ws1
    T1_WALL = wf.CountIfs(r, ">=" & d1, r, "<" & d2, x, "Oui")
    T2_WALL = wf.CountIfs(r, ">=" & d2, r, "<" & d3, x, "Oui")
    T3_WALL = wf.CountIfs(r, ">=" & d3, r, "<" & d4, x, "Oui")
    T4_WALL = wf.CountIf(r, ">=" & d4, x, "Oui")
    nblignesTRAV_WALL_ANNEE = wf.CountA(Range("$A:$A"))
    nbouiTRAV_WALL_ANNEE = wf.CountIf(Columns("X"), "Oui")
    pourcentageWALL_ANNEE = nbouiTRAV_WALL_ANNEE / nblignesTRAV_WALL_ANNEE
  End With

  With ws2
    T1_BXL = wf.CountIfs(r2, ">=" & d1, r2, "<" & d2, x2, "Oui")
    T2_BXL = wf.CountIfs(r2, ">=" & d2, r2, "<" & d3, x2, "Oui")
    T3_BXL = wf.CountIfs(r2, ">=" & d3, r2, "<" & d4, x2, "Oui")
    T4_BXL = wf.CountIf(r2, ">=" & d4, x2, "Oui")
    nblignesTRAV_BXL_ANNEE = wf.CountA(Range("$A:$A"))
    nbouiTRAV_BXL_ANNEE = wf.CountIf(Columns("X"), "Oui")
    pourcentageBXL_ANNEE = nbouiTRAV_BXL_ANNEE / nblignesTRAV_BXL_ANNEE
  End With
End Sub

Bonne journée à vous

Rechercher des sujets similaires à "worksheetfunction conditions"