Nombre premier Excel VBA

Gaetan -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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. Yoda
     
    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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour à tous

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


    Cdlmnt
    0
  3. Zoul67 Messages postés 2001 Statut Membre 149
     
    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
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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

Discussions similaires