Considérer une cellule "au hasard" sur VBA

Résolu/Fermé
Mayss - 19 juil. 2013 à 09:31
 Mayss - 19 juil. 2013 à 10:31
Bonjour à tous !

J'ai une question un peu spéciale mais je ne trouve vraiment pas la solution, d'autant plus que je suis loin d'être un expert sur VBA...

Je cherche à programmer le fait que, si une cellule (n'importe laquelle) d'une colonne (que je définis, par contre) est égale à quelque chose de particulier, alors la cellule positionnée 2 colonnes plus à droite (relativement) de ma première cellule doit être égale à une valeur.

Par exemple :

si B3="oui",
alors D3="super"

Mais je voudrais aussi que ça marche pour toutes les autres cellules de la colonne B ! Et je voudrais éviter de devoir répéter le code 36500 fois, puisqu'il me semble que chaque colonne est à peu près longue de 36500 cases ^^

J'espère que je suis clair !
Est-ce que quelqu'un aurait une idée pour m'aider ?

Merci d'avance !!

Mayss

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 19/07/2013 à 09:48
Bonjour,

Sub AleaCel()
Dim Ligne As Long
Dim Colonne As Integer

Colonne = 2
Randomize
Ligne = Round(Rnd * 65535, 0)
If Cells(Ligne, Colonne) = "oui" Then 
    Cells(Ligne, Colonne + 2) = "super"
    MsgBox "Ligne gagnante : " & Ligne
End If
End Sub

Voir cette astuce CCM pour le nombre de lignes......
Cordialement,
Franck P
1
Supeeer ! Merci =)

Il y avait juste un petit truc à modifier car je ne me suis pas super bien exprimé.
Car je voulais en fait que pour toutes les cellules de la colonne spécifiée, si l'une d'entre elle est égale à oui, alors la cellule relativement 2 colonnes plus loin d'elle est égale à super. Mais tout le contexte était bon et j'ai pu commencer à comprendre mes premières fonctions VBA !! ^^
Je me suis débrouillé comme ça :

Sub AleaCel()
Dim Ligne As Long
Dim Colonne As Integer

Colonne = 3
For i = 1 To 200
Ligne = i
If Cells(Ligne, Colonne) = "oui" Then
Cells(Ligne, Colonne + 2) = "super"
End If
Next
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 juil. 2013 à 10:15
Dans ta procédure :
- Ligne (ou i) est superflu
- déclare systématiquement tes variables : Dim i As Byte
Ta macro devient donc :
Sub Test()
Dim Ligne As Byte
Dim Colonne As Byte

Colonne = 3
For Ligne = 1 To 200
    If Cells(Ligne, Colonne) = "oui" Then
        Cells(Ligne, Colonne + 2) = "super"
    End If
Next Ligne
End Sub


Un tuto sur les variables...
0
Super, merci pour les précisions !
0