Macro Excel toute simple mais si dure pour mo

Fermé
jayjays - 15 août 2005 à 03:11
 fabylo - 29 août 2007 à 13:48
Slt, je désirerais faire une petite macro Excel assez simple mais j'ai quasiment tout oublié.


Je désire juste faire un tirage au sort parmis des chiffres.

J'aimerais qu'en cliquant sur un bouton, le prog. sorte un nombre A compris entre X et Y et que quand je reclique, il me resorte un numéro mais qu'on ne puisse pas retomber sur A. Tout ca jusqu'a avoir épuiser les possibilités.

Merci d'avance de votre aide.
A voir également:

4 réponses

vince75 Messages postés 5 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 16 août 2005 5
16 août 2005 à 15:20
Voilà une proposition de code:
il ne reste plus qu'à associer la macro "Main" à ton bouton


Function tire_au_sort(ByVal x As Long, ByVal y As Long) As Long
'cette fonction renvoie un entier compris entre x et y inclus de façon aléatoire

'L'instruction randomize permet de réinitialiser la série de nombres aléatoires
'sinon on aurait tout le temps la même série

Randomize
tire_au_sort = Int(Rnd() * (y + 1 - x) + x)


End Function

Sub main()
Dim x, y, z As Long
Dim u, i As Integer



' on met la première borne en "E3" et la deuxième en "F3"

x = Cells(3, 5)
y = Cells(3, 6)


' on va placer les résultats successifs du tirage dans la colonne H, mis bout-à-bout

's'il y a déjà y-x+1 valeurs dans la colonne H (par ex 10 valeurs si on tire entre 1 et 10), c'est qu'on a fait toutes les combinaisons
If WorksheetFunction.CountA(Columns(8)) > y - x Then
If MsgBox("Vous avez parcouru toutes les combinaisons, Recommencer ?", vbYesNo) = vbYes Then
'si la réponse est oui, on efface le contenu de la colonne H et on met le premier tirage en H1
Columns(8).Cells.ClearContents
Cells(1, 8) = tire_au_sort(x, y)
Cells(6, 5) = Cells(1, 8)
Exit Sub
Else
'sinon on sort
Exit Sub
End If
End If

u = WorksheetFunction.CountA(Columns(8))


Do
'on effectue un tirage en faisant appel à notre fonction
z = tire_au_sort(x, y)

' on recherche ensuite si ce résultat est déjà contenu dans la plage des résultats précédents
' il y a toutes sortes de moyen d'optimiser cette recherche, mais on ne le fait pas là (flemme)

For i = 1 To u
If z = Cells(i, 8) Then Exit For 'dès qu'on trouve une concordance, on sort de la boucle
Next i
'Si on sort de la boucle que l'on n'a pas parcouru toute la plage, c'est que le résultat a déjà été tiré
' on aurait pu aussi écrire Loop while not(i=u+1)

Loop While i <= u

'une fois qu'on a trouvé un Z non déjà tiré, on l'écrit en bas de la liste et aussi dans la case "E6"
Cells(u + 1, 8) = z
Cells(6, 5) = z


End Sub
1
jayjays Messages postés 5 Date d'inscription lundi 15 août 2005 Statut Membre Dernière intervention 25 août 2005
15 août 2005 à 19:15
Personne ne pourrait m'expliquer, me donner un lien ou me faire le programme vite fait SVP ?
0
jayjays Messages postés 5 Date d'inscription lundi 15 août 2005 Statut Membre Dernière intervention 25 août 2005
16 août 2005 à 15:48
Euh, c'est cool merci.

Je dois créer un bouton, afficher le code et tout remplacer par ton code ou mettre ton code entre :

Private Sub CommandButton1_Click()

ET

End Sub


???????
0
vince75 Messages postés 5 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 16 août 2005 5
16 août 2005 à 16:18
1. Soit tu crées un module (dans la fenêtre vb d'excel, clic droit => insérer module, tu copies tout mon code brutalement).
Ce sera déjà beaucoup plus lisible que dans le post

puis tu crées ton bouton sur ta feuille, et tu mets le code ci-dessous :

Private Sub CommandButton1_Click()

main

End Sub

2. Soit tu colles le code de la procédure Main dans la procédure Private Sub CommandButton1_Click() (attention de ne pas répéter les end sub

Par contre la fonction doit bien être à part (même si tu n'es pas dans un module )
0
Bonjour,

Cela m'intéresse, mais je n'arrive pas à appliquer la macro à mon fichier. En fait, j'ai un fichier qui comporte 1255 enregistrements, en colonne A j'ai un N° de 1 à 1255, dans la B un nom C, prénom (il s'agit d'un fichier utilisteur). Je souhaite contrôler l'utilisation d'un logiciel pour un utilsateur sur 5, mais je ne sais comment faire. En fait je veux faire un tirage au sort d'une ligne sur 5.
Merci de votre aide
0