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 :

Projet Création virus


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut Projet Création virus
    Bonjour

    J'suis nouvelle dans ce forum que j'viens de connaitre, et j'ai énormément besoin de vous !

    Alors voila,
    Sur excel j'ai coloré des cases (dimension 20*20) de manière aléatoire par une macro.
    Maintenant viens l'aspect compliqué, Je dois créer un virus qui doit se promener sur les cases et "digéré" les cases colorées (en leur donnant une autre couleur par ex)

    Il s'agit d'un virus intelligent, si sur les 8 cases qui l'entourent il y a une case coloré, il doit se diriger vers elle, sinon il se dirige aléatoirement vers une case.

    Mon problème est que je n'ai aucune idée de comment faire, j'ai beau tourné en rond sur les forum ou sur des cours de VBA, je n'avance pas, ne sachant pas par quoi commencer.

    Ce virus dois en plus avoir une énergie : si au bout de 200 pas il n'a pas vu de cases colorées, il meurt, sinon son énergie de 200 pas repars à 0.

    Merciii d'avance de votre aide précieuse !

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour Miiranda

    Juste quelques lignes pour te mettre sur la voie (si j'ai bien compris) :
    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
    Option Explicit
     
    Sub recherche_couleur()
    Dim i As Integer
    Dim ma_plage As Range
     
    ' donner la zone à borner
    '......... à toi d'écrire
    ' puis le virus ou enzyme glouton
        For i = 1 To 8
            Set ma_plage = Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(1, 1))
                If i = 5 Then i = 6
                If ma_plage.Cells(i).Interior.ColorIndex = 3 Then
                    ma_plage.Cells(i).Select
                    ma_plage.Cells(i).Interior.ColorIndex = 4
                    ' remise à zéro du compteur
                    Exit Sub
                End If
        Next i
     
    ' ou tirage aléatoire pour nouvel emplacement avec compteur si pas trouvé cellule couleur 3
    '......... à toi d'écrire
    End Sub
    Eric

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Bonjour edelweisseric

    Merciii pour ce début de réponse, cependant j'ai du mal à comprendre comment votre code a été mis au point.

    Mercii de m'éclairer

  4. #4
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Re
    On admet que nous sommes sur une cellule : Range(ActiveCell.Offset(0, 0) dans une plage à borner, par exemple B3:G12. Je suppose que le test n'est pas sur toute la feuille.
    Une petite explication du code :
    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
    ' on détermine la plage autour de la cellule sélectionnée (j'ai modifié l'emplacement de cette ligne, je trouve que c'est plus propre)
    Set ma_plage = Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(1, 1))
     
    ' boucle sur la plage des 9 cellules de la plage.
     For i = 1 To 8
     
    	' la cellule sélectionnée étant le centre des 9 cellules, et la 5ème.
    	' on est donc certain qu'elle n'est pas de couleur 3, donc on la saute par i=6
    	If i = 5 Then i = 6
     
    	' on teste si la cellule i est de couleur 3
                If ma_plage.Cells(i).Interior.ColorIndex = 3 Then
     
    		' si oui on la séélectionne
    		ma_plage.Cells(i).Select
    		' on la colorie en 4
                    ma_plage.Cells(i).Interior.ColorIndex = 4
     
    		' on remet le compteur de mauvais "tir" à zéro
                    ' remise à zéro du compteur par a=0
     
    		' on sort de la sub
                    Exit Sub
                End If
        Next i
    ' sinon on compte le mauvais "tir" par a=a+1 par exemple
    La recherche des cellules colorées va de 1 à 9, mais cela pourrait être aléatoire.

    Eric

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Merci beaucoup de votre réponse !!

    J'ai deux petits soucis, comment faites vous pour borner la page?

    A la place de pourquoi on écrit pas ?

  6. #6
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour Miiranda

    A la place du terme "borner" (terme de mon métier), j'aurai du écrire "définir" cela aurait été plus correcte. La zone dans laquelle le "virus" cherchera doit être "définie", sinon il parcourra toute la feuille.

    Pourquoiparce que je me suis trompé (n'ayant pas testé). Tu as raison il faut écrire :puisque "ma_plage" contient 9 cellules.

    Eric

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Bonjour,

    Alors tout d'abord merciii beaucoup pour vos réponses, seulement je suis débutante en Visual Basic et mon prof ne veut pas de code trop complexe

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    Bonjour

    lol lol et encore lol
    Toi qui parlais de code pas trop compliqué avec ta marmelade on est servie et on a meme du rabe

    Non vraiment l'idée de theze reste la meilleur dans ton cas et certainement moins compliqué que le tiens
    d'autant plus que tu génère qu'une seule fois une direction au hasard puisque tu le fait en dehors de la grande boucle
    Je ne te parle meme pas des select a outrance qui ne servent a rien

    La méthode :
    Une grande boucle de 200 saut

    A l 'intérieur de cette boucle générer une direction aléatoire dans la limite de la plage
    Tester si la couleur et bonne
    Si c'est le cas changer la couleur
    Si ca n'est pas le cas
    Démarrer une sous boucle bouclant sur les cellules adjacentes selon tes critères
    changer la couleur si la couleur est trouvée
    fin de sou boucle
    fin de grande boucle

    je ne vois pas moins compliqué que cela

    Au plaisir

    Re
    Voila un exemple
    Une macro générant des cellule vertes dans une plage définie(nouveau tableau)
    Et une macro pour injecter le virus
    Le virus rend rouge les cellules trouvée au hasard
    Marron les cellules trouver dans la sou boucle
    Un messagebox te donne le rapport
    Tiens regarde
    Prend un fichier vierge met lui un module standard et colle lui ca
    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
     
    Public plagetest
    'Macro qui va te mettre au hasard des cellules en vert(en quelque sorte un nouveau tableau)
    Sub Nouveau_tableau()
        Set plagetest = Range("A1:P24")    ' désigne la plage test
        Range("A1:P24").Interior.Color = xlNone
        i = 0
        Do
            Randomize
            i = i + 1
            Cells((Rnd * (plagetest.Rows.Count - 1)) + 1, (Rnd * (plagetest.Columns.Count - 1)) + 1).Interior.Color = vbGreen
        Loop Until i = 200
    End Sub
     
    Sub Virus()
        Dim i As Long, col As Long, ligne As Long, cel As Range, lacel As Range
        Do
            Randomize
            wait 10   ' on fait appel a cette macro pour un temps de répits entre chaque sauts(facultatif)
            i = i + 1    'on incrémente i dans la grande boucle
            col = Int(1 + (Rnd * plagetest.Columns.Count))      ' on désigne une colonne au hasard
            ligne = Int(1 + (Rnd * plagetest.Rows.Count))      ' on désigne une ligne au hasard
            Set lacel = Cells(ligne, col)    'lacel devient la cellule avec les coordonnées au désignée hasard avec ligne et col
            If lacel.Interior.Color = vbGreen Then    'si elle est verte
                lacel.Interior.Color = vbRed    ' on la met en rouge
                nb1 = nb1 + 1    'nb1 correspondra au nombre de cibles atteintes du premier coup(facultatif)
            Else    'si la cible n'est pas rouge
                'on vérifie si la ligne et la colonne au hasard n'est pas plus petit ou égale  a  1
                ligne = IIf(ligne <= 1, 1, ligne)    'si la ligne est plus petit ou egale a 1 ligne sera 1 sinon ligne
                col = IIf(col <= 1, 1, col)    'si la colonne est plus petite ou egale a 1 col sera 1 sinon col
                'la plage des cellule periphérique demmarre a 1 au minimum pour la colonne et la ligne
                For Each cel In Range(Cells(ligne, col), lacel.Offset(1, 1))
                    If cel.Interior.Color = vbGreen Then    'si elle est verte on la met en marron
                        cel.Interior.Color = 155621    
                        nb2 = nb2 + 1    'nb2 correspondra au nombre de cibles intermediaires trouvées(facultatif)
                        Exit For
                    End If
                Next
            End If
        Loop Until i = 200
        'on affiche le raport dans un message(facultatif)
        MsgBox "il y a eu " & nb1 & " cible atteintes dans le mille" & vbCrLf & "ET" & vbCrLf & nb2 & " cibles en rattrapages" & vbCrLf & " En 200 sauts"
    End Sub
    Sub wait(seconde As Long)
        Do: s = s + 1: Loop Until s = seconde * 100000
    End Sub
    Au Plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Rebonjour

    MDR Je suis d'accord que je suis allée dans un truc de fou, mais j'ai utilisé mon mini-cours ^^

    Le soucis si on fait une grande boucle de 200 pas, c'est que quand il changera la couleur d'une cellule cible, eh bien normalement le compteur doit repartir à 0. Car c'est 200 pas sans changer la couleur d'une cellule colorée

    Pis la boucle ne marche pas, je comprend vraiment pas

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Tu devrais relire ton dernier post
    Je ne suis pas sur que tu te soit compris toi meme lol ....


    Tu me dis que des qu'il a changé de couleur les 200 repartent a 0

    A quoi ca sert alors de faire une boucle de 200 c'est idiot sans vouloir t'offenser

    d'autant plus que la version de theze ou ma dernière proposition correspondent parfaitement a ce que tu souhaitait tout du moins jusqu'a ton dernier post

    non vraiment tu devrais commencer par les bases afin de comprendre ce que l'on te donne


    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Re !

    Alors déjà, un grand Merci (et au passage, désolée je n'avais pas vu votre second message vu qu'il s'est mis sur une deuxième page ^^)


    Ensuite, j'ai testé votre Code il marche parfait, cependant je pense que je n'ai pas été assez explicite sur ce que j'attendais (enfin ce que le prof veut plutot LOL)

    Il ne faut pas que le virus saute mais plutot qu'il "rampe". Par exemple, il est sur la cellule A6, il mange une cellule colorée A5 en se placant dessus et à la prochaine boucle, il regarde les 8 cellules autour de A5.

    Je sais pas si je transmet bien ce à quoi je m'attend

    En tout cas, un grand MERCI !!

Discussions similaires

  1. Réponses: 23
    Dernier message: 22/02/2007, 12h39
  2. Réponses: 1
    Dernier message: 17/05/2006, 15h27
  3. [Projet] Création d'un cms
    Par Legenyes dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/02/2006, 16h42
  4. [Projet] création d'un cms
    Par Legenyes dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/02/2006, 16h16

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