Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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
 

Pièces jointes

  • exemple.xlsx
    20.3 KB · Affichages: 20

Jacky67

XLDnaute Barbatruc
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 Barbatruc
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 Barbatruc
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
 

Pièces jointes

  • exemple TrucMuch.xlsm
    54.5 KB · Affichages: 17
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
 

Pièces jointes

  • exemple (Y).xlsm
    32.5 KB · Affichages: 22

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) & """))")
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…