sommeprod nb si est ce possible ?

papat

XLDnaute Occasionnel
bonjour le forum.
D'après vous de quelle formule je dois me servir pour compter le nombre de paire en colonne G ?
Par exemple la paire (1,2) est plus fréquente que la paire (1.9).
Pour un peu plus de précision le numéro de la course est en colonne B et la date de la course est en colonne A.
PS:le numéro de la course est unique à cette date là !
merci de vos lectures ... et de vos réponses.
 

Pièces jointes

  • recherche formule.xls
    502 KB · Affichages: 60

job75

XLDnaute Barbatruc
Bonsoir papat, JHA, CISCO, le forum,

Je n'avais tout simplement pas compris le problème mais le travail de JHA m'a éclairé.

Alors voici une solution VBA avec ce code dans Module1 qui fonctionne sur toute version Excel acceptant le Dictionary :
Code:
Sub Comptage(w As Worksheet) 'macro paramétrée
Dim derlig&, t, d As Object, i&, x$, a(), n, j, p, y$, q, z$
Application.ScreenUpdating = False
w.Range("R2:U" & w.Rows.Count) = "" 'RAZ de la zone de restitution
If w.FilterMode Then w.ShowAllData 'si la feuille est filtrée
w.[A:P].Sort w.[A1], xlDescending, w.[B1], , xlAscending, Header:=xlYes 'tri
derlig = w.Range("A" & w.Rows.Count).End(xlUp).Row + 1 'une ligne vide en plus
t = w.Range("A1:G" & derlig) 'matrice, plus rapide
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To derlig
  x = t(i, 1) & t(i, 2)
  Erase a: n = 0
  For j = i To derlig
    If t(j, 1) & t(j, 2) <> x Then
      If n Then
        tri a, 1, n 'tri croissant
        For p = 1 To n - 1
          y = "'" & a(p)
          For q = p + 1 To n
            z = y & "-" & a(q)
            d(z) = d(z) + 1 'comptage des paires
        Next q, p
      End If
      i = j - 1
      Exit For
    End If
    If t(j, 7) <> "" Then
      n = n + 1
      ReDim Preserve a(1 To n)
      a(n) = t(j, 7)
    End If
Next j, i
If d.Count = 0 Then Exit Sub
'---restitution---
With w.[R2].Resize(d.Count, 4)
  .Columns(1) = Application.Transpose(d.keys)
  .Columns(2) = Application.Transpose(d.items)
  .Columns(1).TextToColumns .Columns(3), xlDelimited, Other:=True, OtherChar:="-" 'commande Convertir
  .Sort .Columns(2), xlDescending, .Columns(3), , xlAscending, .Columns(4), xlAscending, Header:=xlNo 'tri
  .Columns(3).Resize(, 2) = ""
End With
End Sub

Sub tri(a, gauc, droi)    ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Elle se lance par cette macro dans le code de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [A:B,G:G]) Is Nothing Then Comptage Me
End Sub
S'il y a plusieurs feuilles structurées de la même manière placer ce dernier code dans chacune des feuilles.

L'exécution est très rapide car on utilise le Dictionary et des tableaux VBA.

Fichier joint.

Edit : je paramètre la macro Comptage, c'est mieux s'il y a d'autres macros.

A+
 

Pièces jointes

  • Comptage des paires par VBA(1).xls
    494 KB · Affichages: 28
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour papat, le forum,

J'ai ajouté ces codes pour trier comme on veut le tableau des résultats :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [R1:S1]) Is Nothing Then Cancel = True: Classement Target
End Sub
Code:
Sub Classement(c As Range) 'macro paramétrée
Application.ScreenUpdating = False
If c.Parent.FilterMode Then c.Parent.ShowAllData 'si la feuille est filtrée
With IIf(c(2) Like "*-*", c(2), c(2, 0)).Resize(c.Parent.Rows.Count - 1, 4)
  If .Cells(1) = "" Then Exit Sub
  .Columns(3).Resize(, 2) = ""
  .Columns(1).TextToColumns .Columns(3), xlDelimited, Other:=True, OtherChar:="-" 'commande Convertir
  .Sort .Columns(3), xlAscending, .Columns(4), , xlAscending, Header:=xlNo
  If Not c(2) Like "*-*" Then .Sort .Columns(2), xlDescending, Header:=xlNo
  .Columns(3).Resize(, 2) = ""
End With
End Sub
Fichier (2).

Bonne journée.
 

Pièces jointes

  • Comptage des paires par VBA(2).xls
    486 KB · Affichages: 63
Dernière édition:

papat

XLDnaute Occasionnel
Bonjour le forum,JOB75, Cisco,JHA
je cherche depuis 2 jours à utiliser les macros que m'a créé JOB75.
j'arrive à les placer dans un module avec un copier coller mais quand je veux les exécuter , rien ne se passe.
j'ai 89 messages , ceci explique cela.
quelqu'un peut il me faire un pas à pas qui me permettra d'installer ce code et de m'en servir ?
faut il retoucher la feuille qui recevra la macro avant de la lancer ?
en attendant merci de votre aide.
 

job75

XLDnaute Barbatruc
Bonjour papat, le forum,

Il est toujours mieux de trouver les choses par soi-même quand on veut progresser.

J'espère que vous avez aussi compris qu'il y a une MFC sur les colonnes R:S pour la couleur et les bordures.

Bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 326
Messages
2 087 312
Membres
103 513
dernier inscrit
adel.01.01.80.19