Problème d'algorithme sur VBA

Bonjour à tous,

Afin de pouvoir l'utiliser dans un de mes fichiers Excel, j'ai voulu faire l'algorithme du théorème de Bézout:

"Deux entiers relatifs a et b sont premiers si et seulement si il existe deux entiers u et v tels que au+bv=1."

Cet algorithme a pour but de donner u et v, si on renseigne a et b. Il s'écrit ainsi:

Initialisation: - Prompt(a)

- Prompt(b)

Traitement: - r=0

- u=1

- While r≠1

~ a*u=m

~ MOD(m,b)=r

~ u+1=u

- WhileEnd

- u-1=u

- (1-m)/b=v

Résultats: - Afficher u et v

Mais voilà, j'ai quelques problèmes quand j'essai de rédiger cet algorithme sur VBA. Notamment avec les symboles ≠, + et -, * et /... Un message d'erreur apparaît dés que je tape l'un de ces symboles... De plus, quand je fais MOD(m,b) un message d'erreur apparaît également....

Voilà le problème, alors ce serait bien si vous pouviez m'aider svp.

Merci d'avance et bonne journée.

Bonjour et bienvenue,

Une remarque : "différent de" se note "<>" au lieu de ≠. Merci aussi de nous fournir un exemple de fichier avec ta macro.

D'accord, merci déjà pour ce premier point

Désolé, j'arrive pas à enregistrer mon programme à part, du coup j'en ai fait un copier coller:

Sub Bézout()

Prompt("a=") = a

Prompt("b=") = b

r = 0

u = 1

Do While (r <> 1)

a u = m

Mod(m,b) = r

u 1 = u

WhileEnd

u -1 = u

(-m+1)/b=m

End Sub

Et sur VBA, "Mod(m,b)" s'affiche en rouge, "(-m+1)/b=m" s'affiche également en rouge, le logiciel à remplacer lui même "u+1" en "u 1" (j'ai pas réussi à lui faire conserver le +), et je suis pas tout à fait sûr qu'il me donne les résultats u et v à la fin de l'algorithme...

Voilà, en espérant que cela va te permettre de m'aider plus facilement,

Et merci de bien vouloir m'aider...

Bonjour

J'ai essayé bien que je ne connais pas ce Bézout (Bézu oui)

Il faut inverser ta syntaxe

Quand tu marques a u = m

il faut m = a * u

A tester : attention en fonction des nombres : part dans une boucle infinie

une erreur sans doute mais je ne connais pas assez ce théorème

Sub test()
Dim NombreA As Long, NombreB As Long
Dim NombreU As Long, NombreV As Long
Dim NombreR As Long, NombreM As Long

  'NombreA = 17
  'NombreB = 23
  NombreA = Val(InputBox("Entrer le nombre A"))
  If NombreA = 0 Then Exit Sub
  NombreB = Val(InputBox("Entrer le nombre B"))
  If NombreB = 0 Then Exit Sub

  NombreR = 0
  NombreU = 1
  Do While NombreR <> 1
    NombreM = NombreA * NombreU
    NombreR = NombreM Mod NombreB
    NombreU = NombreU + 1
  Loop
  NombreU = NombreU - 1
  NombreV = (1 - NombreM) / NombreB
  MsgBox "U = " & NombreU & vbCr & "V = " & NombreV

End Sub

Merci beaucoup, ton programme fonctionne super bien!!

Mais, j'ai rien compris au langage dans lequel tu l'as écrit... n_n'

Tant pis, et merci encore!

Maintenant, est-ce qu'il serait possible de rentrer une cellule à la place de a et de fixer b=-26?

Et ensuite, on peut enregistrer le tout dans une cellule?

Désolé d'encore te déranger n_n''

Bonjour

Summm a écrit :

Mais, j'ai rien compris au langage dans lequel tu l'as écrit... n_n'

heeuuuu c'est bien toi qui a marqué cela

Summm a écrit :

Mais voilà, j'ai quelques problèmes quand j'essai de rédiger cet algorithme surVBA.

Une petite variante car ces problèmes de plantage m’intriguaient

j'ai été voir ici

http://www.apprendre-en-ligne.net/random/bezout.html

Sub test()
Dim NombreA As Long, NombreB As Long
Dim NombreU As Long, NombreV As Long
Dim NombreR As Long, NombreM As Long
Dim NombreVoulu As Long, LePGCD As Long

  NombreVoulu = 1

  NombreA = Val(InputBox("Enter le nombre A"))
  If NombreA = 0 Then Exit Sub
  NombreB = Val(InputBox("Enter le nombre B"))
  If NombreB = 0 Then Exit Sub

  LePGCD = Application.Gcd(NombreA, NombreB)

  If NombreVoulu / LePGCD <> NombreVoulu \ LePGCD Then
    MsgBox NombreVoulu & " n'est pas un multiple du PGCD de " & NombreA & " et de " & NombreB & vbCr & "PGCD(" & NombreA & ";" & NombreB & ") = " & LePGCD
    Exit Sub
  End If

  NombreR = 0
  NombreU = 1
  Do While NombreR <> NombreVoulu     '1
    NombreM = NombreA * NombreU
    NombreR = NombreM Mod NombreB
    NombreU = NombreU + 1
  Loop
  NombreU = NombreU - 1
  NombreV = (1 - NombreM) / NombreB
  MsgBox "U = " & NombreU & vbCr & "V = " & NombreV

End Sub

Bonjour

Pas vu ta question suivante

essayes

Sub test()
Dim NombreA As Long, NombreB As Long
Dim NombreU As Long, NombreV As Long
Dim NombreR As Long, NombreM As Long

  NombreA = Val(Range("A1"))
  If NombreA = 0 Then Exit Sub

  NombreB = -26

  NombreR = 0
  NombreU = 1
  Do While NombreR <> 1
    NombreM = NombreA * NombreU
    NombreR = NombreM Mod NombreB
    NombreU = NombreU + 1
  Loop
  NombreU = NombreU - 1
  NombreV = (1 - NombreM) / NombreB
  Range("B1") = NombreU
  Range("C1") = NombreV

End Sub

D'accord, d'accord

Donc, j'ai bien utilisé tout ça, et du coup j'ai réussi à utiliser cet algorithme et les autres choses qu j'avais fait à coté pour faire un système de décryptage de texte codé deux à deux. (Pour les cours de Spé Maths n_n) Encore merci!

Bye.

Rechercher des sujets similaires à "probleme algorithme vba"