dénombrer avec conditions [CountIf]

  • Initiateur de la discussion Initiateur de la discussion pou pouille
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

pou pouille

Guest
Bonjour,
je fait appèle a vos service pour un problème avec la fonction CountIf utilisé dans une de mes macro.
Problème :
j'ai trois colonnes A,B,C
dans A (rien) , en B des donnée numériques, en C des données numériques avec un indice . exemple:
1 123
1 124
2 150
2 152
1 123 B
1 123 C

et cela sur plusieurs lignes ( au moins 300)

ce que je souhaiterai :
dans la colonne E dénombrer le nombre de 1 ( dans la ligne B) et pas d'indice dans le numéro de colonne C

pour l'instant dans mon fichier je compte le nombre de 1 , 2, 3 ... dans la colonne B mais sans pouvoir les différencier.
(dans mon code la boucle va jusqu'a 20000 parce que je peut avoir des boites avec comme numéro 10100)

je joins mon fichier.
Par avance merci.
Pou Pouille
 

Pièces jointes

Re : dénombrer avec conditions [CountIf]

merci pour la réponse.
mais le principe de la macro c'est que je récupère un fichier je le transforme avec le format que tu vien de voir, et ensuite je fait l'inventaire des composants ( qui sont appelé Repère TOPO) => nombre de composant pour chaque boite ( et le nombre de boite peut varier, voir ne pas y avoir toutes les boite ex : 1,2,5,19.. 10100), et ensuite je récupère le nom dans la cellule Référence GPAO .
( je ne sais pas si tu as éxécuter un peut ma macro ? elle donne une partie de l'idé mais ne peut faire la différence entre une boite avec l'indice B ou C justement à cause d'un seul critère pour la fonction CountIf)

encore merci pour avoir pris du temps pour travailler sur mon fichier.
Pou Pouille
 
Re : dénombrer avec conditions [CountIf]

Un grand merci à skoobi et Lii d'avoir réflichi sur ma Macro ^^
en effet c'est exactement ce que je souhaitais faire !
j'ai juste une petite réclamation ( oui une dernière ^^) serait-il possible de copier la colonne A qui correspond à chaque boite ? meme si ici il n'y as rien dans les cases A il faudrait les retrouver dans la colone E
je joint le petit exemple ,
en tout cas , encore un très grand merci
 

Pièces jointes

Re : dénombrer avec conditions [CountIf]

Re,

Je te propose ce code:

Code:
Sub Macro1()
Dim DicoBoite As Object, Boite As Range, DerLig As Integer, Lig As Integer, Elmnt As Variant
Application.ScreenUpdating = False
[E2:E65000].ClearContents
Set DicoBoite = CreateObject("Scripting.Dictionary")
DerLig = [B65000].End(xlUp).Row
'on identifie la liste unique des boites
For Each Boite In Range([B2], [B65000].End(xlUp))
   If Not DicoBoite.Exists(Boite.Value) Then DicoBoite.Add Boite.Value, Boite.Value
Next Boite

For Each Elmnt In DicoBoite.items
  Lig = [E65536].End(xlUp).Row + 1
  Range("E" & Lig).Value = Elmnt: Range("E" & Lig + 1).Value = Elmnt & "B": Range("E" & Lig + 2).Value = Elmnt & "C"
  Range("F" & Lig).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
  Range("F" & Lig + 1).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
  Range("F" & Lig + 2).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
Next
End Sub

Edit: ouppsss, j'avais pas édité, bonjour Lii 🙂
 
Re : dénombrer avec conditions [CountIf]

Un grand merci à skoobi et Lii d'avoir réflichi sur ma Macro ^^
en effet c'est exactement ce que je souhaitais faire !
j'ai juste une petite réclamation ( oui une dernière ^^) serait-il possible de copier la colonne A qui correspond à chaque boite ? meme si ici il n'y as rien dans les cases A il faudrait les retrouver dans la colone E
je joint le petit exemple ,
en tout cas , encore un très grand merci

Voici:

Code:
Sub Macro1()
Dim DicoBoite As Object, Boite As Range, DerLig As Integer, Lig As Integer, Elmnt As Variant
Dim Qte As Integer, QteB As Integer, QteC As Integer
Application.ScreenUpdating = False
[E2:E65000].ClearContents
Set DicoBoite = CreateObject("Scripting.Dictionary")
DerLig = [B65000].End(xlUp).Row
'on identifie la liste unique des boites
For Each Boite In Range([B2], [B65000].End(xlUp))
   If Not DicoBoite.Exists(Boite.Value) Then DicoBoite.Add Boite.Value, Boite.Value
Next Boite

For Each Elmnt In DicoBoite.items
  Lig = [E65536].End(xlUp).Row + 1
  Qte = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
  QteB = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
  QteC = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
  If Qte > 0 Then
    Range("E" & Lig).Value = Elmnt
    Range("F" & Lig).Value = Qte
    Range("G" & Lig).Value = Columns(2).Find(Elmnt, LookIn:=xlValues, lookat:=xlWhole).Offset(0, -1).Value
    Lig = Lig + 1
  End If
  If QteB > 0 Then
    Range("E" & Lig).Value = Elmnt & "B"
    Range("F" & Lig).Value = QteB
    Lig = Lig + 1
  End If
  If QteC > 0 Then
    Range("E" & Lig).Value = Elmnt & "C"
    Range("F" & Lig).Value = QteC
    Lig = Lig + 1
  End If
'  Range("E" & Lig).Value = Elmnt: Range("E" & Lig + 1).Value = Elmnt & "B": Range("E" & Lig + 2).Value = Elmnt & "C"
'  Range("F" & Lig).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
'  Range("F" & Lig + 1).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
'  Range("F" & Lig + 2).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
Next
End Sub
 
Re : dénombrer avec conditions [CountIf]

Un grand merci pour ce code c'est exactement je que je souhaitais faire ( en plus je m'était trompé dans la colonne cible qui n'était pas E mais bien G comme tu l'as écrit).
cela va me faire gagner 1 journée de préparation .
 
Re : dénombrer avec conditions [CountIf]

Re,

j'aurais ajouté à ma macro, les lignes en gras :
Code:
Next
  [B]For Each cel In Range("D2:D" & DerLi)
    For Each cl In Range("B2:B" & DerLi)
      If cel = cl Then Cells(cel.Row, "F") = cl.Offset(, -1): Exit For
    Next
  Next[/B]
End Sub

skoobi 😉 donne, judicieusement, un exemple de traduction de formules en macro.
 
Re : dénombrer avec conditions [CountIf]

bonjour le fil et dsl de revenir que maintenant mais lorsque j'ai tester les macro , j'avai pas de référence,
or cela fonctionne bien pour les cellules sans indice, cependant pour les indices B ou C cela ne fonctionne pas (il dénombre mais ne copie pas le code GPAO en cellule G).
cela vien du faite que dans le code de skoobi il n'y as pas cette ligne
Code:
Range("G" & Lig).Value = Columns(2).Find(Elmnt, LookIn:=xlValues, lookat:=xlWhole).Offset(0, -1).Value
pour les 2 autres if..., si je place cette ligne tel qu'elle il me copi systématiquement la première valeur trouvé or ce n'est pas ce que je souhaite.
et Lii j'ai essayer d'ajouter les lignes dans la macro d'orrigine mais je ne comprend pas bien ou les placer dsl .
merci d'avance pour vos réponses
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
20
Affichages
1 K
Réponses
8
Affichages
821
Retour