VBA problème avec fonction nombre premier
Filipensky
Messages postés
46
Statut
Membre
-
Bryan -
Bryan -
Bonjour,
J'ai un problème avec VBA Acces 2007, j'essaie de faire marcher cette fonction depuis des heures et je ne comprends pas ce que je pourrais modifier ??
' 5.9 : Les nombres premiers
Function DétermineNombrePremier(NB As Long) As Boolean
'Déclaration des variables
Dim vDiv
If DétermineNombrePremier < 4 Then
DétermineNombrePremier = True
Else
If DétermineNombrePremier = 0 Then
DétermineNombrePremier = False
Else
vDiv = 3
Do While (vDiv ^ 2 <= DétermineNombrePremier) And (DétermineNombrePremier Mod vDiv > 0)
vDiv = vDiv + 2
Loop
DétermineNombrePremier = (vDiv ^ 2 > DétermineNombrePremier)
End If
End If
End Function
Sub NombrePremier()
'Déclaration des variables
Dim vRep
Dim vNb As Long
Dim vTest As Variant
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Do While vTest <> ""
If IsNumeric(vTest) Then
vNb = vTest
vRep = DétermineNombrePremier(vNb)
If vRep Then
MsgBox vNb & "est un nombre premier"
Else
MsgBox vNb & " n'est pas un nombre premier"
End If
Else
MsgBox "Vérifier votre saisie"
End If
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Loop
MsgBox "Annulation de l'opération"
End Sub
Le problème est qu'il détermine à tous coups que le nombre entré est plus petit que quatre.
J'ai un problème avec VBA Acces 2007, j'essaie de faire marcher cette fonction depuis des heures et je ne comprends pas ce que je pourrais modifier ??
' 5.9 : Les nombres premiers
Function DétermineNombrePremier(NB As Long) As Boolean
'Déclaration des variables
Dim vDiv
If DétermineNombrePremier < 4 Then
DétermineNombrePremier = True
Else
If DétermineNombrePremier = 0 Then
DétermineNombrePremier = False
Else
vDiv = 3
Do While (vDiv ^ 2 <= DétermineNombrePremier) And (DétermineNombrePremier Mod vDiv > 0)
vDiv = vDiv + 2
Loop
DétermineNombrePremier = (vDiv ^ 2 > DétermineNombrePremier)
End If
End If
End Function
Sub NombrePremier()
'Déclaration des variables
Dim vRep
Dim vNb As Long
Dim vTest As Variant
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Do While vTest <> ""
If IsNumeric(vTest) Then
vNb = vTest
vRep = DétermineNombrePremier(vNb)
If vRep Then
MsgBox vNb & "est un nombre premier"
Else
MsgBox vNb & " n'est pas un nombre premier"
End If
Else
MsgBox "Vérifier votre saisie"
End If
vTest = InputBox(Prompt:="Entrer un nombre", Title:="Nombre premier")
Loop
MsgBox "Annulation de l'opération"
End Sub
Le problème est qu'il détermine à tous coups que le nombre entré est plus petit que quatre.
1 réponse
-
bonjour
tu écris
If DétermineNombrePremier < 4 Then
DétermineNombrePremier = True
Déterminenombrepremioer est un booléen toujours égal au départ à faux donc à 4 ( puisqu'à la rigueur faux*1=0...)
de m^me
Do While (vDiv ^ 2 <= DétermineNombrePremier) me parait bien mystérieux...
Michel-
re, voici une petite démo avec le test de primarité de nos très lointains aîeux:
Function estnbreprem(nbre As Long) As Boolean Dim cptr As Long For cptr = 2 To nbre - 1 If nbre Mod cptr = 0 Then estnbreprem = False Exit Function End If Next estnbreprem = True End Function
testé avec 65537, nbre premier; mais ca pédale pas mal avec de plus grands nombre premiers comme 39916801 -
-
Voici mon petit teste de primarité si cela peut aider qqn;
Dim nbATester As Integer
Dim c As Integer
Dim div As Single
Dim divEntier As Integer
Dim nbdiv As Integer
nbATester = InputBox("Entrer le nombre à tester")
For c = 1 To nbATester
div = nbATester / c
divEntier = Int(div)
'Si les la division est égale à la int(division)
'Acrémentation d'un compteur.
If div = divEntier Then
nbdiv = nbdiv + 1
End If
Next
'Si le compteur est égal à 2 ( donc si il y a 2 diviseur), c'est un nombre premier
If nbdiv = 2 Then
MsgBox (nbATester & " est premier")
Else
MsgBox (nbATester & " n'est pas premier")
End If
-