XL 2010 Extraire aléatoirement données(question) avec plusieurs critères

tikazor

XLDnaute Nouveau
Bonjour,

Débutant en VBA, j'ai bricolé un fichier excel avec pour but d'en faire un questionnaire.
j'ai sur l'onglet DATA les questions et les critères qui peuvent correspondre à chaque question, un onglet mappage qui parametre une partie de l'excel.
il y a une VBA userform de Pierre Fauconnier qui fluidifie l'ajout/consultation des données dans le tableau, et une VBA création d'onglet/tableau.

j'aimerai que dans ce nouvel onglet/tableau, puisse s'ajouter 100 questions extraites de manière aléatoire en fonction de conditions spécifiques, par ordre de priorité:
- on cible aléatoirement en priorité le critère temporalité avec le critère (1-2-3) critère N en complément pour atteindre 100
- puis on cible aléatoirement 10 questions de chaque CPS (colonne E)
- puis on cible aléatoirement x questions par rapport au nombre de pro (colonne B)
- puis on cible aléatoirement y questions par rapport au nombre de type (colonne C) qui vient équilibrer logiquement les données du précédent choix
- puis on complète aléatoirement avec z question avec le critère "commun" (colonne B)

Je sais que le résultat final n'aura pas forcément un équilibrage parfait mais l'objectif c'est de s'y approcher

les 2 critères importants pour l'extraction sont les 100 questions et la répartition en 10 catégories "CPS", les critères pro,type sert à équilibrer les questions et le critère "commun" à compléter

Je suis partant pour toutes explications ou accompagnement sur le code à rédiger, de même que l'orientation sur d'autre sujet pouvant m'éclairer (même si j'ai déjà un peu cherché)

Merci d'avance je reste disponible pour tout info complémentaire étant conscient de ne pas être très clair ;)
 

Pièces jointes

  • vba cps.xlsm
    149.4 KB · Affichages: 22

tikazor

XLDnaute Nouveau
re-bonjour,

je pense avoir trouvé un début de solution avec ce code

VB:
Option Explicit

Sub Tirage() 'de Claude Dubois pour MKa le 10/09/2011
Dim Lg&                                         'nombre inscrits
Dim i%                                          'boucle
Dim x&                                          'ligne aléatoire
Dim Tirages%                                    'nombre tirages à régler
Dim T                                           'chrono
    T = Time
    Tirages = 500                               'à régler (500 demandé)
   
    Sheets(1).Activate
    Lg = Range("a" & Rows.Count).End(xlUp).Row - 1

    If Tirages > Lg Then Exit Sub               'contrôle
        Application.ScreenUpdating = False
        Sheets(1).Activate
       
    With Sheets("Résultat")
        .Cells.Clear
        Range("a1:d1").Copy Destination:=.Range("a1")
    End With
   
    Sheets(1).Copy Before:=Sheets(2)
   
    With Sheets(2)                              'feuille temporaire
        For i = 1 To Tirages
            x = Application.RandBetween(2, Lg)
            .Rows(x).Copy Destination:= _
            Sheets("Résultat").Range("a" & Rows.Count).End(xlUp)(2)
            .Rows(x).Delete                     'pour éviter doublons
            Lg = Lg - 1
        Next i
        Application.DisplayAlerts = False
        .Delete                                 'supprime feuille temporaire
    End With
    MsgBox ("temps macro = " & Format(Time - T, "hh:mm:ss"))
End Sub

je suis entrain d'essayer de le comprendre, mais me reste un problème sur la façon dont on peut gérer à l'intérieur du code les critères attendus, pour le moment seul celui du nombre parait abordable.

toute explication est la bienvenue :D
 

Discussions similaires