Calcul et depassement de capacité

Bonjour , j'ai ecris ce petit bout de code me permettant de generer une suite de 10 chiffres distincts (0 à 9) de sorte que:

le premier chiffre soit divisible par 1

le nombre formé par les deux seconds chiffres soient divisibles par 2

le nombre formé par les trois premiers chiffres soient divisibles par 3

le nombre formé par les quatre premiers chiffres soient divisibles par 4

ect.. jusqu'a ce que le nombre formé par les dix chiffres tous distincts soient divisibles par 10

Randomize
t = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
x = ""
3:
For i = 1 To 10
1:    p = t(Int(Rnd * 10))

  If InStr(x, p) > 0 Then
      GoTo 1
      Else
       x = x & p

         If Val(x) Mod Len(x) = 0 Then  '--> dépassement de capacité
           If Len(x) = 10 Then GoTo 4
           GoTo 2
           Else
           x = ""
             GoTo 3
         End If
   End If
2:
   Next
4:  MsgBox x
End Sub

le code me retourne bien la valeur souhaitée lorsqu'il plante pour depassement de capacité en allant sur la ligne indiqué en" dépassement de capacité " qui est x = 3816547290

Comment puis je y remedier sans changer la forme de mon bout de code ? il y a t une declaration de type de variable à ajouter sur x?

Merci pour vos suggestions

Bonjour,

l'instruction MOD travaille avec des nombres entiers (type long ou integer). La limite pour un nombre entier de type long est 2 147 483 647.

une proposition de correction de ton programme

Randomize
t = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
x = ""
3:
For i = 1 To 10
1:    p = t(Int(Rnd * 10))

  If InStr(x, p) > 0 Then
      GoTo 1
      Else
       x = x & p

         If Val(x) / Len(x) = Int(Val(x) / Len(x)) Then
           If Len(x) = 10 Then GoTo 4
           GoTo 2
           Else
           x = ""
             GoTo 3
         End If
   End If
2:
   Next
4:  MsgBox x

Merci H2so4 ca regle effectivement le petit soucis ...je m'appercois que la fonction MOD a ses limites

Bonjour,

pour satisfaire ma curiosité, j'ai fait un programme qui recherche toutes les solutions possibles.

Sub aargh()
    vasy
End Sub

Sub vasy(Optional n = 1, Optional s = "", Optional ns = 0)
    For i = 0 To 9
        If InStr(s, i) = 0 Then
            s = s & i
            If s / Len(s) = Int(s / Len(s)) Then
                If n = 10 Then
                    ns = ns + 1
                    Cells(ns, 1) = s
                Else
                    vasy n + 1, s, ns
                End If
            End If
            s = Left(s, Len(s) - 1)
        End If
    Next i
End Sub
Rechercher des sujets similaires à "calcul depassement capacite"