Nombre premier Excel VBA

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 ;)

4 réponses

  1. 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
    1. Bonjour à tous

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


      Cdlmnt
      0
      1. 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
        1. Modérateur
          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
          1. Modérateur
            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