Comptage de valeurs

Bonjour,

Je cherche à énumérer l'ensemble des défauts d'une production.

Chaque défaut à un code. Lorsque ce code est 1, la pièce est bonne.

Lorsque ce code est différent de 1, je veux compter combien de fois chaque défaut apparaît.

Dans le fichier que je joint, il y a trois codes défauts : 137; 17 et 31, mais je peux en avoir d'autres différents.

Dans le fichier que je joint

Ce que j'ai : Colonne A et B

Ce que je souhaite : Colonne F, G et H

Comment puis-je obtenir ce que je souhaite en VBA ?

Je vous remercie par avance pour vos propositions.

Anthony

15code-defaut.xlsx (12.30 Ko)

Bonjour lenovic,

Sans VBA, avec la formule NB.SI

= NB.SI (ta plage; ton critère)

Cordialement,

Merci xorsankukai pour ta proposition.

Cependant, je cherche également à ce que le code défaut soit identifié automatiquement., car il y en a beaucoup de différents dans les données que je dois traiter.

En gros je veux appuyer sur un bouton et obtenir à la fois l'ensemble des défauts avec sa description et le nombre de fois qu'ils apparaissent...

Bonjour le forum,

G2 :

=NB.SI(A:A;F2)

H2 :

=SI(LIGNE()-1>NB.SI($A$1:$A$1000;H$1);"";INDEX($B$1:$B$1000;PETITE.VALEUR(SI($A$1:$A$1000=H$1;LIGNE($B$1:$B$1000);"");LIGNE()-1)))

Formule matricielle à valider avec CTRL MAJ ENTREE

defauts

bonjour

salut xorsankukai et mbbp

sans aucune formule ni calcul ni VBA :

avec un TCD

9code-defaut.xlsx (17.63 Ko)

Si la description est unique par code :

H2 :

=INDEX(B:B;EQUIV(F2;A:A;0))

salut xorsankukai et jmd

defauts

Bonjour,

Je vous remercie pour votre aide.

Une dernière petite question, comment puis-je énumérer une fois, l'ensemble des valeurs de la colonne A (sauf la valeur 1) dans la colonne F ?

Ex :

131

31

17

Ensuite j'utiliserai les fonctions que vous me proposez pour leur associer le nombre de fois qu'ils apparaissent (Nb.SI) et leur description(INDEX)

Anthony

Bonsoir,

Du coup, je vois que tu n'as pas eu de solution VBA ! Pour combler cette lacune :

Sub RécapDéfauts()
    Dim Tdf(), d As Object, k, i%, j%, n%
    Set d = CreateObject("Scripting.Dictionary")
    With ActiveSheet
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If .Cells(i, 1) > 1 Then
                k = .Cells(i, 1) & "|" & .Cells(i, 2)
                If d.exists(k) Then
                    d(k) = d(k) + 1
                Else
                    d(k) = 1
                End If
            End If
        Next i
    End With
    If d.Count > 0 Then ReDim Tdf(d.Count, 2): n = 0
    For Each k In d.keys
        n = n + 1: Tdf(n, 0) = k: Tdf(n, 1) = CInt(d(k))
    Next k
    For i = 1 To n - 1
        For j = i + 1 To n
            If Tdf(j, 1) > Tdf(i, 1) Then
                Tdf(0, 0) = Tdf(j, 0): Tdf(0, 1) = Tdf(j, 1)
                Tdf(j, 0) = Tdf(i, 0): Tdf(j, 1) = Tdf(i, 1)
                Tdf(i, 0) = Tdf(0, 0): Tdf(i, 1) = Tdf(0, 1)
            End If
        Next j
    Next i
    For i = 1 To n
        k = Split(Tdf(i, 0), "|")
        Tdf(i, 0) = k(0): Tdf(i, 2) = k(1)
    Next i
    Tdf(0, 0) = "Code défaut": Tdf(0, 1) = "Quantité": Tdf(0, 2) = "Description"
    ActiveSheet.Range("J1").Resize(n + 1, 3).Value = Tdf
End Sub

L'affectation du résultat (dernière ligne) peut bien sûr se faire n'importe où, en remplaçant ActiveSheet par une autre feuille et Range("J1") par une autre cellule comme cellule supérieure gauche de la plage résultats.

Cordialement.

WOw Merci beaucoup MFerrand ! C'est tout à fait ce qu'il me faut !

Rechercher des sujets similaires à "comptage valeurs"