NB.SI avec 4 CONDITIONS dans BOUCLE

Le
Alex
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20624911
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"
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
Alex
Le #20625121
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.
Alex
Le #20625201
On 24 nov, 21:43, "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"
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
michdenis
Le #20625191
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"
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.
michdenis
Le #20625181
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" 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"
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.
Alex
Le #20625311
On 24 nov, 22:19, "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"
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
Alex
Le #20625401
On 24 nov, 22:26, "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" 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"
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
Alex
Le #20625581
On 24 nov, 22:51, Alex
On 24 nov, 22:26, "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" > 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" >
> 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
Daniel.C
Le #20625671
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


michdenis
Le #20626031
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
Publicité
Poster une réponse
Anonyme