Générer aléatoirement un jour de la semaine VBA

Bonjour,

je souhaite obtenir un tirage aleatoire des jours de la semaine sur 7 cellules qui se suivent.

j'arrive à faire avec randomize un tirage aleatoire de nombre, mais pas de jour de la semaine. J'ai pensé créer un tableau avec

Dim jour(7)

jour(0) = "lundi"

jour(1) = "mardi"

etc etc, qui me donnerait les 7 jours de la semaine, mais je n'arrive pas à faire de tirage aleatoire à partir de ça. Et je ne veux pas que ce tableau apparaisse, c'est juste pour chercher les jours de la semaine.

si vous pouviez m'aider

cdt

Ericmzi

Bonjour,

Ci-joint ton fichier test ...

En espèrant que cela t'aide

Bonjour,

Une fonction perso. Avec "Application.Volatile", la fonction sera recalculée à chaque calculs dans la feuille comme pour les fonction Alea(), Maintenant(), etc... Cette fonction est matricielle, donc, sélectionner les 7 cellules verticales et dans la barre de formule, entrer =JOURALEA() puis valider avec Ctrl+Maj+Entrée. Si tu veux les jours sur une ligne, utilise la fonction Transpose() de cette façon =TRANSPOSE(JOURALEA()) toujours en ayant sélectionné les 7 cellules et en validant en matricielle :

Function JOURALEA() As String()

    Dim Tbl(1 To 7, 1 To 2) As String
    Dim Dico As Object
    Dim Cle
    Dim Jour As String
    Dim I As Integer

    'à chaque calcul dans la feuille, la fonction est appelée
    Application.Volatile

    Randomize
    Set Dico = CreateObject("Scripting.Dictionary")

    Do

        Jour = WeekdayName(Int(Rnd() * 7 + 1), False, vbMonday)
        Dico(Jour) = ""

    Loop Until Dico.Count = 7

    For Each Cle In Dico.Keys

        I = I + 1: Tbl(I, 1) = Cle

    Next Cle

    JOURALEA = Tbl

End Function

Un classeur exemple :

12noms-des-jours.xlsm (15.21 Ko)

Bonjour,

merci,

vos 2 fichiers fonctionnent très bien, une petite question sur =JOURALEA(), il faut le rentrer manuellement dans Excel, est-ce qu'il est possible de rentrer cette formule ou sa traduction vba dans le programme avec formula?

cdt

Ericmzi

Content que tu aies pu trouver la solution à ton problème ...

Bonjour,

Pour avoir cette formule en matricielle avec VBA, voici un exemple de A1 à A7 :

Sub Test()

    Range("A1:A7").FormulaArray = "=JOURALEA()"

End Sub

et pour l'avoir en ligne :

Sub Test()

    Range("A9:G9").FormulaArray = "=TRANSPOSE(JOURALEA())"

End Sub

Bonsoir,

merci ça marche vraiment bien

cdt

ericmzi

Rechercher des sujets similaires à "generer aleatoirement jour semaine vba"