VB Script : Générer toutes les combinaisons avec répétition

Résolu/Fermé
Manudu44 Messages postés 2 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 16 août 2014 - Modifié par Manudu44 le 13/08/2014 à 21:41
Manudu44 Messages postés 2 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 16 août 2014 - 16 août 2014 à 14:50
L'objectif est de coder un script, sauvegardé au format .vbs, qui est capable d'énumérer toutes les combinaisons avec répétition d'une liste de caractères, en pouvant choisir la longueur des combinaisons.

Le résultat doit pouvoir être exploité sans le sauvegarder dans un fichier log.txt, afin, par exemple, de créer des dossiers qui serviront à ranger des documents (dans ce cas là, il est conseillé que la liste de caractère ne soit pas volumineuse).
A voir également:

1 réponse

Manudu44 Messages postés 2 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 16 août 2014
16 août 2014 à 14:50
Sujet résolu !
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")


txt_File_Location = fso.GetParentFolderName(wscript.ScriptFullName) + "\Permutations avec répétition.txt" 'Emplacement du fichier .txt de sauvegarde des résultat
If fso.FileExists(txt_File_Location) Then fso.DeleteFile txt_File_Location 'S'il existe déjà, le supprimer pour vider la liste de résultat
Set txt_File = fso.OpenTextFile(txt_file_location, ForWriting, true)

Longueur = InputBox("Entrez la longueur du résultat" + vbNewLine + vbNewLine + "Pour des raisons de code et de temps de calcul, vous êtes limité à 10 caratères." + vbNewLine + vbNewLine + vbNewLine + "Les caractères en trop seront tout simplement ignorés des opérations", "Entrée de la longueur du résultat", "3")
If Longueur = "" OR Longueur = "0" Then Erreur = WshShell.Popup("Veuillez entrer une valeur au dessus de 0", 5, "ERROR", 0 + 64) : WScript.Quit 'Si la variable n'a pas de valeur, quitter
Elements = Trim(InputBox("Entrez vos éléments, séparés par des virgules" + vbNewLine + vbNewLine + "Pour des raisons de code et de temps de calcul, vous êtes limité à 10 éléments." + vbNewLine + vbNewLine + vbNewLine + "Les éléments en trop seront tout simplement ignorés des opérations", "Entrée des éléments", "A, B, C"))
If Elements = "" Then Erreur = WshShell.Popup("Veuillez entrer une liste d'éléments" + vbNewLine + "comportant entre 1 et 10 caractères", 5, "ERROR", 0 + 64) : WScript.Quit 'Si la variable n'a pas de valeur, quitter

Elements = Replace(Elements, " ", "")
Cut = Split(Elements, ",")

If Len(Elements) = 1 Then txt_File.WriteLine Cut(0) : WScript.Quit 'S'il n'y a qu'un élément, l'écrire et quitter
Chaine = Cut(0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0) + Cut (0)
Chaine = Left(Chaine, Longueur)

For i = 1 to (UBound(Cut) + 1) ^ Longueur

   txt_File.WriteLine Chaine 'Ecrire le résultat

   If Left(Chaine, 1) = Cut(UBound(Cut)) Then
      Number_Left_1 = 0
      If Mid(Chaine, 2, 1) = Cut(UBound(Cut)) Then
         Number_Left_2 = 0
         If Mid(Chaine, 3, 1) = Cut(UBound(Cut)) Then
            Number_Left_3 = 0
            If Mid(Chaine, 4, 1) = Cut(UBound(Cut)) Then
               Number_Left_4 = 0
               If Mid(Chaine, 5, 1) = Cut(UBound(Cut)) Then
                  Number_Left_5 = 0
                  If Mid(Chaine, 6, 1) = Cut(UBound(Cut)) Then
                     Number_Left_6 = 0
                     If Mid(Chaine, 7, 1) = Cut(UBound(Cut)) Then
                        Number_Left_7 = 0
                        If Mid(Chaine, 8, 1) = Cut(UBound(Cut)) Then
                           Number_Left_8 = 0
                           If Mid(Chaine, 9, 1) = Cut(UBound(Cut)) Then
                              Number_Left_9 = 0
                              If Mid(Chaine, 10, 1) = Cut(UBound(Cut)) Then
                                 Number_Left_10 = 0
                              Else
                                 Number_Left_10 = Number_Left_10 + 1
                                 Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                                 Chaine = Left(Chaine, Longueur)
                              End If
                           Else
                              Number_Left_9 = Number_Left_9 + 1
                              Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                              Chaine = Left(Chaine, Longueur)
                           End If
                        Else
                           Number_Left_8 = Number_Left_8 + 1
                           Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                           Chaine = Left(Chaine, Longueur)
                        End If
                     Else
                        Number_Left_7 = Number_Left_7 + 1
                        Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                        Chaine = Left(Chaine, Longueur)
                     End If
                  Else
                     Number_Left_6 = Number_Left_6 + 1
                     Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                     Chaine = Left(Chaine, Longueur)
                  End If
               Else
                  Number_Left_5 = Number_Left_5 + 1
                  Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
                  Chaine = Left(Chaine, Longueur)
               End If
            Else
               Number_Left_4 = Number_Left_4 + 1
               Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
               Chaine = Left(Chaine, Longueur)
            End If
         Else
            Number_Left_3 = Number_Left_3 + 1
            Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
            Chaine = Left(Chaine, Longueur)
         End If
      Else
         Number_Left_2 = Number_Left_2 + 1
         Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
         Chaine = Left(Chaine, Longueur)
      End If
   Else
      Number_Left_1 = Number_Left_1 + 1
      Chaine = Cut(Number_Left_1) + Cut (Number_Left_2) + Cut (Number_Left_3) + Cut (Number_Left_4) + Cut (Number_Left_5) + Cut (Number_Left_6) + Cut (Number_Left_7) + Cut (Number_Left_8) + Cut (Number_Left_9) + Cut (Number_Left_10)
      Chaine = Left(Chaine, Longueur)
   End If

Next



Fin = WshShell.Popup("Fin des opérations", 5, "Traitement", 0 + 64)
0