[réglé] Application.WorksheetFunction.CountIf

Jefekoi

XLDnaute Junior
Bonjour,

J'ai dans un onglet 2 colonnes où je voudrais récupérer des infos :

Dans la colonne Q j'ai des noms de poste
Dans le colonne M j'ai des résultats

Je voudrais chercher en Q un poste exemple : "Atelier A"
Et qu'il me dise combien il y a de résultat "Mauvais"

Sans passer par le filtre classique mais en utilisant uniquement une macro

J'ai réussi à sortir ceci :

TrucMuche= Application.WorksheetFunction.CountIf(Columns(Q), "Atelier A")

Mais comment faire pour avoir une condition : Si Colonne Q= "Atelier A" combien de "Mauvais il y a t-il ?


Merci pour votre aide

Eric
 

Fichiers joints

Jacky67

XLDnaute Accro
Bonjour,
Par exemple, dans une cellule
=SOMMEPROD((Q5:Q495="Atelier A")*(M5:M495="Mauvais"))
En VBA
VB:
Sub test()
      TrucMuch = [SUMPRODUCT((Q5:Q495="Atelier A")*(M5:M495="Mauvais"))]
      MsgBox TrucMuch
End Sub
 

Jefekoi

XLDnaute Junior
les 3 solutions fonctionnent merci

Question je voudrais remplacer Q2:Q10000 par son nom "Station" c'est une plage .

Comment puis-je procéder pour la colonne M c'est la plage "Status"

Merci

Bonne journée
 

cp4

XLDnaute Impliqué
Bonjour, remplacer q5 par q2
VB:
Option Explicit

Sub test()
   Dim dl As Integer, c As Range, i As Integer
   With Sheets("Report")
      dl = .Range("Q" & Rows.Count).End(xlUp).Row
      For Each c In .Range("Q2:Q" & dl)
         If c.Value = .Range("S1") Then
            If c.Offset(, -4).Value = "Mauvais" Then
               i = i + 1
            End If
         End If
      Next
      MsgBox "Pour l'" & .Range("S1") & " il y a " & i & " mauvais"
   End With
  
End Sub
 

Jacky67

XLDnaute Accro
les 3 solutions fonctionnent merci

Question je voudrais remplacer Q2:Q10000 par son nom "Station" c'est une plage .
Merci

Bonne journée
Re..
Dans ce cas, pour que les 2 plages aient la même longueur (obligatoire), il vaut mieux nommer les deux plages
Exemple avec les deux plages nommées dynamiquement en PJ
 

Fichiers joints

Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bonjour tous,
Perso je ne suis pas pour nommer chaque plages.
Je préfère insérer direct un tableau et le tour est joué rien d'autre à gérer.
[Tableau1[nom de entête de colonne]].select 'suffit pour sélectionner la bonne plage
Ceci même si on décale le tableau. (ajout de colonne ou de ligne avant l'entête)
Fichier avec exemple de Tableau1
Bruno
 

Fichiers joints

Jefekoi

XLDnaute Junior
Merci Messieurs vous êtes super :)

J'ai une question :
Si je choisi cette formule :
OP = [SUMPRODUCT((Status<>"")*(Station="Atelier A"))]
Le résultat est correct

Par contre si je fais comme cela :
Dim Poste As Variant
Poste = Array("Atelier A")
OP = [SUMPRODUCT((Status<>"")*(Station=Poste(0)))]
Le résultat ne fonctionne pas j'ai : #NOM?

Pourtant il me semble que c'est bon comme syntaxe .
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
S'il y a des parties variables dans l'argument de la méthode Evaluate on ne peut pas utiliser sa syntaxe par crochets droits.
Il faut Evaluate("SUMPRODUCT((Status<>"""")*(Station=""" & Poste(0) & """))")
 

Discussions similaires


Haut Bas