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 SubBonne journée à vous