Etendre une instruction

Bonjour

Une petite question pour le code suivant qui utilise 3 variables i ,j et s

dim p as integer

For i = 1 To p
For j = 1 To p
For s = 1 To p
If i <> j And i <> s And j <> s And i < j And i < s And j < s Then
Range("G65535").End(xlUp).Offset(1, 0) = Cells(i, 1) & Cells(j, 1) & Cells(s, 1)
End If
Next
Next
Next

comment réecrire le meme type de code avec un nombre de variables qu'on peut choisir de definir ?

Merci pour vos réponses

Bonjour,

1- A quoi sert ce code? Que fait-il exactement?

2- la ligne :

If i <> j And i <> s And j <> s And i < j And i < s And j < s Then

Pourrait avantageusement être remplacée par :

If i < j And j < s Then

Car si i est inférieur strictement à j et que j est inférieur strictement à s

Alors

i est différent de j

i est différent de s

j est différent de s

i est inférieur à s

bonjour , ce code sert à générer des combinaisons de caractères , par exemple si j'ai 7 caractères et je veux la liste de toutes les combinaisons qui forment les facons de reunir 1,2,3,4,..7 .etc caracteres parmi les 7 . je voudrait pourvoir modifier le nombre de caractères ( c'est pas difficile ) par contre , le plus dur etant d'ecrire en vba les choix de 1,2,3,4,..7 parmi 7 (c'est qu'un exemple)

le voici en plus complet

Sub calcul()
Dim i, p As Integer

p = InputBox("nombre d'elements: ")

For i = 1 To p

Cells(i, 1) = InputBox("saisir la " & i & " ième valeur : ")

Next

For i = 1 To p
   For j = 1 To p
     For s = 1 To p
       If i <> j And i <> s And j <> s And i < j And i < s And j < s Then
       Range("G65535").End(xlUp).Offset(1, 0) = Cells(i, 1) & Cells(j, 1) & Cells(s, 1)
       End If
     Next
  Next
Next

End Sub

mon code marche pour 3 caracteres à choisir parmi 7 , je voudrais le transformer si par exemple je souhaite avoir le nombre de combinaisons pour 2,4,5,6 ou 7 caractères parmi 7

Bon alors, je sais que cette macro n'a plus rien à voir, mais essaye là et dis moi si le résultat te conviens...

'A déclarer en entête de votre Module
Dim Tb(), IndTab As Long

Sub Appel_Combinaisons()
Dim i As Integer, p As Integer
Dim Chaine As String, Lettre As String

Erase Tb
IndTab = 0

p = InputBox("nombre d'elements: ")
For i = 1 To p
   Lettre = InputBox("saisir la " & i & " ième valeur : ")
   Chaine = Chaine & Lettre
Next
' La procédure Combiner a besoin de deux paramètres :
' La chaine : strText
' La sous chaine permettant la permutation : debut
' Celle-ci, lors de l'appel est bien évidemment vide
Combiner Chaine, ""
Range("G65535").End(xlUp).Offset(1, 0).Resize(UBound(Tb)) = Application.Transpose(Tb)
End Sub

Sub Combiner(strText As String, debut As String)
Dim i As Integer

If Len(strText) = 1 Then ' Lorsque la longueur de strText égale 1
    ' On stocke la chaine composée de : debut et strText
    ReDim Preserve Tb(IndTab)
    Tb(IndTab) = debut & strText
    IndTab = IndTab + 1
Else
    For i = 1 To Len(strText)
        ' On envoie le premier caractère de la sous-chaine strText au bout
        Combiner Mid(strText, 2, Len(strText) - 1), debut & Mid(strText, 1, 1)
        ' Travail sur la chaine de caractères
        strText = Mid(strText, 2, Len(strText) - 1) & Mid(strText, 1, 1)
    Next
End If
End Sub

Note : Lorsque tu déclares plusieurs variables sur une même ligne, il convient de toutes les typer. Sinon, celles que tu ne typeras pas seront déclarées As Variant.

Dimi, p As Integer est équivalant à : Dim i As Variant, p As Integer

Merci pikaju , j'en aurait pas fait autant ! ceci dit en testant ton code j'ai une erreur sur la ligne

Erase Tb

et sur la ligne

ReDim Preserve Tb(IndTab)

Curieux, très curieux...

Erase, ReDim et Preserve ne sont pas des mots-clés sources d'erreurs...

Sauf...

As tu déclaré, en entête du module, Dim Tb(), IndTab As Long?

Sinon, essaye ce fichier :

14combinaisons.zip (10.45 Ko)

Il fonctionne bien chez moi...

merci , je viens de tester votre fichier , il fonctionne mais ce n'est pas exactement ce qu'il me faut , en fait je dois pouvoir choisir par exemple la longueur de caractères à prendre parmi 7 caractères , je vais me debrouiller avec votre fichier et essayer de trouver une facon d'y adapter mon souhait en vous remerciant d'avoir passé du temps sur mon post

Bonjour,

Pas de souci.

Si tu rencontres un problème pour adapter, tu dis...

A++

Rechercher des sujets similaires à "etendre instruction"