Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 11h38   #1
Invité de passage
 
Homme
Ingénieur validation
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 3
Points : 3
Par défaut Cellule aléatoirement choisie dans un tableau

Bonjour,

Alors voilà ce que je voudrais faire [ EDIT : dans une macro ] :
- sélectionner aléatoirement une cellule dans une colonne disons de "A2" à "A160" (chaque cellule contient du texte)
- récupérer l'indice de ligne correspondant

Ca paraît tout simple... et ça l'est peut-être ! :-)
Mais je n'ai pas trouvé comment faire.
Les seules fonctions aléatoires que je vois (RND et Randomize) semblent ne s'appliquer qu'aux nombres.

Pourriez-vous m'aider svp ?

Merci
Live83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h02   #2
Nom
Membre habitué
 
Inscription : octobre 2005
Messages : 528
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 528
Points : 143
Points : 143
Salut
Et si tu utilises ces fonctions pour avoir un nombre aléatoire et dernière tu ajoutes le nom de la colonne en question ?
__________________
Le savoir est une arme alors soyons armés
Nom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h37   #3
Invité de passage
 
Homme
Ingénieur validation
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 3
Points : 3
Citation:
Envoyé par Nom Voir le message
Salut
Et si tu utilises ces fonctions pour avoir un nombre aléatoire et dernière tu ajoutes le nom de la colonne en question ?
J'avoue ne pas avoir creusé plus...
Je me disais qu'il devait forcément (?) exister quelque chose de simple !

Probablement qu'en y passant des heures et en faisant des bidouillages de ce genre, je finirais par y arriver ! M'enfin, appelons ça le plan B
Live83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h44   #4
Invité de passage
 
Homme
Ingénieur validation
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 3
Points : 3
Oups ! Je pense que je me suis trompé de section.

J'aurais dû ouvrir le topic dans "Macros et VBA"... car je souhaite faire ça dans une macro.

Si un modérateur passe par là... Merci
Live83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h37   #5
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

Code :
1
2
3
4
5
6
Sub gogo()
Dim I As Variant
 
I = Int((Range("MaPlage").Cells.CountLarge * Rnd) + 1)
Range("MaPlage").Item(I).Select
End Sub
Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 16h18   #6
Invité de passage
 
Homme
Ingénieur validation
Inscription : janvier 2012
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur validation
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 20
Points : 3
Points : 3
Alors, j'avais continué à chercher de mon côté, et j'ai finalement trouvé quelque chose. Sûrement moins beau et moins propre que ce que Didier a écrit... Mais ça marche. Je fais tout simplement ceci :

Code :
1
2
Randomize
i = Int(jj * Rnd) + 2
jj est l'indice max de lignes de la colonne que je parcours
et 2 est l'indice min

Cela dit, existe-t-il une astuce pour éviter les doublons ?
(Je pourrais m'en accommoder... mais bon ce serait mieux si je n'en avais pas)
Live83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 16h36   #7
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

Citation:
Cela dit, existe-t-il une astuce pour éviter les doublons ?
direct, non, de base on est sur un tirage au sort, as-tu beaucoup de cellules dans ta plage ?

il y tout un tas de possibilités, par exemple :

Tu colores les cellules choisies, au lancement tu remets tout à couleur de base et à chaque tirage tu regardes si ta cellule n'a pas la couleur de celles tirées au sort.
Si pas couleur => on sélectionne et on colore
Si couleur déjà => on la saute et on relance
un peu bourrin, mais rapide et efficace même s'il passe plusieurs fois sur les même rejetées.

Tu peux aussi mettre les adresses des cellules choisies dans une collection, celles déjà existantes étant rejetées + un On Error, voir tuto de silkyraod pour le code...

etc..

Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 06h06   #8
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 713
Points : 3 652
Points : 3 652
Salut, pour un tirage aléatoire avec ou sans doublons, à adapter

Ici les nombres sont générés dans la colonne 1 de la feuille ShDatas via
Code :
NombresAleatoires(1024, 1, 28, ShDatas.CheckBoxes("ChkUnique").Value = 1)
Code :
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
Option Explicit
 
Private Function NombresAleatoires(Haut As Long, _
                                   Optional Bas As Long = 1, _
                                   Optional Combien As Long = 1, _
                                   Optional Unique As Boolean = True) As Variant
Dim x As Long
Dim n As Long
Dim Nombres() As Variant
Dim collNombres As New Collection
 
    On Error GoTo LocalError
    If Combien > ((Haut + 1) - (Bas - 1)) Then Exit Function
 
    ReDim Nombres(Combien - 1)
    With collNombres
        For x = Bas To Haut
            .Add x
        Next x
        For x = 0 To Combien - 1
            n = NbAleatoire(0, collNombres.Count + 1)
            Nombres(x) = collNombres(n)
            If Unique Then collNombres.Remove n
        Next x
    End With
 
    Set collNombres = Nothing
    NombresAleatoires = Nombres
    Erase Nombres
    Exit Function
LocalError:
    NombresAleatoires = ""
End Function
 
Private Function NbAleatoire(Haut As Long, Bas As Long) As Long
    Randomize
    NbAleatoire = Int((Haut - Bas + 1) * Rnd + Bas)
End Function
 
Sub Tst()
Dim i As Long, j As Long
Dim x() As Variant
 
    ShDatas.Columns("A:A").ClearContents
    x = NombresAleatoires(100, 1, 28, ShDatas.CheckBoxes("ChkUnique").Value = 1)
 
    j = 1
    For i = LBound(x) To UBound(x)
        ShDatas.Cells(j, 1) = x(i)
        j = j + 1
    Next i
    If ShDatas.CheckBoxes("ChkTri").Value = 1 Then Tri
End Sub
 
Private Sub Tri()
    Application.ScreenUpdating = False
    With ShDatas
        .Columns("A:A").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
                             OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                             DataOption1:=xlSortNormal
        .Range("B1").Select
    End With
    Application.ScreenUpdating = True
End Sub
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h24.


 
 
 
 
Partenaires

Hébergement Web