A voir également:
- Macro Excel toute simple mais si dure pour mo
- Si et excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Formule excel pour additionner plusieurs cellules - Guide
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
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
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
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
15 août 2005 à 19:15
Personne ne pourrait m'expliquer, me donner un lien ou me faire le programme vite fait SVP ?
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
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
???????
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
???????
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
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 )
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 )
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
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