Concevoir une boucle combinatoire.

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

machin

Guest
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

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 ?
 
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
 
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 ????
 
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.
 
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:
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 modification par un modérateur:
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
 
Re : Concevoir une boucle combinatoire.

Toujours la même chose, o débute par 2 a chaque changement de m, en soit ce n'est pas gênant s'il ne copiait les résultats, mais le test ne verrouille pas l'écriture.

Encore merci
 
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
 
- 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

M
Réponses
3
Affichages
1 K
Menstru LH
M
Réponses
1
Affichages
1 K
S
Réponses
0
Affichages
610
S
E
  • Question Question
Réponses
4
Affichages
2 K
enzo_s
E
M
Réponses
20
Affichages
3 K
massol
M
Retour