Tirage Aléatoire de valeurs dans un tableau

gibson92

XLDnaute Junior
Bonjour,

J'aimerai effectué sous Excel (ou Access) un tirage aléatoire de nombre suivant des dates, par exemple:

Date Valeur

01/01/2011 12
02/01/2011 40
...
31/01/2011 160

J'aimerai choisir une plage de données de date (14/01/2011 au 22/01/2011) ou je tire aléatoirement des valeurs qui sont supprimées (case blanche) dans le tableau d'origine et qui me sont retournées ailleurs (dans un autre tableau).

Avez vous des propositions à me faire
Merci par avance
 

tototiti2008

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

Bonjour gibson,

Oui, sans doute en VBA
un petit bout de fichier pour nous aider à te répondre ?
Comme on ne sait pas où est le tableau d'origine, où mettre les valeurs ailleurs, combien de valeurs tirer aléatoirement...
 

Dranreb

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

Bonjour.
Construire le squelette de la macro à l'aide de l'enregistreur :
1) - Copier l'intégralité du tableau source vers la destination
2) - Ajouter une colonne avec la formule =ALEA()
3) - Classer la liste sur cette colonne puis la supprimer.
Me soumettre le code engendré pour optimisation
Je ne sais quelle version d'Excel vous utilisez, les tris ne se programment plus comme dans la mienne.
À +
 

gibson92

XLDnaute Junior
Re : Tirage Aléatoire de valeurs dans un tableau

J'utilise excel 2007
Suis obligé d'utiliser une macro et programmer en VBA...car je n'y connais rien
Voila un exemple sur la feuille 1 une plage de date associée à des valeurs.
J'aimerai entre le 02/01 et le 20/01 tirer aléatoirement des valeurs (à la suite et pas à la suite) que je supprime de la feuille 1 (la ligne reste avec une date et une valeur vide) et que je colle dans la feuille 2
 

Pièces jointes

  • test.xlsx
    8.6 KB · Affichages: 174
  • test.xlsx
    8.6 KB · Affichages: 180
  • test.xlsx
    8.6 KB · Affichages: 187

Dranreb

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

VB:
Sub TirageAlé()
Dim Le As Long, Ls As Long
Randomize
Do
   Le = Int(Rnd * 20 + 2)
   Loop Until Feuil1.Cells(Le, "B").Value <> ""
Ls = WorksheetFunction.CountA(Feuil2.[B2:B65536]) + 2
Feuil2.Cells(Ls, "A").Value = Feuil1.Cells(Le, "A").Value: Feuil1.Cells(Le, "A").ClearContents
Feuil2.Cells(Ls, "B").Value = Feuil1.Cells(Le, "B").Value: Feuil1.Cells(Le, "B").ClearContents
End Sub
À +
 

gibson92

XLDnaute Junior
Re : Tirage Aléatoire de valeurs dans un tableau

Une autre petite question sur le code VBA ci dessus, je n'y connais pas grand chose mais je ne vois pas où je peux choisir la plage de date pour effectuer le tirage aléatoire.
Car en réalité j'ai une énorme table avec bcp de données je me vois mal les sélectionner à la main....
 

Dranreb

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

Vous souhaiteriez le spécifier comment ?
Des recherches de lignes de date début et fin avec Worksheetfunction.Match conviendraient sans doute.
Après : Le = LDéb + Int(Rnd * (LFin - LDéb + 1))
 

gibson92

XLDnaute Junior
Re : Tirage Aléatoire de valeurs dans un tableau

J'aimerai rentrer une date de début et date de fin à la main, ou au pire via le code vba
Pourriez vous m'expliquer le code (pour ma curiosité)
Le = Int(Rnd * 20 + 2)....pourquoi +2?
Le = LDéb + Int(Rnd * (LFin - LDéb + 1)).....pourquoi +1 et comment je rentre Ldéb et Lfin?
Loop Until Feuil1.Cells(Le, "B").Value <> ""....je ne comprends pas ce que cela veut dire
Sub TirageAlé() est ce que cela veut dire qu'il faut renommer une feuille TirageAlé?

De plus est ce que je peux utiliser ceci sous Access ou existe il un autre procédé?
Merci
 

Dranreb

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

Le = Int(Rnd * 20 + 2)....pourquoi +2?
Cas particulier de la formule suivante avec LDéb = 2 et LFin = 21.

Le = LDéb + Int(Rnd * (LFin - LDéb + 1)).....pourquoi +1
Pour obtenir le nombre de lignes couvertes de LDéb à LFin. À la limite si LFin = LDéb, LFin - LDéb = 0, + 1 = bien 1 ligne. Dans ce cas Int(Rnd * (LFin - LDéb + 1)) vaut toujours 0 et l'expression entière vaut toujours LDéb

et comment je rentre Ldéb et Lfin
Vous les auriez calculés avec Match, mais je m'aperçois que ça ne va pas marcher à cause du point évoqué juste après.

Loop Until Feuil1.Cells(Le, "B").Value <> ""....je ne comprends pas ce que cela veut dire
Ça veut dire "recommencer à partir de l'instruction qui suit le dernier Do jusqu'à ce que la cellule à la colonne B, Ligne =Le contienne mieux qu'une chaîne vide. Le tirage pourrait en effet tomber sur une ligne qui a déjà été tirée et donc nettoyée, alors on recommence jusqu'à ce que ça ne se produise plus. Ces possibles lignes vides font qu'on ne pourra par trouver les lignes avec Match. On va faire autrement: on va cherche sur l'ensemble jusqu'à ce qu'on en trouve une >= DateDéb et <= DateFin :
VB:
Sub TirageAlé()
Dim DateDéb As Date, DateFin As Date, DateTirée As Date, LDéb As Long, LFin As Long, Le As Long, Ls As Long
DateDéb = CDate(InputBox("Date mini", "TirageAlé"))
DateFin = CDate(InputBox("Date maxi", "TirageAlé"))
LDéb = 2: LFin = Feuil1.[A65536].End(xlUp).Row
Randomize
Do
   Le = LDéb + Int(Rnd * (LFin - LDéb + 1))
   If Feuil1.Cells(Le, "A").Value <> "" Then
      DateTirée = CDate(Feuil1.Cells(Le, "A").Value)
      If DateTirée >= DateDéb And DateTirée <= DateFin Then Exit Do
      End If
   Loop
Ls = WorksheetFunction.CountA(Feuil2.[B2:B65536]) + 2
Feuil2.Cells(Ls, "A").Value = Feuil1.Cells(Le, "A").Value: Feuil1.Cells(Le, "A").ClearContents
Feuil2.Cells(Ls, "B").Value = Feuil1.Cells(Le, "B").Value: Feuil1.Cells(Le, "B").ClearContents
End Sub

Sub TirageAlé() est ce que cela veut dire qu'il faut renommer une feuille TirageAlé?
Absolument pas ! Mettez ce code dans un module ordinaire inséré dans VBA. Ça veut dire qu'il y aura alors cette macro qui pourra être exécutée, ou affectée d'abord à un bouton de formulaire ou de barre d'outils pour un lancement plus aisé.

De plus est ce que je peux utiliser ceci sous Access
Non, à moins de remplacer les objets représentant des entités Excel par leur équivalent Access que je ne connais pas.

Cordialement
 
Dernière édition:

gibson92

XLDnaute Junior
Re : Tirage Aléatoire de valeurs dans un tableau

Merci pour ces explications, cependant:
- j'ai du mal à saisir à quoi servent les variables Ldéb, Lfin, Le et Ls, quelles sont leurs significations
- Pk Ldéb=2 et que veut dire la signification de Lfin? Est dans ces variables que je rentre les valeurs de date de début et de fin pour le tirag aléatoire?
- "Vous les auriez calculés avec Match"...qu'est ce que veut dire Match?
- "Ça veut dire "recommencer à partir de l'instruction qui suit le dernier Do jusqu'à ce que la cellule à la colonne B, Ligne =Le contienne mieux qu'une chaîne vide"...j'ai pas compris le sens de la phrase ni ce que veut dire Do
- La fonction qui tire aléatoirment est juste Randomize dans le code?
- J'ai oublié une précision importante, je vais avoir à chaque fois les mêmes dates plusieurs fois mais avec des valeurs différentes pour chaques, est ce que programme fonctionne quand même (j'essaierai de le mettre à disposition dans la journée)
expl:
02/01/2011 452
02/01/2011 123
02/01/2011 87
02/01/2011 21

Dsl de redemander des explications mais je suis novice c'est pour ça que je comprends pas certains termes
Merci
 

Dranreb

XLDnaute Barbatruc
Re : Tirage Aléatoire de valeurs dans un tableau

- j'ai du mal à saisir à quoi servent les variables Ldéb, Lfin, Le et Ls, quelles sont leurs significations
Ce sont des numéros de lignes en feuilles. Respectivement: de début, de fin, en entrée, en sortie.
- Pk Ldéb=2 et que veut dire la signification de Lfin?
Parce que la liste où il faut choisir une ligne au hazard commence à la ligne 2 et finit à la dernière date renseignée de la colonne A.
Est dans ces variables que je rentre les valeurs de date de début et de fin pour le tirag aléatoire?
Ben non, c'est dans DateDéb et dans DateFin qu'elle sont saisies. Il suffit de répondre aux InputBox quand la macro s'exécute.
- "Vous les auriez calculés avec Match"...qu'est ce que veut dire Match?
C'est la fonction EQUIV, utilisée dans du code VBA
- "Ça veut dire "recommencer à partir de l'instruction qui suit le dernier Do jusqu'à ce que la cellule à la colonne B, Ligne =Le contienne mieux qu'une chaîne vide"...j'ai pas compris le sens de la phrase ni ce que veut dire Do
Faites Alt+F11. Clic droit dans l'explorateur de projet, Insertion, Module. Copiez y ma procédure, mettez le curseur texte sur le mot "Do", touche F1.
- La fonction qui tire aléatoirment est juste Randomize dans le code?
Non, elle rénitialise le générateur. C'est Rnd qui tire une valeur aléatoire uniformément distribué de 0 à 1, bornes excluses. Utilisez la touche F1 sur Randomize et sur Rnd

À +
 

Discussions similaires

Statistiques des forums

Discussions
312 755
Messages
2 091 707
Membres
105 053
dernier inscrit
HAMOUD