OVH Cloud OVH Cloud

Application macros

6 réponses
Avatar
Dunkan
Bonjour,

Je suis débutant dans les macros Excel (1er essai non concluant).

J'ai trouvé sur un site une macro (en fichier TXT) me permettant de faire un
tirage au sort suivant une liste de noms.
Après création de la macro (puis un copier-coller du fichier TXT récupéré)
dans le visual basic, je ne sais pas comment changer les "textes" pour mettre
les références des valeurs correspondant à mon fichier.

Pouvez-vous me venir en aide ?

Par avance, merci.

6 réponses

Avatar
Michael
Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.
Avatar
Dunkan
Salut,

Je suis vraiment débutant mais je pense que tu me demandes le fichier TXT
que j'ai récupéré, en voici le contenu (pour ma part, je crois devoir changer
"Plage", "Range", "Value" mais que mettre à la place ?):

-------------------------------------------------
Attribute VB_Name = "TirerAuSort"


'renvoie aléatoirement une des valeurs d'une plage de cellules
'(en ligne ou en colonne)


Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
-------------------------------------------------

"Michael" wrote:


Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.








Avatar
michdenis
Bonjour Dunkan,

Cette fonction est signée Frédéric Sigonneau. Elle permet d'extraire aléatoirement une valeur d'une des cellules de la plage de
cellules spécifiées à titre d'argument.

La fonction est à copier dans un module standard de ton classeur.
- ouvrir vbe(visual basic editor) : Raccourci clavier : Alt + F11
- insère un module standard : barre des menus / insertion / module
- copie cette fonction dans cette page blanche

Et pour l'utiliser dans ta feuille de calcul, tu entres la formule suivante :
=TirageAuSort(D5:D25)

D5:G25 étant la plage (une colonne) de cellules dont tu veux extraire une des valeurs aléatoirement.

'-----------------------------
Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
'-----------------------------


Salutations!



"Dunkan" a écrit dans le message de news:
Salut,

Je suis vraiment débutant mais je pense que tu me demandes le fichier TXT
que j'ai récupéré, en voici le contenu (pour ma part, je crois devoir changer
"Plage", "Range", "Value" mais que mettre à la place ?):

-------------------------------------------------
Attribute VB_Name = "TirerAuSort"


'renvoie aléatoirement une des valeurs d'une plage de cellules
'(en ligne ou en colonne)


Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
-------------------------------------------------

"Michael" wrote:


Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.








Avatar
Dunkan
C'est magique !!!!! Ca fonctionne !!!!!!!!

Mais comme je suis ch.... , il y a des doublons et ça me plaît pas !
Donc, je pense retourner sur le site où j'ai trouvé cette macro et demander
à M. Sigonneau si il peut m'aider.

A moins que tu connaisses la solution mais je ne voudrais pas abuser.

"michdenis" wrote:

Bonjour Dunkan,

Cette fonction est signée Frédéric Sigonneau. Elle permet d'extraire aléatoirement une valeur d'une des cellules de la plage de
cellules spécifiées à titre d'argument.

La fonction est à copier dans un module standard de ton classeur.
- ouvrir vbe(visual basic editor) : Raccourci clavier : Alt + F11
- insère un module standard : barre des menus / insertion / module
- copie cette fonction dans cette page blanche

Et pour l'utiliser dans ta feuille de calcul, tu entres la formule suivante :
=TirageAuSort(D5:D25)

D5:G25 étant la plage (une colonne) de cellules dont tu veux extraire une des valeurs aléatoirement.

'-----------------------------
Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
'-----------------------------


Salutations!



"Dunkan" a écrit dans le message de news:
Salut,

Je suis vraiment débutant mais je pense que tu me demandes le fichier TXT
que j'ai récupéré, en voici le contenu (pour ma part, je crois devoir changer
"Plage", "Range", "Value" mais que mettre à la place ?):

-------------------------------------------------
Attribute VB_Name = "TirerAuSort"


'renvoie aléatoirement une des valeurs d'une plage de cellules
'(en ligne ou en colonne)


Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
-------------------------------------------------

"Michael" wrote:


Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.













Avatar
michdenis
Bonjour Dunkan,

Ce serait bien si tu prenais le temps d'expliquer ce que tu cherches à faire et de quelle manière tu utilises cette fonction dans
ton application.


Salutations!



"Dunkan" a écrit dans le message de news:
C'est magique !!!!! Ca fonctionne !!!!!!!!

Mais comme je suis ch.... , il y a des doublons et ça me plaît pas !
Donc, je pense retourner sur le site où j'ai trouvé cette macro et demander
à M. Sigonneau si il peut m'aider.

A moins que tu connaisses la solution mais je ne voudrais pas abuser.

"michdenis" wrote:

Bonjour Dunkan,

Cette fonction est signée Frédéric Sigonneau. Elle permet d'extraire aléatoirement une valeur d'une des cellules de la plage de
cellules spécifiées à titre d'argument.

La fonction est à copier dans un module standard de ton classeur.
- ouvrir vbe(visual basic editor) : Raccourci clavier : Alt + F11
- insère un module standard : barre des menus / insertion / module
- copie cette fonction dans cette page blanche

Et pour l'utiliser dans ta feuille de calcul, tu entres la formule suivante :
=TirageAuSort(D5:D25)

D5:G25 étant la plage (une colonne) de cellules dont tu veux extraire une des valeurs aléatoirement.

'-----------------------------
Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
'-----------------------------


Salutations!



"Dunkan" a écrit dans le message de news:
Salut,

Je suis vraiment débutant mais je pense que tu me demandes le fichier TXT
que j'ai récupéré, en voici le contenu (pour ma part, je crois devoir changer
"Plage", "Range", "Value" mais que mettre à la place ?):

-------------------------------------------------
Attribute VB_Name = "TirerAuSort"


'renvoie aléatoirement une des valeurs d'une plage de cellules
'(en ligne ou en colonne)


Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
-------------------------------------------------

"Michael" wrote:


Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.













Avatar
Dunkan
Désolé, je n'ai pas l'habitude !

Je dois faire un tirage au sort avec 16 participants pour des concours de
billard. Chaque semaine l'ordre des joueurs doit être différent car il faut
que chacun rencontre quelqu'un de différent chaque semaine.

Mon fichier comporte
- Un tableau récapitulatif avec calcul des pts et moyenne
- 1 feuille / semaine (52 semaine)

Le tri fonctionne bien mais j'ai un souci de doublons.


"michdenis" wrote:

Bonjour Dunkan,

Ce serait bien si tu prenais le temps d'expliquer ce que tu cherches à faire et de quelle manière tu utilises cette fonction dans
ton application.


Salutations!



"Dunkan" a écrit dans le message de news:
C'est magique !!!!! Ca fonctionne !!!!!!!!

Mais comme je suis ch.... , il y a des doublons et ça me plaît pas !
Donc, je pense retourner sur le site où j'ai trouvé cette macro et demander
à M. Sigonneau si il peut m'aider.

A moins que tu connaisses la solution mais je ne voudrais pas abuser.

"michdenis" wrote:

Bonjour Dunkan,

Cette fonction est signée Frédéric Sigonneau. Elle permet d'extraire aléatoirement une valeur d'une des cellules de la plage de
cellules spécifiées à titre d'argument.

La fonction est à copier dans un module standard de ton classeur.
- ouvrir vbe(visual basic editor) : Raccourci clavier : Alt + F11
- insère un module standard : barre des menus / insertion / module
- copie cette fonction dans cette page blanche

Et pour l'utiliser dans ta feuille de calcul, tu entres la formule suivante :
=TirageAuSort(D5:D25)

D5:G25 étant la plage (une colonne) de cellules dont tu veux extraire une des valeurs aléatoirement.

'-----------------------------
Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
'-----------------------------


Salutations!



"Dunkan" a écrit dans le message de news:
Salut,

Je suis vraiment débutant mais je pense que tu me demandes le fichier TXT
que j'ai récupéré, en voici le contenu (pour ma part, je crois devoir changer
"Plage", "Range", "Value" mais que mettre à la place ?):

-------------------------------------------------
Attribute VB_Name = "TirerAuSort"


'renvoie aléatoirement une des valeurs d'une plage de cellules
'(en ligne ou en colonne)


Function TirageAuSort(Plage As Range)
Dim ArrTmp, temp, idx As Long, i As Long

Randomize
ArrTmp = Plage.Value
If Plage.Rows.Count = 1 Then _
ArrTmp = Application.Transpose(ArrTmp)

'Tri aléatoire du tableau
For i = LBound(ArrTmp, 1) To UBound(ArrTmp, 1)
idx = Int(Rnd() * i) + 1
temp = ArrTmp(i, 1)
ArrTmp(i, 1) = ArrTmp(idx, 1)
ArrTmp(idx, 1) = temp
Next i

TirageAuSort = ArrTmp(1, 1)

End Function 'fs
-------------------------------------------------

"Michael" wrote:


Salut

Essaie de poster ton code si possible pour voir a quoi il ressemble.