Nombre premier Excel VBA

Fermé
Gaetan - Modifié par pijaku le 26/02/2015 à 16:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 27 févr. 2015 à 08:10
Salut à tous, je n'arrive pas à comprendre ce qui bugg dans mon script VBA: je cherche à trouver les nombres premiers et à les colorier en jaune dans ma feuille excel:


For Each cell In Selection
        For n = 2 To n = (cell.Value - 1)
            If (cell.Value / n) - Int(cell.Value / n) = 0 Then
                cell.Interior.Color = vbWhite
                Else: cell.Interior.Color = vbYellow
            End If
        Next
Next




Merci d'avance ;)
A voir également:

4 réponses

Salut, essaye comme ça:

For Each cell In Selection 
   For n = 2 To cell.Value - 1
      If (cell.Value / n) - Int(cell.Value / n) = 0 Then
         cell.Interior.Color = vbWhite
        Exit For
      Else
         cell.Interior.Color = vbYellow
      End If 
   Next
Next
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
26 févr. 2015 à 16:01
Bonjour à tous

Et pour aller un petit peu plus vite
  nmax = Sqr(cell.Value)
For n = 2 To nmax


Cdlmnt
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
26 févr. 2015 à 16:31
Bonjour,

Pour ne répondre qu'à ta question : si tu suis ton code en pas à pas, ta cellule peut changer plusieurs fois de couleur mais prendra toujours sa couleur finale par rapport à Cell.Value - 1, qui n'est pas un diviseur de Cell.Value.
Le code de Yoda permet de sortir de la boucle dès qu'un diviseur est trouvé.

A+
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 27/02/2015 à 08:00
Bonjour tout le monde,

Ou alors, en nous servant de toutes ces excellentes réponses, on peut construire une fonction personnalisée.
Cette fonction pourra servir aussi bien dans la feuille que dans le code.
Dans le code :
Appel :
For Each cell In Selection
    If EstPremier(cell) Then
        cell.Interior.Color = vbWhite
        Else: cell.Interior.Color = vbYellow
    End If
Next

Fonction :
Function EstPremier(Nb As Integer) As Boolean
Dim i As Long

    For i = 2 To Sqr(Nb)
        If Nb Mod i = 0 Then EstPremier = False: Exit Function
    Next i
    EstPremier = True
End Function


🎼 Cordialement,
Franck 🎶
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
27 févr. 2015 à 08:10
Ou encore pour coller parfaitement à la définition :
Function EstPremier(Nb As Integer) As Boolean
Dim i As Long
    If Nb = 1 Or Nb = 0 Then Exit Function
    For i = 2 To Sqr(Nb)
        If Nb Mod i = 0 Then Exit Function
    Next i
    EstPremier = True
End Function
0