tirage de cellules

Pour toutes vos questions à propos d'Excel ...

tirage de cellules

Messagepar Kiphrine » 22 Mai 2009, 09:28

Bonjour,
Je suis débutante en VBA, j'aurais besoin d'un code qui puisse prendre aléatoirement un nombre de cellules dans un tableau de 7 colonnes et 50 lignes de ma feuille 1 et les mette dans ma feuille 2 comme ceci : 9 cellules dans les colonnes A, B, C, D, E et 3 dans les colonnes F, G, H. Mais en remplissant ces colonnes de la feuille 2, les cellules prisent dans la feuille 1 ne doivent pas se répétées dans la feuille 2 : dans les cellules ABCDEFGH il ne peut pas y avoir 2 fois la même cellule.
Merci de m'aider.
Kiphrine
Utilisateur occasionnel
 
Messages: 18
Inscription: 21 Mai 2009, 22:11
Version Excel: 2003 FR

Messagepar Pyrof » 22 Mai 2009, 10:22

Bonjour,

C'est pas la solution définitive mais une approche

dans une feuille tu sélectionnes un certain nombre de cellule est tu donnes le nom z_plage

tu copies la macro suivante et tu l'exécute.

Cette macro va mettre en rouge 9 cellules aléatoirement

macro :

Sub toto()
Dim tab1
Set tab1 = CreateObject("Scripting.Dictionary")
With Range("z_plage")
.Value = ""
.Interior.ColorIndex = xlNone
End With
For Each cell In Range("z_plage")
cpt = cpt + 1
tab1("C" & cpt) = cell.Row & "," & cell.Column
Next
nb = cpt
Randomize
For b = 1 To 9
nb = tab1.Count
item_number = Int((nb - 1) * Rnd + 1)
tmp = tab1.keys
cle = tmp(item_number)
tmp = tab1.Items
tmp1 = tmp(item_number)
l = Val(Split(tmp1, ",")(0))
c = Val(Split(tmp1, ",")(1))
With Cells(l, c)
.Value = b
.Interior.ColorIndex = 3
End With
tab1.Remove (cle)
Next
End Sub
Pyrof
Jeune membre
 
Messages: 25
Inscription: 14 Mai 2007, 11:58

Messagepar Kiphrine » 22 Mai 2009, 10:29

Merci beaucoup pyrof de m'avoir répondu, est-ce que tu pourrais m'expliquer les lignes de ton code?
Kiphrine
Utilisateur occasionnel
 
Messages: 18
Inscription: 21 Mai 2009, 22:11
Version Excel: 2003 FR

Messagepar Pyrof » 22 Mai 2009, 11:07

Voila avec les commentaires

Code: Tout sélectionner
Sub toto()
' defintion d'un tableau a accès direct
Dim tab1
Set tab1 = CreateObject("Scripting.Dictionary")
'------------------------------------------------------
'         efface la zone nommée z_plage
'------------------------------------------------------
With Range("z_plage")
    .Value = ""
    .Interior.ColorIndex = xlNone
End With
'------------------------------------------------------
'  memorisation des addreses des cellules de la plage
' avec la cle ="C" et numéro incrémental
' en data le numero de ligne et de colonne de la cellule
' avec comme séparateur la virgule
'------------------------------------------------------
For Each cell In Range("z_plage")
    cpt = cpt + 1
    tab1("C" & cpt) = cell.Row & "," & cell.Column
   
Next
'------------------------------------------------------
nb = cpt
Randomize
For b = 1 To 6   ' nombre de valeur aleéatoire
    nb = tab1.Count ' nombre d'élément dans le tableau(item)
    item_number = Int((nb - 1) * Rnd + 1) ' nombre aleatoire entre 1 et nb
    tmp = tab1.keys
    cle = tmp(item_number) ' donne la cle du tableau de l'item itme_number
    tmp = tab1.Items
    tmp1 = tmp(item_number) ' recupère ligne colonne de item du tableau
    l = Val(Split(tmp1, ",")(0)) ' récupération de la ligne
    c = Val(Split(tmp1, ",")(1)) ' récupération de la colonne
    ' mise en valeur de la cellule choisie
    With Cells(l, c)
        .Value = b
        .Interior.ColorIndex = 3
    End With
    tab1.Remove (cle) ' supprime la celuule choisie dans le tableau
    Cells(b, 10) = cle ' affichage pour information
Next
End Sub
Pyrof
Jeune membre
 
Messages: 25
Inscription: 14 Mai 2007, 11:58

Messagepar Kiphrine » 22 Mai 2009, 11:17

Merci pour ces explications Pyrof.
Est-ce que tu pourrais me préciser où est l'instruction "si cellule déjà sélectionnée alors passer à la suivante".
Kiphrine
Utilisateur occasionnel
 
Messages: 18
Inscription: 21 Mai 2009, 22:11
Version Excel: 2003 FR

Messagepar Pyrof » 22 Mai 2009, 11:29

En fait il n'y a pas ce test

Je créé une liste des cellules (tableau tab1) et je fais un rnd dans ce tableau, je supprime l'élément choisi dans ce tableau (tab1.Remove (cle)) et je refais le rnd.

L'élément supprimé ne pourra pas être choisi une seconde fois
Pyrof
Jeune membre
 
Messages: 25
Inscription: 14 Mai 2007, 11:58

Messagepar Kiphrine » 22 Mai 2009, 11:33

Ah d'accord je n'avais pas tout saisie. Merci bien Pyrof, je vais de ce pas tester ce code!
Kiphrine
Utilisateur occasionnel
 
Messages: 18
Inscription: 21 Mai 2009, 22:11
Version Excel: 2003 FR


Retourner vers Excel - VBA

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot], rico95, weirdmax, Wink et 44 invités