Calcul de couple de valeurs d'une plage

moteurV12

XLDnaute Occasionnel
Bonjour à tous,

Voici un fichier qui doit calculer les couples de valeurs dans une plage.
Le code vba entièrement paramétrable suivant les besoins, me semblait pourtant optimisé, mais lorsque je fais un test de comptage de couple de valeurs, le résultat est faux.

Dans l'exemple j'ai volontairement mis le 1 et le 3 dans toutes les combinaisons de chiffre et surprise sur 245 lignes il ne trouve le couple 1 - 3 que 151 fois.

Forcément une erreur c'est glissé dans le code mais je ne vois pas.

Merci de m'éclairer de vos lumières.
 

Pièces jointes

  • calcul de couple valeurs.xls
    71 KB · Affichages: 41
Dernière édition:

job75

XLDnaute Barbatruc
Re : Calcul de couple de valeurs d'une plage

Bonjour moteurV12, Caillou,

A priori cette formule en O2 fait l'affaire :

Code:
=SOMMEPROD(SIGNE(NB.SI(DECALER(A$2:E$2;LIGNE(A$2:E$246)-2;);P2)*NB.SI(DECALER(A$2:E$2;LIGNE(A$2:E$246)-2;);Q2)))
A tirer vers le bas.

A+
 

job75

XLDnaute Barbatruc
Re : Calcul de couple de valeurs d'une plage

Re,

Malgré la correction de Caillou, vos résultats ne sont pas corrects.

Fichier joint avec mes résultats par formule et par cette macro :

Code:
Private Sub CommandButton2_Click() 'job75
Dim P As Range, c As Range, n&, r As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set P = [A2].CurrentRegion.Rows
For Each c In Range("P2", Range("P" & Rows.Count).End(xlUp))
  n = 0
  For Each r In P
    If Application.CountIf(r, c) * Application.CountIf(r, c(, 2)) > 0 Then n = n + 1
  Next
  c(, -1) = n
Next
Application.Calculation = xlCalculationAutomatic
End Sub
A+
 

Pièces jointes

  • calcul de couple valeurs(1).xls
    81.5 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : Calcul de couple de valeurs d'une plage

Re,

Cette macro est plus rapide :

Code:
Private Sub CommandButton2_Click() 'job75
Dim P As Range, c As Range, n&, r As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set P = [A2].CurrentRegion.Rows
For Each c In Range("P2", Range("P" & Rows.Count).End(xlUp))
  n = 0
  For Each r In P
    If Application.CountIf(r, c) Then _
      If Application.CountIf(r, c(, 2)) Then n = n + 1
  Next
  c(, -1) = n
Next
Application.Calculation = xlCalculationAutomatic
End Sub
Fichier (2).

A+
 

Pièces jointes

  • calcul de couple valeurs(2).xls
    80 KB · Affichages: 40

moteurV12

XLDnaute Occasionnel
Re : Calcul de couple de valeurs d'une plage

Chapeau bas, pour la précision et pour le code.
En fait sans votre intervention je n'aurai pas vu l'erreur.
Donc un grand merci.

Nouveau challenge à relever......

J'aimerai extraire les couples possible en fonction des % de réussites.
Je m'explique

A 300% cela signifie que la plage contient AU MOINS 3 couples possible.
A 400% au moins 4 etc .....

Comment ressortir les couples correspondants ??
Je m'en gratte encore la tête :)
 

moteurV12

XLDnaute Occasionnel
Re : Calcul de couple de valeurs d'une plage

Bonjour Job75

En colonne S nous avons le % cumulé des couples de valeurs, si un couple obtient 100% cela signifie qu'il figure dans chaque ligne de la BD colonne A à E, donc a retenir.

Si on regarde le fichier, on voit en ligne 4 220% pour les 3 premiers couples, cela signifie qu'au moins 2 de ces 3 couples sont à retenir.

Pour être plus clair sur l'exemple du fichier que vous avez modifié, on souhaite sortir les 10 couples les plus representatifs de la BD. En l’occurrence ici les couples suivants.

1.3
1.8
1.6
1.13
3.8
3.6
3.13
6.8
6.13
8.13

Comment y parvenir en ne tenant compte que des % de la colonne S qui nous indiquera pour 700% qu'au moins 7 des 10 couples figures entre la ligne 2 et 22.
 

job75

XLDnaute Barbatruc
Re : Calcul de couple de valeurs d'une plage

Re,

Toujours pas clair, que voulez-vous afficher exactement ?

S'il s'agit d'afficher les couples pour lesquels les cumuls en colonne S sont inférieurs ou égaux à 700% :

- sélectionner les colonnes P:Q et cliquer sur Mise en forme conditionnelle

- formule de la MFC =$S1>700%

- couleur de police de la MFC : celle de la couleur de fond.

Le nombre 700% peut être placé dans une cellule pour le paramétrer.

A+
 

moteurV12

XLDnaute Occasionnel
Re : Calcul de couple de valeurs d'une plage

Merci de votre aide, mais cela ne correspond pas à la recherche.
Pour simplifier, à partir des % on doit établir des listes de 5 chiffres les + probables ensembles globalement, à mon avis il doit exister plusieurs solutions au problème, donc plusieurs fois une liste de 5 chiffres les plus probables entre eux pour correspondre à la BD qui contient forcement, elle, la bonne réponse de 5 chiffres.
 

moteurV12

XLDnaute Occasionnel
Re : Calcul de couple de valeurs d'une plage

5 chiffres, pas 6 ou 7 parce que la BD possède 5 chiffres pas 6 ni 7, tout dépends donc bien de la BD de A à E.
Quand je dis retrouver la ou les combinaisons les plus probables de la BD en fonction des % en colonne S.......tout est dit.

Si un couple à 50% cela signifie qu'il est bien présent 1 ligne sur 2 dans la BD, en recoupage il suffit de trouver l'autre couple qui permettra avec le précédent, de faire 100%, c'est à dire qu'a eux 2 ils seront présent sur toutes les lignes et ainsi de suite jusqu'a 1000% soit 10 couples ( 10 couples représentent bien au final 5 N°)
 

job75

XLDnaute Barbatruc
Re : Calcul de couple de valeurs d'une plage

Re,

Dans ce fichier (3) j'ai ajouté en colonne G la fréquence de chaque ligne de la BDD, c'est à dire le nombre de fois où les combinaisons de 2 chiffres se retrouvent dans les couples des colonnes P:Q.

Les fréquences de toutes les lignes sont égales à 10, c'est le nombre de combinaisons de 5 chiffres pris 2 à 2.

Toutes les combinaisons se retrouvent donc en colonnes P:Q, et une fois seulement (pas de doublon en colonnes P:Q).

Code:
Private Sub CommandButton2_Click() 'job75
Dim P As Range, col%, c As Range, n&, r As Range
Application.ScreenUpdating = False
Set P = [A2].CurrentRegion
col = P.Columns.Count + 2 'colonne G
P.Columns(col).ClearContents 'RAZ
For Each c In Range("P2", Range("P" & Rows.Count).End(xlUp))
  n = 0
  For Each r In P.Rows
    If Application.CountIf(r, c) Then
      If Application.CountIf(r, c(, 2)) Then
        r.Cells(, col) = r.Cells(, col) + 1
        n = n + 1
      End If
    End If
  Next
  c(, 0) = n
Next
[O:Q].Sort [O1], xlDescending, Header:=xlYes 'tri sur colonne O
P.Resize(, col).Sort P(, col), xlDescending, Header:=xlNo 'tri sur colonne G
End Sub
A+
 

Pièces jointes

  • calcul de couple valeurs(3).xls
    65.5 KB · Affichages: 31

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit