IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Boucle et condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Boucle et condition
    Bonjour,
    Je rédigé un code qui génère cinq nombres aléatoires en A2 / B2 /.....
    J'ai trouvé un code pour vérifier qu'un nombre est premier et je cherche un code qui, après avoir généré ces nombres boucle sur ceux qui ne sont pas premiers jusqu'à ce qu'il n'y ait plus de nombres non-premier de A2 à E2.
    En quelque sorte, que le réponses "oui" soient sorties de la boucle...
    Pour info, le code que j'ai trouvé pour vérifier les nombres premiers est une fonction et inscrit "non" ou "oui" dans les cellules A3 / B3 / ......

    J'ai essayé d'enchaîner While et If; For Select Case Next et la plupart du temps, la boucle s'arrête sur la première réponse "oui" trouvée ou encore elle ne tient pas compte de ces "oui" et s'arrête à la cinquième boucle....Je ne trouve pas la solution.

    Si quelqu'un y voit clair, merci de l'aide!!!!



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Target.Address = "$A$1" Then
     
    Dim i As Integer
     
    i = 1
     
     
    While i <= 5
     
    Cells(2, i).Select
    ActiveCell.FormulaR1C1 = "=ROUND(RAND()*10,0)"
     
    Select Case Cells(3, i)
     
    Case Is = "oui"
     
    Selection.Copy
        Cells(2, i).Select
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
     
        ThisWorkbook.Save
     
     
     Case Is = "non"
     
     Cells(2, i).Select
       ActiveCell.FormulaR1C1 = "=ROUND(RAND()*10,0)"
     
     
    End Select
     
    i = i + 1
     
     
    Wend
     
     
    End If
     
     
     
     
    End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Target.Address = "$A$1" Then
     
    Dim i As Integer, j As Integer, k As Integer
     
     
    While Cells(3, 6) <> "OUI"
     
    For i = 1 To 5
     
    Cells(2, i).Select
        ActiveCell.FormulaR1C1 = "=ROUND(RAND()*10,0)"
        Calculate
     
     
    Select Case Cells(3, i)
     
    Case Is = "oui"
     
     Selection.Copy
        Cells(2, i).Select
        Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
            xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
     
        ThisWorkbook.Save
     
    i = i + 1
     Case Is = "non"
     
     Cells(2, i).Select
       ActiveCell.FormulaR1C1 = "=ROUND(RAND()*10,0)"
        Calculate
    i = i + 1
    End Select
     
     
    Next
     
    Wend
     
     
     
     
     End If
     
     
     
     
    End Sub
    Je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI(A3:E3;"NON")<>0;"NON";"OUI")
    en F3 et ça à l'air mieux mais il y a toujours des irrégularités......

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il serait plus simple d'utiliser ta fonction VBA de la colonne 3 directement dans ta macro plutôt que de passer par des fonctions dans des cellules.
    Ca te permettrait d'utiliser les fonctions VBA pour mettre un nombre aléatoire dans une simple variable, de la contrôler et de mettre éventuellement le résultat dans une cellule.
    Ce serait beaucoup plus rapide.

    Mais à ta place, je commencerait par faire un Crible d'Ératosthène pour mettre dans une variable vecteur tous les nombres premiers se trouvant dans les limites que tu fixes.
    Regarde ici, tu as un crible déjà presque écrit.
    Ensuite, tu n'aurais plus qu'à tirer un nombre en 1 et le nombre de premiers que tu as enregistré dans ton vecteur et d'utiliser ce nombre comme indice pour être sûr de tirer un nombre premier.
    Ce serait plus simple que de vérifier à chaque fois que le nombre est premier en tirant au petit bonheur.

    En attendant, j'ai retouché un poil ton code qui devrait mieux fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    	Dim i As Long
    	If Target.Address = "$A$1" Then
    		i = 1
    		While i <= 5
    			Cells(2, i).FormulaR1C1 = "=ROUND(Rnd * 10, 0)"
    			If Cells(3, i) = "oui"
    				Cells(2, i).Copy
    				Cells(2, i).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    				i = i + 1
    			End If
    		Wend
    		ThisWorkbook.Save
    	End If
    End Sub

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    ou simplement extraire les n premiers éléments d'une variable tableau de nombres premiers après arrangement …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Je rédigé un code qui génère cinq nombres aléatoires en A2 / B2 /.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=ROUND(RAND()*10,0)"
    Sachant qu'il y a seulement 4 nombres premiers inférieurs à 10, c'est mission impossible ‼  

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    J'ai mal écrit: Qui génère un nombre aléatoire dans cinq cellules, après vérification, je cherche à ne conserver que le nombres premiers.
    Et non pas un nombre premier différent par cellule entre 1 et 10.

    Je teste les codes suggérés et regarde du côté du crible (pour l'instant je découvre cette notion) et reviens sur le forum

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Le vient du fait que je cherche à éviter tous les 0.xxxxxx lors de la génération de mes chiffres aléatoires.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Merci pour ta réponse Menhir, je suppose qu'il doit y avoir un lien derrière ton "ici" or il n'a pas l'air d'être actif, sauf erreur de ma part.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    PARFAIT TON CODE MENHIR!!!!!!!!!!!!!!!!


    Je ne mets pas en résolu avant d'avoir creusé le Crible d'Ératosthène un peu plus, si tu peux débloquer ton lien, ça me permettra d'avancer.

    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle avec condition "perdu"
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/06/2007, 10h38
  2. Problème de boucle et condition
    Par fantomas261 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/04/2007, 18h05
  3. [Tableaux] Boucles et conditions
    Par Hayabusa dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2006, 00h07
  4. Tirer les formules avec boucle et condition excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 19/10/2006, 15h11
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo