Concevoir une boucle combinatoire.

machin

XLDnaute Nouveau
Bonjour,

Je considère "A" la cellule F2, "B" la cellule N2, "C" la cellule V2, "D" la cellule AD2, "E" la cellule AL2 et "F" la cellule AT2.
Les cellules F2, N2, V2, AD2, AL2, AT2 sont le résultat d'un calcul.
Avec pour condition A > 19, B<-15, C<-31, D<-24, E<-18, F>19
En cellule AX2 je désire explorer tous les tests combinatoires de A à F
Exemple:
Test1= si(ou(A>19;B<15);1;"")
Test2= si(ou(A>19;C<-31);1;"")
Test3= si(ou(A>19;D<-24);1;"") etc….
Je n'arrive pas a modéliser cette combinatoire, si quelqu'un pouvait me mettre sur une piste ce serait génial.

Je joins un petit fichier

Merci par avance
 

Pièces jointes

  • Boucle_Combinatoire.xlsm
    83.9 KB · Affichages: 85

Misange

XLDnaute Barbatruc
Re : Concevoir une boucle combinatoire.

Bonjour


tu ne nous dis rien des bornes supérieures pour A et F et inférieures pour les autres ? Tu fais tes combinaisons jusqu'à l'infini donc ? Ca risque d'être long !!!


Ta question n'est vraiment pas claire pour moi. Tu ne peux pas récupérer successivement dans une cellule AX2 le résultat de toutes les combinaisons de tests possibles.
Que cherches tu ? Les combinaisons de valeurs A à F) qui répondent à toutes les conditions en même temps ?
dans ce cas ce serait plutot avec des ET : =si(et(A>19;B<-15;C<-31....
Pourquoi veux tu faire cela en VBA ?
 

machin

XLDnaute Nouveau
Re : Concevoir une boucle combinatoire.

Bonjour,

Pour être plus clair,
Un petit bout de code mais en pas à pas.

Sub Macro1()

Dim strFormula As String

'test1
strFormuleA = "=IF(OR(RC[-44]>19,RC[-36]<-15),RC[-47],"""")"
Range("AX2:AX301").FormulaR1C1 = strFormuleA
Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value

'test2
strFormuleA = "=IF(OR(RC[-44]>19,RC[-28]<-31),RC[-47],"""")"
Range("AX2:AX301").FormulaR1C1 = strFormuleA
Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value

'test3
strFormuleA = "=IF(OR(RC[-44]>19,RC[-20]<-24),RC[-47],"""")"
Range("AX2:AX301").FormulaR1C1 = strFormuleA
Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value

'test4
strFormuleA = "=IF(OR(RC[-44]>19,RC[-12]<-18),RC[-47],"""")"
Range("AX2:AX301").FormulaR1C1 = strFormuleA
Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value

'test5
strFormuleA = "=IF(OR(RC[-44]>19,RC[-4]>19),RC[-47],"""")"
Range("AX2:AX301").FormulaR1C1 = strFormuleA
Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value


End Sub
 

Misange

XLDnaute Barbatruc
Re : Concevoir une boucle combinatoire.

C'est déjà ce que tu as mis dans ton fichier joint, donc tes "explications" ne nous éclairent pas plus !
que veux tu faire au juste ? Comment veux tu ensuite exploiter le résultat de tes tests ? Tu nous dis que tu veux le résultat dans la cellule AX2 mais quel résultat ? du test 1 ou du 4 ou ????
 

machin

XLDnaute Nouveau
Re : Concevoir une boucle combinatoire.

Bonjour,

Une copie des résultats est réalisée lors de chaque test afin d'exploiter les effets des différentes combinatoires (la copie des résultats ce n'est pas le problème).
La problématique est la suivante: ce que je cherche a faire c'est de mettre sous forme de variable
A = RC[-44]>19
B = RC[-36]<-15
C= RC[-28]<-31
D= RC[-20]<-24
E= RC[-12]<-18
F= RC[-4]>19
dans le but de réaliser les différentes combinatoires dans la formule en AX2.

Merci de te pencher sur mon problème.
 

pierrejean

XLDnaute Barbatruc
Re : Concevoir une boucle combinatoire.

Re

Salut à tous

A tester:

Code:
Sub test()
conditions = Array("F2>19", "N2<-15", "V2<-31", "AD2<-24", "AL2<-18", "AT2>19")
For n = LBound(conditions) To UBound(conditions)
  For m = LBound(conditions) + 1 To UBound(conditions)
   If m <> n Then
    formule = "=SI(OU(" & conditions(n) & ";" & conditions(m) & ");C2;"""")"
    Range("AX2:AX301").FormulaLocal = formule
    Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value
   End If
   Next
Next
End Sub
 
Dernière édition:

machin

XLDnaute Nouveau
Re : Concevoir une boucle combinatoire.

Désolé mais je reviens,

Erreurs dans les résultats
je tente de faire tourner le programme de pierrejean avec 3 variables mais je n'arrive pas a lui faire comprendre que "o" doit être > "m", avec ce qui est modifié les boucles se font normalement jusqu'à ce que m=2 et o redémarre de 2 au lieu de 3
exemple pour la boucle 1 et respectivement pour n, m et o on obtient 0, 1 et 2
pour la boucle 2: 0, 1 et 3
pour la boucle 3: 0, 1 et 4
pour la boucle 4: 0, 1 et 5
pour la boucle 5: 0, 1 et 6
pour la boucle 6: 0, 2 et 2 (nous avons m=2, et o commencera toujours de 2)

Merci pour tout

Code:
Sub test3()
Range("AZ2:BF1000").ClearContents
 conditions = Array("F2>19", "N2<-15", "V2<-31", "AD2<-24", "AL2<-18", "AT2>19")
 For n = LBound(conditions) To UBound(conditions)
   For m = LBound(conditions) + 1 To UBound(conditions)
      For o = LBound(conditions) + 2 To UBound(conditions)
    If o <> m And m <> n Then
     formule = "=SI(OU(" & conditions(n) & ";" & conditions(m) & ";" & conditions(o) & ");C2;"""")"
     Range("AX2:AX301").FormulaLocal = formule
     Range("AZ1000").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value
    End If
        Next
    Next
 Next
 End Sub
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Concevoir une boucle combinatoire.

Re

Teste comme ceci:

Code:
Sub test()
conditions = Array("F2>19", "N2<-15", "V2<-31", "AD2<-24", "AL2<-18", "AT2>19")
For n = LBound(conditions) To UBound(conditions)
  For m = LBound(conditions) To UBound(conditions)
   If m <> n Then
    For o = LBound(conditions) To UBound(conditions)
     If o <> m And o <> n Then
      formule = "=SI(OU(" & conditions(n) & ";" & conditions(m) & ";" & conditions(o) & ");C2;"""")"
      Range("AX2:AX301").FormulaLocal = formule
      Range("AZ100").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value
     End If
    Next
   End If
 Next
Next
End Sub
 

machin

XLDnaute Nouveau
Re : Concevoir une boucle combinatoire.

pierrejean,

J'ai trouvé la solution suivante au niveau du test,
Encore merci pour ta patience.

Code:
Sub test3()

Range("AZ2:BF1000").ClearContents

 conditions = Array("F2>19", "N2<-15", "V2<-31", "AD2<-24", "AL2<-18", "AT2>19")
 
 For n = LBound(conditions) To UBound(conditions)
   For m = LBound(conditions) + 1 To UBound(conditions)
      For o = LBound(conditions) + 2 To UBound(conditions)
      
    If o > m And m > n Then
     formule = "=SI(OU(" & conditions(n) & ";" & conditions(m) & ";" & conditions(o) & ");C2;"""")"
     Range("AX2:AX301").FormulaLocal = formule
     Range("AZ1000").End(xlUp)(2).Resize(1, 6).Value = Range("AZ1:BE1").Value
    End If
    
        Next
    Next
 Next
 End Sub
 

Statistiques des forums

Discussions
312 164
Messages
2 085 872
Membres
103 007
dernier inscrit
salma_hayek