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

  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
    Rebonjour, alors déjà merci encore
    Ensuite j'ai esssayé un début de 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
    Sub recherche_couleur()
    Dim i As Integer
    Dim ma_plage As Range
    ma_plage.Cells(Int(Rnd * 24) + 1, Int(Rnd * 16) + 1).Select 'pour sélectionner au hasard une case dans mon tableur 16*24 
     
    Set ma_plage = Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(1, 1))
     
     For i = 1 To 9
     
     
    	If i = 5 Then i = 6
     
     
                If ma_plage.Cells(i).Interior.ColorIndex = RGB(255, 0, 0) Then
     
    		ma_plage.Cells(i).Select
                    ma_plage.Cells(i).Interior.ColorIndex = RGB(0, 102, 0)
     
     
                    Exit Sub
                End If
              End If     
        Next i
     
    End Sub
    Mais honnetement j'avoue etre un peu perdue :/

  8. #8
    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

    As tu fait un plan ? .......

    Voici une petite idée :

    - 1 - déterminer la zone (plage) où sont les cellules colorés, 20*20 ? , "B2:V21" par exemple
    - 2 - compter le nb de cellules colorées (si nombre aléatoire ? )
    - 3 - la boucle pour modifier la couleur, avec remise à zéro du compteur (les quelques lignes de code que je t'ai données)
    - 4 - sinon
    compter le nb coup sans cellules blanches environnantes (compteur), avec une sortie à 200
    se déplacer aléatoirement, sans toutefois dépasser les limites de la plage "B2:V21"

    J'espère ne rien avoir oublié
    Si tu as besoin d'aide, n'hésite pas
    Eric

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut
    Bonjour,

    Ta problématique est assez intéressante d'autant plus qu'en la customisant un peu, ca te donne la possibilité de coder PAC-MAN... en effet, imagine que ton virus intelligent soit un fantôme et qu'au lieu de rechercher une couleur sur les cases adjacentes, il recherche la présence (ou non) d'un petit bonhomme jaune qui se déplacerait grâce à un bouton KeyAction...
    A suivre

  10. #10
    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,

    Avant tout merci de vos réponses

    J'essaie de faire un plan car je galère vraiment. Je vous montrerai où j'en suis

    En tout cas, merci beaucoup

    Bonjour,

    Alors là je tourne en rond, j'ai essayé une dizaine de codes aucun ne marche !!! J'vais pleurer je crois C'est frustrant de pas trouver après autant d'essais !

    J'ai vraiment besoin d'aide

  11. #11
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    Bonjour Miiranda

    Il y a un tutoriel sur ce forum concernant une vision de ce que tu cherches et ou se trouve beaucoup de réponses à ton projet
    De plus faire un jeu Pacman avec Excel relève d'un grand professionnalisme, chapeau à l'auteur arkham46

    Tutoriel Gdi+ : développer un jeu de Pacman Complet

    http://arkham46.developpez.com/artic...lgdiplusgame3/

    Cordialement

  12. #12
    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 heu
    Bonsoir a tous

    pour info le tutoriel de arkham traite de l'utilisation de la librairie GDI+ ,alors en effet on peu s'inspirer de la matrice du jeu mais sa s'arrete la carson application se sert d'un userform

    miiranda quand tu parle des 8 cellules qui l'entourent tu parle de :
    celule.offset(-1,0)
    "".offset(+1,0)
    offset(0,-1)
    ect....??????? est ce bien ca ?????

    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

  13. #13
    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 je parle des trois cellules au dessus, la cellule à droite, la cellule à gauche et les trois cellules en bas.

  14. #14
    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
    Bonsoir à tous

    J'ai pris, comme option, que la zone des cellules colorées était "B51:Q71" c'est à dire 16 colonnes et 20 lignes.

    Pour tester, il faut :
    - créer un bouton (de la boîte à outils contrôles) sur la feuille, avec la macro affecté : "lance"
    - remplir la "Sub Coloration_cellules()" par ce que tu as déjà fait
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    Option Explicit
     
    Dim compteur As Integer ' (si max 200)
    Dim maplage As Range
    Dim nb_couleur As Integer
    Dim prem_pos As Boolean
    Dim pos_anter As Integer
     
     
    Sub lance()
    Dim i As Integer
    Dim ma_plage As Range
    Dim reponse As Integer
     
    ' définition de la plage globale de 16 colonnes et 20 lignes
    Set maplage = Range("B51:Q71")
     
    ' positionnement aléatoire de la première cellule du jeu
    If prem_pos = False Then
        maplage.Cells(Int((336 * Rnd) + 1)).Select
        prem_pos = True
    End If
     
    If nb_couleur = 0 Then
        reponse = MsgBox("Il n'y a pas de cellule colorée, voulez-vous lancer le jeu ? ", vbYesNo, "  lancement du jeu")
        If reponse = 7 Then Exit Sub
        Coloration_cellules
     
        ' si le nb de cellules colorées est aléatoire
        CompteCouleurFond
    End If
     
    ' puis on cherche si cellule couleur à proximité
        For i = 1 To 9
            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
                    compteur = 0
                    ' on décompte le nombre de cellules colorées
                    nb_couleur = nb_couleur - 1
                    If nb_couleur = 0 Then MsgBox "Il n'y a plus de cellule colorée"
                    Exit Sub
                End If
        Next i
     
    ' sinon tirage aléatoire pour nouvel emplacement avec compteur si 1 cellule couleur 3 n'est pas trouvée
    cherche
     
    End Sub
     
     
    Sub CompteCouleurFond()
      Dim c As Range
     
        nb_couleur = 0
        For Each c In maplage
          If c.Interior.ColorIndex = 3 Then
             nb_couleur = nb_couleur + 1
          End If
        Next c
    End Sub
     
    Sub Coloration_cellules()
    ' tirage aléatoire des cellules en couleur
    End Sub
     
    Sub cherche()
     
    Dim cel_act As String
    Dim col As Integer
    Dim i As Integer
    Dim lign As Integer
    Dim macolonne As Integer
    Dim maligne As Integer
    Dim maval As Integer
    Dim mazone As Range
    Dim mc As Range
    Dim myvalue As Integer
     
    Dim Montab()
    Dim tab1(), tab2(), tab3(), tab4(), tab5(), tab6(), tab7(), tab8(), tab9()
     
    Set mc = ActiveCell
    Set mazone = Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(1, 1))
     
    ' position dans la plage de la cellule.select (mc)
    col = maplage.Cells(1).Column - 1
    lign = maplage.Cells(1).Row - 1
     
    cel_act = mc.AddressLocal(ReferenceStyle:=xlR1C1, _
        RowAbsolute:=False, _
        ColumnAbsolute:=False, _
        RelativeTo:=Worksheets(1).Cells((maplage.Cells(1).Row - 1), (maplage.Cells(1).Column - 1)))
     
    maligne = Mid(cel_act, InStr(cel_act, "(") + 1, InStr(cel_act, ")") - (InStr(cel_act, "(") + 1))
    macolonne = Mid(Mid(cel_act, InStr(cel_act, ")") + 3), 1, Len(Mid(cel_act, InStr(cel_act, ")") + 3)) - 1)
     
    maval = ((maligne - 1) * 16) + macolonne
     
    ' initialisation des positions
    tab1 = Array(0, 0, 0, 0, 0, 6, 0, 8, 9)
    tab2 = Array(0, 0, 0, 4, 0, 0, 7, 8, 0)
    tab3 = Array(0, 2, 3, 0, 0, 6, 0, 0, 0)
    tab4 = Array(1, 2, 0, 4, 0, 0, 0, 0, 0)
    tab5 = Array(0, 0, 0, 4, 0, 6, 7, 8, 9)
    tab6 = Array(0, 2, 3, 0, 0, 6, 0, 8, 9)
    tab7 = Array(1, 2, 0, 4, 0, 0, 7, 8, 0)
    tab8 = Array(1, 2, 3, 4, 0, 6, 0, 0, 0)
     
    Montab = Array(tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8)
     
    ' tirage aléatoire de la future position cellule
    recommence:
    Randomize
    myvalue = Int((9 * Rnd) + 1)
     
    If myvalue = 5 Then GoTo recommence
    If myvalue = pos_anter Then GoTo recommence
    If maval > 16 And maval < 321 Then If maval Mod 16 = 1 Then maval = 1000
    If maval Mod 16 = 0 And maval <> 336 Then maval = 0
     
    Select Case maval
        Case 0: i = 6
        Case 1: i = 0
        Case 16: i = 1
        Case 321: i = 2
        Case 336: i = 3
        Case 2 To 15: i = 4
        Case 322 To 335: i = 7
        Case 1000: i = 5
    End Select
     
    If Montab(i)(myvalue - 1) = 0 Then
        GoTo recommence
    End If
     
    ' on selectionne la nouvelle position de la cellule.select (mc)
    mazone.Cells(myvalue).Select
     
    ' on enregistre la position pour ne pas revenir sur celle-ci au prochain tirage
    pos_anter = 10 - myvalue
     
    ' comptage du manque de cellule de couleur
    compteur = compteur + 1
     
    End Sub
    A chaque clic sur le bouton, la sélection change d'une cellule.
    Je n'ai pas traité le cas quand le compteur arrive à 200.
    Tu testes et tu dis (il reste peut-être des bugs)

    Eric

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour à toutes et tous,

    Tu dis :
    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.
    Donc, voici une autre piste. Pour le test, la plage est de A1 à K21. il te suffit de lancer la proc "Virus" (GetTickCount est là pour la tempo). Les commantaires sont dans le 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
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    Declare Function GetTickCount Lib "Kernel32" () As Long
     
    Sub Minuterie(Milliseconde As Long)
     
        Dim Arret As Long
     
        Arret = GetTickCount() + Milliseconde
     
        Do While GetTickCount() < Arret
     
            DoEvents
     
        Loop
     
    End Sub
     
    Sub Virus()
     
    Dim Plage As Range
    Dim PlageProx As Range
    Dim Cel As Range
    Dim CelProx As Range
    Dim I As Long
    Dim J As Integer
    Dim NBCel As Long
    Dim Couleur As Boolean
     
    'défini la plage en dur
    Set Plage = Range("A1:K21")
     
    'ou sur la sélection
    'Set Plage = Selection
     
    'compte le nombre de cellules colorées en rouge
    For Each Cel In Plage
     
        If Cel.Interior.ColorIndex = 3 Then
     
            I = I + 1
     
        End If
     
    Next Cel
     
    'initialise le générateur de nombres aléatoires
    Randomize
     
    'boucle tant que le compte n'est pas bon
    Do
     
        'défini la cellule au hazard
        Set Cel = Plage(Int(Rnd * Plage.Rows.Count) + 1, Int(Rnd * Plage.Columns.Count) + 1)
     
        'évite l'erreur due aux décalages qui retounent une plage hors feuille
        On Error Resume Next
     
        'défini la plage de proximité
        Set PlageProx = Plage.Range(Cel.Offset(-1, -1), Cel.Offset(1, 1))
     
        'boucle à la recherche d'une cellule colorée à proximité
        'et fin de boucle si trouvée
        For Each CelProx In PlageProx
     
            If CelProx.Interior.ColorIndex = 3 Then
     
                Couleur = True
                Exit For
     
            End If
     
        Next CelProx
     
        'boucle sur la plage de proximité à la recherche de la cellule colorée
        If Couleur = True Then
     
            For Each CelProx In PlageProx
     
                'pour l'effet visuel, la cellule en cours est colorée en vert
                If CelProx.Interior.ColorIndex = -4142 Then CelProx.Interior.ColorIndex = 10
     
                'marque une pose pour l'effet visuel
                Minuterie 100 '<--- ici, 1 dixième de seconde
     
                'supprime la couleur verte
                If CelProx.Interior.ColorIndex = 10 Then CelProx.Interior.ColorIndex = -4142
     
                'change la couleur en bleu de la cellule et fin de boucle
                If CelProx.Interior.ColorIndex = 3 Then
     
                    CelProx.Interior.ColorIndex = 5
                    NBCel = NBCel + 1
                    Exit For
     
                End If
     
            Next CelProx
     
            'réinitialise pour la suivante
            Couleur = False
     
        End If
     
    Loop While NBCel <> I 'sort quand toutes les cellules ont été trouvées
     
    End Sub
    Hervé.

  16. #16
    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 a tous
    Theze:
    cellule peut generer une erreur par la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'défini la cellule au hazard
        Set Cel = Plage(Int(Rnd * Plage.Rows.Count) + 1, Int(Rnd * Plage.Columns.Count) + 1)
    En effet lors de la recherche sur la plage prox si cette cellule est en colonne 1 ou ligne 1 il y aura forcement une erreur dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'défini la plage de proximité
        Set PlageProx = Plage.Range(Cel.Offset(-1, -1), Cel.Offset(1, 1))
    J'avais un peu la meme chose que toi mais je bloque la dessus????
    edit :
    et avec le "on error resume next tu annule simplement la recherche
    A mediter
    au plaisir

    re
    ala place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'défini la plage de proximité
        Set PlageProx = Plage.Range(Cel.Offset(-1, -1), Cel.Offset(1, 1))
    on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'défini la plage de proximité
     col=iif( cel.column=1 ,1,-1) 
    ligne=iif(cel.row=1 ,1,-1) 
    Set PlageProx = Plage.Range(Cel.Offset(ligne, col), Cel.Offset(1, 1))
    on peut faire aussi la meme chose pour la limite basse au cas ou la cellule se trouve en derniere ligne ou derniere colonne

    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

  17. #17
    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

  18. #18
    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

  19. #19
    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

  20. #20
    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

Discussions similaires

  1. Réponses: 23
    Dernier message: 22/02/2007, 13h39
  2. Réponses: 1
    Dernier message: 17/05/2006, 16h27
  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, 17h42
  4. [Projet] création d'un cms
    Par Legenyes dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/02/2006, 17h16

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