• Initiateur de la discussion Initiateur de la discussion mimiaqu
  • 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 !

M

mimiaqu

Guest
Bonsoir,

J'ai un problème avec la fonction COUNTIF, j'essaye de traduire la fonction
Code:
=NB.SI(B:B;B2)
en VBA j'ai essayé ce code mais ça marche pas

Code:
Worksheets("stat").Range("C1").Value = "occurences"
Worksheets("stat").Range("C2:C").FormulaR1C1 = "=COUNTIF(C[-1],RC[-1])"

Merci de votre aide
Cordialement,
 
Re : Countif

Merci pour votre réponse ,
le problème c'est que j'ai 21000 quand je lance la macro le pc plante ,
Auriez vous une autre manière d'écrire la fonction =NB.SI(B:B;B2),

Bien à vous
 
Re : Countif

Bonjour mimiaqu,

Un essai avec une tout autre méthode sans appliquer de formule mais avec un comptage direct par vba.

La macro "compter" se déclenche si on modifie une valeur dans la colonne B ou par un click sur le bouton "Compter". J'ai considéré que la colonne B a un en-tête.

NOTA: cocher la référence à "Microsoft Scripting Runtime" par le menu "Outils/Références..." de l'environnement de travail VBA.

Le code se trouve dans le module de code "Module1" et dans le module de code de la feuille "stat".

Code de "Module1":
VB:
Sub Compter()
Dim dico As New Scripting.Dictionary
Dim ValeursB, colB As Range, derB As Long, i As Long

With Sheets("stat")
  ' numéro de la dernière ligne remplie de la colonne B
  derB = .Cells(.Rows.Count, "b").End(xlUp).Row
  ' plage (range) des valeurs de la colonne B
  Set colB = .Range("B1:B" & derB)
  ' lecture du tableau dynamique contenant les valeurs de la colonne B
  ValeursB = colB.Value
  ' boucle sur le tableau des valeurs de la colonne B
  ' comptage des valeurs via le dico
  ' on exclut la 1ière valeur (i.e. l'en-tête)
  For i = 2 To derB
    ' on exclut aussi les valeurs vides de la colonne B
    If ValeursB(i, 1) <> "" Then dico(ValeursB(i, 1)) = dico(ValeursB(i, 1)) + 1
  Next i
  ' on construit les valeurs de la colonne C
  ' d'abord l'en-tête
  ValeursB(1, 1) = "occurences"
  ' puis Boucle: chaque valeurs dans le tableau des valeurs
  ' de la colonne B est remplacée par son occurence via le dico.
  For i = 2 To derB
    If ValeursB(i, 1) <> "" Then ValeursB(i, 1) = dico(ValeursB(i, 1))
  Next i
  ' écriture de tableau ValeursB (dont les valeurs ont
  ' été remplacées par leur occurences repectives)
  ' sur la feuille dans la colonne C
  .Range("c:c").Clear
  .Range("c1").Resize(derB, 1) = ValeursB
  ' Formatage
  .Range("c1").Resize(derB, 1).Borders.LineStyle = xlContinuous
  .Range("b1").Copy
  .Range("c1").PasteSpecial xlPasteFormats
  Application.CutCopyMode = False
End With
End Sub
 

Pièces jointes

Dernière édition:
Re : Countif

Merci beaucoup pour votre aide c'est exactement ce que je voulais ,

Petite confirmation:ce calcul la je compte l'utiliser pour faire la méthode ABC

1- Calcul d’occurrences (grâce a votre Macro encore MERCI )
2- faire un tableau croisé dynamique pour enlever les doublons
3- effectuer les calculs en %de part et Cumul d’occurrences dans le TCD

Pensez vous que c'est la bonne manière de procéder ou existe il une macro qui permet de faire la méthode ABC?

Bien à vous
 
- 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
5
Affichages
573
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
1 K
Retour