Formules >>>>> Code VBA
Bonjour à tous,
je souhaite demander votre aide svp
J'aimerai remplacer mes formule par du code vba, voici mes formules en dessous, et je vous remercie infiniment.
imad.
formule 1 : =NB.SI.ENS('TRVX FINIS'!$J:$J;"am";'TRVX FINIS'!$X:$X;$AI$1;'TRVX FINIS'!$M:$M;"raff spéciale";'TRVX FINIS'!$AA:$AA;$AI$2)
formule 2 : =NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. esters";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"at. fluides";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1 ";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"usine 1&2";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vapeur";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"pastillage";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"bureaux";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"chateau";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"entretien";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"force";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"laboratoire";'TRVX FINIS'!AA:AA;$AI$2)+NB.SI.ENS('TRVX FINIS'!J:J;"am";'TRVX FINIS'!X:X;$AI$1;'TRVX FINIS'!M:M;"vestiaires";'TRVX FINIS'!AA:AA;$AI$2)
Saut Imad
les critères sont t-il changeable ou ils restent tjrs constants ?
salut amir
les critères sont toujours les memes
'TRVX FINIS' c'est un onglet
Ce sont deux manières : Une première procédure qui est lancée par un bouton (par exemple) et l’autre est lancée par un événement
Sub NBSIENS()
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", "bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
Set TRVXFS = Sheets("TRVX FINIS")
'Set Fdtn = Sheets("feuille de destination")
With TRVXFS
n = 0
For i = 1 To 20
For j = 0 To UBound(tbl)
rchV = "am" & Range("AI1") & tbl(j) & Range("AI2")
If rchV = .Range("J" & i) & .Range("X" & i) & .Range("M" & i) & .Range("AA" & i) Then
n = n + 1
End If
Next
Next
End With
Range("A1").Value = n ' ICI est juste un exemple tu peux changer la reference qui tu convient
End SubOU :
Sub NBSIENS02()
Set TRVXFS = Sheets("TRVX FINIS")
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", "bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
With TRVXFS
rslt = 0
For j = 0 To UBound(tbl)
n = Application.CountIfs(.Columns("J:J"), "am", .Columns("X:X"), _
Range("AI1"), .Columns("M:M"), tbl(j), .Columns("AA:AA"), Range("AI2"))
rslt = rslt + n
Next
End With
Range("A1").Value = rslt ' ICI "A1" c'est juste un exemple tu peux changer la reference qui tu convient
End Subpour l'evenemnt de Worksheet_Change : Private Sub Worksheet_Change(ByVal Target As Range)
a = Target.Address(0, 0)
If Not (a Like "J#" Or a Like "X#" Or a Like "M#" Or a Like "AA#" Or a Like "AI#") Then Exit Sub
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", "bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
Set TRVXFS = Sheets("TRVX FINIS")
'Set Fdtn = Sheets("feuille de destination")
With TRVXFS
n = 0
For i = 1 To 20
For j = 0 To UBound(tbl)
rchV = "am" & Range("AI1") & tbl(j) & Range("AI2")
If rchV = .Range("J" & i) & .Range("X" & i) & .Range("M" & i) & .Range("AA" & i) Then
n = n + 1
End If
Next
Next
End With
Range("A1").Value = rslt ' ICI "A1" c'est juste un exemple tu peux changer la reference qui tu convient
End SubOU :
Private Sub Worksheet_Change(ByVal Target As Range)
a = Target.Address(0, 0)
If Not (a Like "J#" Or a Like "X#" Or a Like "M#" Or a Like "AA#" Or a Like "AI#") Then Exit Sub
Set TRVXFS = Sheets("TRVX FINIS")
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", "bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
With TRVXFS
rslt = 0
For j = 0 To UBound(tbl)
n = Application.CountIfs(.Columns("J:J"), "am", .Columns("X:X"), _
Range("AI1"), .Columns("M:M"), tbl(j), .Columns("AA:AA"), Range("AI2"))
rslt = rslt + n
Next
End With
Range("A1").Value = rslt ' ICI "A1" c'est juste un exemple tu peux changer la reference qui tu convient
End Subslt amir
je te remercie énormément pour ton aide
dis moi comment je veux rajouter d'autres critère apart "am"
je veux rajouter "sp" "ec" .....
Sub NBSIENS02()
Set TRVXFS = Sheets("TRVX FINIS")
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", "bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
With TRVXFS
rslt = 0
For j = 0 To UBound(tbl)
'je veux compter d'autres critères aussi : am , sp, ec, ip .....
n = Application.CountIfs(.Columns("J:J"), "am", .Columns("X:X"), _
Range("AI1"), .Columns("M:M"), tbl(j), .Columns("AA:AA"), Range("AI2"))
rslt = rslt + n
Next
End With
Range("A1").Value = rslt ' ICI "A1" c'est juste un exemple tu peux changer la reference qui tu convient
End Subtu veux ajouter (am , sp, ec, ip)et les autres a la place de "am"
Si oui :
noter que am est combiner avec la liste de tableu tbl (sur le code) veut dire , pour chaque valeur de tbl on compte ,; alors moi je ne comprends pas comment tu veux ajouter les critères (am , sp, ec, ip)
oui amir,
en faite même les autres critères "ec" "sp" "ip" seront combiné avec la table tbl
par autre façon :
"am" est pour la colonne "J:J" et les autres critères "ec" "sp" "ip" pour la quelle colonne !?
c'est aussi dans la même colonne
si j ai bien compris essaye ça :
Sub NBSIENS02()
Set TRVXFS = Sheets("TRVX FINIS")
tbl = Array("at. esters", "at. fluides", "usine 1 ", "usine 1&2", "vapeur", "pastillage", _
"bureaux", "chateau", "entretien", "force", "laboratoire", "vestiaires")
am = Array("am", "sp", "ec", "ip")
With TRVXFS
rslt = 0
For i = 0 To UBound(am)
For j = 0 To UBound(tbl)
'je veux compter d'autres critères aussi : am , sp, ec, ip .....
n = Application.CountIfs(.Columns("J:J"), am(i), .Columns("X:X"), _
Range("AI1"), .Columns("M:M"), tbl(j), .Columns("AA:AA"), Range("AI2"))
rslt = rslt + n
Next
Next
End With
Range("A1").Value = rslt ' ICI "A1" c'est juste un exemple tu peux changer la reference qui tu convient
End Subtu peux mettre les critères dans des plage de cellules a la place de tableaux !
AMIR,
tu es un génie
je te remercie du fond du cœur
ça fonctionne à merveille
je te remercie encore une fois
merci merci merci merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
salut amir
est ce que tu peux m'aider sur un petit projet stp