1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| Dim borneSup As Double 'La borne Supérieur de l'interval à étudier
Dim valEtudier As Double 'La valeur étudier par la boucle du programme
Dim numLigne As Single 'Le numéro de la ligne où la valeur sera saisie
Sub NombrePremier()
Range("A1").Select 'Sélectionne la permière case du tableau (permet de toujours afficher les données en haut à gauche de la feuille active)
' Afficher "Veuillez procéder à la saisie de la borne supérieur de l'interval à étudier (la borne inférieur sera toujours prise égale à 1)." 'Saisie de la borne supérieur de l'interval par l'utilisateur
Saisir borneSup (Cette commande renvoi à une fonction existane et ne pose pas de problème)
If borneSup <= 1 Then 'Défintion du domaine de l'étude.
MsgBox "La valeur saisie ne permet pas de former un interval entre 1 et un nombre positif supérieur. Veuillez saisir une valeur réelle supérieur à 1."
Else
valEtudier = 1 'Borne Basse de l'interval, valeur de départ de notre étude
numLigne = 1 'Numéro de la 1 ère ligne ou seront rentrés les nombres premiers
While valEtudier <= borneSup 'Mise en place D'une boucle qui va étudier tous les nombres entiers entre 1 et la borne supérieur définie par l'utilisateur
Select Case valEtudier 'Etude des différents cas possible
Case valEtudier = 1 'Cas où la valeur traité est 1 et donc sans antécédent premier
Cells(1, 1) = 1 'Saisie du premier nombre premier (1) dans la première cellule.
Case valEtudier = 2 'Cas où la valeur étudier est deux, seul nombre paire premier
Cells(2, 1) = 2 'Saisie du second nombre premier dans la seconde case
Case Else 'Pour tous les nombres supérieurs à 2
Range("A2").Select 'Selectionne la permière cellule où le nombre premier sera autre que 1 (qui permet de diviser tous les nombres entiers).
Do Until IsEmpty(ActiveCell) ' Teste le contenu de la cellule active, si celle-ci est vide, sort de la boucle.
If valEtudier Mod ActiveCell.Value <> 0 Then 'Compare la valeur du reste de la division entre la valeur étudier et le nombre premier sélectionné à 0
'Si le reste est non nul pour cette division, j'effectue la même opération avec le nombre premier suivant (si il y en a un).
Selection.Offset(1, 0).Select 'Passe à la cellule contenant le prochain nombre premier, 1 ligne en dessous.
Else
Exit Do 'Si le reste est nul alors je sors de la boucle
End If
Loop ' Retourne au début de la boucle.
'Si je sors normalement de la boucle (condition "Do Until IsEmpty(ActiveCell)" non satisfaite), alors Cells(numligne,1) = valeur étudier.
'Si je sors par Exit Do je passe directement à End Select.
Existe-t-il une commande permettant d'effectuer ce passage ?
End Select
valEtudier = valEtudier + 1 'Incrémentation de la valeur étudier pour s'intéresser à l'entier suivant
numLigne = numLigne + 1 'Incrémentation du numéro de la ligne où est not la valeur du nombre premier, afin de ne pas effacer les valeurs précédentes.
Wend
End If
End Sub |
Partager