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

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


      Cdlmnt
      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