Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

NB.SI avec 4 CONDITIONS dans BOUCLE

10 réponses
Avatar
Alex
Bonjour,

Je viens =E0 vous, car je rencontre un probl=E8me avec la fonction NB.SI
avec 4 conditions que j'ai tent=E9 de mettre dans une boucle.

Ce que je voulais, c'est obtenir le nombre de ligne d'une liste en
prenant comme conditions les arguments suivants :

Si en colonne B, la cellule a pour valeur "D"
et qu'en colonne A, la cellule a pour valeur "98Y00"
et qu'en colonne C, la cellule a pour valeur "P1"
alors
somme si en colonne D, la cellule a pour valeur <=3D 1

Ma macro :

Sub Compt()

Dim nbligne As Long
i =3D nbligne

nbligne =3D Range("a2").CurrentRegion.Rows.Count

For i =3D nbligne To 2 Step -1
If Cells(i, 2).Value =3D "D" Then
ElseIf Cells(i, 1).Value =3D "98y00" Then
ElseIf Cells(i, 3).Value =3D "P1" Then
ElseIf Cells(i,4).Value >=3D 1 Then
Range("F1").Select
ActiveCell.FormulaR1C1 =3D "=3DCOUNTIF(C[-2],"">=3D1"")"
Else: End If
Next i
End Sub



Au lieu d'obtenir, le r=E9sultat escompt=E9, j'obtiens =E0 chaque fois le
nombre de ligne superieur ou =E9gal =E0 1 de ma colonne D, sans prise en
compte de mes conditions.

Je ne sais plus quoi faire, dois je abondonn=E9 la boucle ou est ce ma
formule de calcul qui n'est pas adapt=E9e ?

Je vous remercie par avance, de votre aide.

Cordialement.
Alex

10 réponses

Avatar
michdenis
Bonjour Alex,

Tu peux obtenir le résultat sans macro :

Adapte les plages de cellules. Elles doivent avoir le même
nombre de lignes.
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10<=1)*(D1:D10))

Veux-tu obtenir le résultat en VBA ?





"Alex" a écrit dans le message de groupe de discussion :

Bonjour,

Je viens à vous, car je rencontre un problème avec la fonction NB.SI
avec 4 conditions que j'ai tenté de mettre dans une boucle.

Ce que je voulais, c'est obtenir le nombre de ligne d'une liste en
prenant comme conditions les arguments suivants :

Si en colonne B, la cellule a pour valeur "D"
et qu'en colonne A, la cellule a pour valeur "98Y00"
et qu'en colonne C, la cellule a pour valeur "P1"
alors
somme si en colonne D, la cellule a pour valeur <= 1

Ma macro :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("a2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" Then
ElseIf Cells(i, 1).Value = "98y00" Then
ElseIf Cells(i, 3).Value = "P1" Then
ElseIf Cells(i,4).Value >= 1 Then
Range("F1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(C[-2],"">=1"")"
Else: End If
Next i
End Sub



Au lieu d'obtenir, le résultat escompté, j'obtiens à chaque fois le
nombre de ligne superieur ou égal à 1 de ma colonne D, sans prise en
compte de mes conditions.

Je ne sais plus quoi faire, dois je abondonné la boucle ou est ce ma
formule de calcul qui n'est pas adaptée ?

Je vous remercie par avance, de votre aide.

Cordialement.
Alex
Avatar
Alex
Re ou plutôt Bonsoir,

Je reviens à vous car, j'ai tenté avec une autre solution pour que
s'inscrive Vrai ou Faux en colonne E si les conditions étaient
respecté, puis de me compter les lignes avec vrai en E.
Mon problème persiste dans ma formule de calcul j'obtiens 0.

Voici ma Macro corrigée :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" And
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
Cells(i, 5).Value = "VRAI"
Else
Cells(i, 5).Value = "FAUX"
End If
Next i
Range("F1").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

End Sub

Je suis pronneur des solutions des deux cas, s'il y a ?

Merci encore par avance de votre aide. Je continue de mon côté

Cordialement.
Avatar
Alex
On 24 nov, 21:43, "michdenis" wrote:
Bonjour Alex,

Tu peux obtenir le résultat sans macro :

Adapte les plages de cellules. Elles doivent avoir le même
nombre de lignes.
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10< =1)*(D1:D10)­)

Veux-tu obtenir le résultat en VBA ?

"Alex" a écrit dans le message de groupe de discussi on :

Bonjour,

Je viens à vous, car je rencontre un problème avec la fonction NB.SI
avec 4 conditions que j'ai tenté de mettre dans une boucle.

Ce que je voulais, c'est obtenir le nombre de ligne d'une liste en
prenant comme conditions les arguments suivants :

Si en colonne B, la cellule a pour valeur "D"
et qu'en colonne A, la cellule a pour valeur "98Y00"
et qu'en colonne C, la cellule a pour valeur "P1"
alors
somme si en colonne D, la cellule a pour valeur <= 1

Ma macro :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("a2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
    If Cells(i, 2).Value = "D" Then
        ElseIf Cells(i, 1).Value = "98y00" Then
             ElseIf Cells(i, 3).Value = "P1" Then
                 ElseIf Cells(i,4).Value >= 1 Then
              Range("F1").Select
                ActiveCell.FormulaR1C1 = "=COUNTIF(C[ -2],"">=1"")"
     Else: End If
Next i
End Sub

Au lieu d'obtenir, le résultat escompté, j'obtiens à chaque fois le
nombre de ligne superieur ou égal à 1 de ma colonne D, sans prise en
compte de mes conditions.

Je ne sais plus quoi faire, dois je abondonné la boucle ou est ce ma
formule de calcul qui n'est pas adaptée ?

Je vous remercie par avance, de votre aide.

Cordialement.
Alex



Bonsoir,
Merci encore de votre réponse.
Je dois avoir un soucis avec mon excel, j'ai tenté votre formule, et
j'obtiens #Valeur
Sinon, oui je veux bien aussi la solution avec une macro, afin de
comprendre.
Je crois que ElseIf n'était pas adapté ?
Sinon, je ne sais pas si vous avez vu mon second méssage, ou je
tentais avec une autre possibilité que me semblait plus simple, mais
ma fonction me donne toujours 0 ?
Merci encore de votre aide.
Alex
Avatar
michdenis
La formule était faite pour être inscrite dans une cellule !

Et si tu veux compter le nombre de ligne, modifie la formule
comme suit :

J'ai seulement enlevé la dernière condition
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10<=1))




"Alex" a écrit dans le message de groupe de discussion :

Re ou plutôt Bonsoir,

Je reviens à vous car, j'ai tenté avec une autre solution pour que
s'inscrive Vrai ou Faux en colonne E si les conditions étaient
respecté, puis de me compter les lignes avec vrai en E.
Mon problème persiste dans ma formule de calcul j'obtiens 0.

Voici ma Macro corrigée :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" And
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
Cells(i, 5).Value = "VRAI"
Else
Cells(i, 5).Value = "FAUX"
End If
Next i
Range("F1").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

End Sub

Je suis pronneur des solutions des deux cas, s'il y a ?

Merci encore par avance de votre aide. Je continue de mon côté

Cordialement.
Avatar
michdenis
En VBA, la même formule donnerait ceci :

Tu adaptes le nom de la feuille et des plages de cellules.

'-------------------------------------
Sub test()
Dim X As String
With Worksheets("Feuil1")
X = "SUMPRODUCT((" & .Name & "!B1:B10=""D"")" & _
"*(" & .Name & "!A1:A10=""98Y00"")" & _
"*(" & .Name & "!A1:C10=""P1"")" & _
"*(" & .Name & "!D1:D10<=1))"
MsgBox Evaluate(X)
End With
End Sub
'-------------------------------------




"michdenis" a écrit dans le message de groupe de discussion :
ei6#
La formule était faite pour être inscrite dans une cellule !

Et si tu veux compter le nombre de ligne, modifie la formule
comme suit :

J'ai seulement enlevé la dernière condition
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10<=1))




"Alex" a écrit dans le message de groupe de discussion :

Re ou plutôt Bonsoir,

Je reviens à vous car, j'ai tenté avec une autre solution pour que
s'inscrive Vrai ou Faux en colonne E si les conditions étaient
respecté, puis de me compter les lignes avec vrai en E.
Mon problème persiste dans ma formule de calcul j'obtiens 0.

Voici ma Macro corrigée :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" And
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
Cells(i, 5).Value = "VRAI"
Else
Cells(i, 5).Value = "FAUX"
End If
Next i
Range("F1").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

End Sub

Je suis pronneur des solutions des deux cas, s'il y a ?

Merci encore par avance de votre aide. Je continue de mon côté

Cordialement.
Avatar
Alex
On 24 nov, 22:19, "michdenis" wrote:
La formule était faite pour être inscrite dans une cellule !

Et si tu veux compter le nombre de ligne, modifie la formule
comme suit :

J'ai seulement enlevé la dernière condition
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10< =1))

"Alex" a écrit dans le message de groupe de discussi on :

Re ou plutôt Bonsoir,

Je reviens à vous car, j'ai tenté avec une autre solution pour que
s'inscrive  Vrai ou Faux en colonne E si les conditions étaient
respecté, puis de me compter les lignes avec vrai en E.
Mon problème persiste dans ma formule de calcul j'obtiens 0.

Voici ma Macro corrigée :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
    If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" An d
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
       Cells(i, 5).Value = "VRAI"
    Else
       Cells(i, 5).Value = "FAUX"
    End If
Next i
Range("F1").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

End Sub

Je suis pronneur des solutions des deux cas, s'il y a ?

Merci encore par avance de votre aide. Je continue de mon côté

Cordialement.



Merci Denis, en effet, avec la deuxième, ca marche...
Je ne connaissais pas cette fonction. Et l'explication de la fonction
dans Excel ne m'aurait pas permis de la choisir (Explication pas
compréhensible). Les *, c'est pour dire ET ? Et pour une plage
indéterminée, Est ce que je peux mettre que les colonnes ?
Pourriez vous me donner aussi la solution en macro sous forme de
boucle, afin que j'étudie mes erreurs.
Grand merci
Alex
Avatar
Alex
On 24 nov, 22:26, "michdenis" wrote:
En VBA, la même formule donnerait ceci :

Tu adaptes le nom de la feuille et des plages de cellules.

'-------------------------------------
Sub test()
Dim X As String
With Worksheets("Feuil1")
    X = "SUMPRODUCT((" & .Name & "!B1:B10=""D"")" & _
        "*(" & .Name & "!A1:A10=""98Y00"")" & _
        "*(" & .Name & "!A1:C10=""P1"")" & _
        "*(" & .Name & "!D1:D10<=1))"
    MsgBox Evaluate(X)
End With
End Sub
'-------------------------------------

"michdenis" a écrit dans le message de groupe d e discussion :
ei6#
La formule était faite pour être inscrite dans une cellule !

Et si tu veux compter le nombre de ligne, modifie la formule
comme suit :

J'ai seulement enlevé la dernière condition
=SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10< =1))

"Alex" a écrit dans le message de groupe de discussi on :

Re ou plutôt Bonsoir,

Je reviens à vous car, j'ai tenté avec une autre solution pour que
s'inscrive  Vrai ou Faux en colonne E si les conditions étaient
respecté, puis de me compter les lignes avec vrai en E.
Mon problème persiste dans ma formule de calcul j'obtiens 0.

Voici ma Macro corrigée :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
    If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" An d
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
       Cells(i, 5).Value = "VRAI"
    Else
       Cells(i, 5).Value = "FAUX"
    End If
Next i
Range("F1").Select

ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

End Sub

Je suis pronneur des solutions des deux cas, s'il y a ?

Merci encore par avance de votre aide. Je continue de mon côté

Cordialement.




Encore une fois un Grand Merci à Denis.
Bonne soirée.
Alex
Avatar
Alex
On 24 nov, 22:51, Alex wrote:
On 24 nov, 22:26, "michdenis" wrote:





> En VBA, la même formule donnerait ceci :

> Tu adaptes le nom de la feuille et des plages de cellules.

> '-------------------------------------
> Sub test()
> Dim X As String
> With Worksheets("Feuil1")
>     X = "SUMPRODUCT((" & .Name & "!B1:B10=""D"")" & _
>         "*(" & .Name & "!A1:A10=""98Y00"")" & _
>         "*(" & .Name & "!A1:C10=""P1"")" & _
>         "*(" & .Name & "!D1:D10<=1))"
>     MsgBox Evaluate(X)
> End With
> End Sub
> '-------------------------------------

> "michdenis" a écrit dans le message de groupe de discussion :
> ei6#
> La formule était faite pour être inscrite dans une cellule !

> Et si tu veux compter le nombre de ligne, modifie la formule
> comme suit :

> J'ai seulement enlevé la dernière condition
> =SOMMEPROD((B1:B10="D")*(A1:A10="98Y00")*(A1:C10="P1")*(D1:D10< =1))

> "Alex" a écrit dans le message de groupe de discus sion :
>
> Re ou plutôt Bonsoir,

> Je reviens à vous car, j'ai tenté avec une autre solution pour que
> s'inscrive  Vrai ou Faux en colonne E si les conditions étaient
> respecté, puis de me compter les lignes avec vrai en E.
> Mon problème persiste dans ma formule de calcul j'obtiens 0.

> Voici ma Macro corrigée :

> Sub Compt()

> Dim nbligne As Long
> i = nbligne

> nbligne = Range("A2").CurrentRegion.Rows.Count

> For i = nbligne To 2 Step -1
>     If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" And
> Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
>        Cells(i, 5).Value = "VRAI"
>     Else
>        Cells(i, 5).Value = "FAUX"
>     End If
> Next i
> Range("F1").Select

> ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""=VRAI"")"

> End Sub

> Je suis pronneur des solutions des deux cas, s'il y a ?

> Merci encore par avance de votre aide. Je continue de mon côté

> Cordialement.

Encore une fois un Grand Merci à Denis.
Bonne soirée.
Alex- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Re Bonsoir à tous,

Ci-joint ma solution à ma deuxième proposition "d'étude" , et cela
fonctionne :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("A2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" And Cells(i, 1).Value = "98y00" And
Cells(i, 3).Value = "P1" And Cells(i, 4).Value >= 1 Then
Cells(i, 5).Value = "garde"
Else
Cells(i, 5).Value = "non"
End If
Next i
Range("F1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(C[-1],""garde"")"
End Sub


Voilou...
Alex
Avatar
Daniel.C
Bonsoir.
Essaie :

Sub test()
Dim Ligne As Long
Ligne = Application.Max(Range("A65000").End(xlUp).Row,
Range("A65000").End(xlUp).Row, _
Range("A65000").End(xlUp).Row, Range("A65000").End(xlUp).Row)
MsgBox Evaluate("sumproduct((A1:A" & Ligne & "=""98Y00"")*(B1:B" &
Ligne & "=""D"")*(C1:C" & _
Ligne & "=""P1"")*(D1:D" & Ligne & "<=1)*D1:D" & Ligne & ")")
End Sub

Daniel

Bonjour,

Je viens à vous, car je rencontre un problème avec la fonction NB.SI
avec 4 conditions que j'ai tenté de mettre dans une boucle.

Ce que je voulais, c'est obtenir le nombre de ligne d'une liste en
prenant comme conditions les arguments suivants :

Si en colonne B, la cellule a pour valeur "D"
et qu'en colonne A, la cellule a pour valeur "98Y00"
et qu'en colonne C, la cellule a pour valeur "P1"
alors
somme si en colonne D, la cellule a pour valeur <= 1

Ma macro :

Sub Compt()

Dim nbligne As Long
i = nbligne

nbligne = Range("a2").CurrentRegion.Rows.Count

For i = nbligne To 2 Step -1
If Cells(i, 2).Value = "D" Then
ElseIf Cells(i, 1).Value = "98y00" Then
ElseIf Cells(i, 3).Value = "P1" Then
ElseIf Cells(i,4).Value >= 1 Then
Range("F1").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(C[-2],"">=1"")"
Else: End If
Next i
End Sub



Au lieu d'obtenir, le résultat escompté, j'obtiens à chaque fois le
nombre de ligne superieur ou égal à 1 de ma colonne D, sans prise en
compte de mes conditions.

Je ne sais plus quoi faire, dois je abondonné la boucle ou est ce ma
formule de calcul qui n'est pas adaptée ?

Je vous remercie par avance, de votre aide.

Cordialement.
Alex


Avatar
michdenis
Pour de l'information supplémentaire sur la fonction "Sommeprod"
sur le site de Misange, tu pourras obtenir toute l'information que tu
désires :

http://www.excelabo.net/taxonomy/term/2171

http://www.excelabo.net/pasapas/sommeprod3

http://www.excelabo.net/pasapas/sommeprod2

http://www.excelabo.net/pasapas/sommeprod1