Aide pour formule complexe VBA

alex39b

XLDnaute Nouveau
Bonjour à tous,

Je me permets de venir à vous, car après avoir beaucoup consulté votre forum, j'ai trouvé de très bons conseils et de supers experts !!! Alors j'en appel à vos talents ;)

Voici ma problématique :

J'ai sur une feuille 1, un tableau à 2 colonnes, avec des chiffres allant de 1 à 4, horizontal (x) et vertical (y). A chacun des couples, un scoring leur est associé.

x 1 2 3 4
1 x 6 4 5
2 x x 2 3
3 x x x 5
4 x x x x

Pour le couple 1;2 (cellule C2), j'ai donc un scoring de 6, pour le couple 3;4 (cellule E4) j'ai un socring de 5.

Sur la feuille 2 de mon tableur excel, j'ai, grâce à une formule VBA, établi la liste de toutes les combinaisons possibles à 3 chiffres, avec les chiffres 1,2,3 et 4, sans répétition possible, ce qui me donne es combinaisons suivantes dans une seule colonne :

1 2 3
1 2 4
1 3 4
2 3 4

Sur la colonne d'à côté, et c'est là où cela devient complexe pour moi... je souhaiterais mettre en place une formule qui me permettrait d'obtenir la somme des scoring des couples de chacune de ces combinaisons.
Je m'explique... pour la combinaison 1 2 3, il y a 3 couples possibles : 1;2 (C2) / 1;3 (D2) et 2;3 (D3). Chacun de ces couples a un scoring (voir feuille 1), et dans ce cas on obtient : 6 + 4 + 2 = 12.

Je souhaiterais donc au final obtenir ceci :

1 2 3 12
1 2 4 ...
1 3 4 ...
2 3 4 ...

Je n'arrive pas à créer de relation avec la feuille 1
Je n'arrive pas à établir une formule me permettant de dissocier chacun des 3 couples dans chacune des combinaisons.
Je n'arrive pas à automatiser la somme des 3 scoring de chacun des 3 couples dans la colonne à côté de leur combinaison respective...
Je n'arrive pas à automatiser la duplication du résultat de la somme à chaque combinaison.

Merci beaucoup par avance pour votre expertise, j'espère avoir été le plus clair possible ;)
 
Dernière modification par un modérateur:

alex39b

XLDnaute Nouveau
Re : Aide pour formule complexe VBA

Bonjour,

J'ai ce fichier excel en pièce jointe, et cette formule VBA pour obtenir le résultat de la feuille 2 !

Sub Macro1()
lin = 1
col = 1
For m = 1 To 4
For n = m + 1 To 4
For o = n + 1 To 4
Cells(lin, col) = m & " " & n & " " & " " & o & " "
lin = lin + 1
If lin > 65536 Then
col = col + 3
lin = 1
End If
Next o
Next n
Next m
End Sub
 

Pièces jointes

  • fichier combinaisons.xlsm
    14.7 KB · Affichages: 41

Victor21

XLDnaute Barbatruc
Re : Aide pour formule complexe VBA

Bonjouralex39b, st007.

Par formule, en attendant plus simple, à tester en B1 de Feuil2 :
=INDEX(Feuil1!$B$2:$E$5;EQUIV(--STXT(A1;1;1);Feuil1!$A$2:$A$5;0);EQUIV(--STXT(A1;3;1);Feuil1!$B$1:$E$1;0))+INDEX(Feuil1!$B$2:$E$5;EQUIV(--STXT(A1;1;1);Feuil1!$A$2:$A$5;0);EQUIV(--STXT(A1;6;1);Feuil1!$B$1:$E$1;0))+INDEX(Feuil1!$B$2:$E$5;EQUIV(--STXT(A1;3;1);Feuil1!$A$2:$A$5;0);EQUIV(--STXT(A1;6;1);Feuil1!$B$1:$E$1;0))
 

alex39b

XLDnaute Nouveau
Re : Aide pour formule complexe VBA

Oula en effet, autant pour moi ça fonctionne bien, j'ai fait une erreur en la transposant à mon fichier dans la cellule.
Et si je souhaite augmenter à 5 le nombre de chiffre dans cette combinaison, quel en serait la modification de la formule ? car je ne saisit pas la fonction STXT.
Voir pj avec 5 chiffres.
Encore merci pour votre aide.
 

Pièces jointes

  • Copie de fichier combinaisons (2).xlsm
    16 KB · Affichages: 29

Victor21

XLDnaute Barbatruc
Re : Aide pour formule complexe VBA

Re,

--STXT(A1;1;1) renvoie le premier caractère de la chaîne en A1, et la transforme en nombre.
--STXT(A1;3;1) renvoie le premier caractère de la chaîne en A1, en partant du 3° et la transforme en nombre.

=INDEX(Feuil1!$B$2:$E$5;EQUIV(--STXT(A1;1;1);Feuil1!$A$2:$A$5;0);EQUIV(--STXT(A1;3;1);Feuil1!$B$1:$E$1;0))
renvoie l'équivalence pour les deux premiers caractères de la chaine en A1
Nb : les espaces entre les différents numéros de votre chaine ne simplifient rien, mais vous devriez pouvoir adapter cette formule avec votre (vos) nouvelle(s) exigence(s).
 

alex39b

XLDnaute Nouveau
Re : Aide pour formule complexe VBA

Encore merci pour votre réponse.
Pour être honnête je ne l'ai pas comprise. Pour exemple, en suivant votre explication sur STXT(A1;1;1) et STXT(A1;3;1) je ne vois pas à quoi cela correspond : STXT(A1;6;1), étant donné que la combinaison en A1 comportait précédemment 3 chiffres seulement, et non 6.
Pourriez-vous m'indiquer la formule qu'il faudrait adapter pour 5 chiffres s'il vous plait ? Afin que je puisse comparer les 2 et comprendre la différence apportée ?

Je souhaite aller jusqu'à 19 chiffres de cette façon, et j'aimerais pouvoir y arriver tout seul après, alors il m'est important pour moi de bien comprendre votre démarche. C'est un peu du chinois pour moi STXT, EQUIV, (x;y;z), INDEX... j'essai de comprendre, mais compliqué !

En tout cas merci pour votre patience.:eek:
 

Victor21

XLDnaute Barbatruc
Re : Aide pour formule complexe VBA

Re,

[...] je ne vois pas à quoi cela correspond : STXT(A1;6;1), étant donné que la combinaison en A1 comportait précédemment 3 chiffres seulement, et non 6.
Chacun des espaces entre vos chiffres compte, lui aussi, pour un caractère, d'où le nota bene de mon précédent post. Le 6° caractère correspond ici au 3° chiffre de la chaîne

[...]Je souhaite aller jusqu'à 19 chiffres de cette façon, et j'aimerais pouvoir y arriver tout seul
Il va falloir, à mon avis, vous mettre au VBA, car une formule pour 19 chiffres me semble relever de la douce rêverie :)
 

Discussions similaires

Réponses
5
Affichages
146

Statistiques des forums

Discussions
312 195
Messages
2 086 082
Membres
103 112
dernier inscrit
cuq-laet