IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Créer un échantillon à partir d'une liste, en fonction d'un pourcentage donné.


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Par défaut Créer un échantillon à partir d'une liste, en fonction d'un pourcentage donné.
    Bonjour,

    Enoncé du problème :
    J'ai une variable "alerte" sous forme de plusieurs listes réparties par feuille en fonction de différentes entités. Par exemple, feuille (entitéA) comprend une liste d'alerte de 1 à 600.
    Le nombre d'alertes par feuille est variable, si bien que le nombre d'alertes peuvent être inférieur, égale ou supérieur à 500.
    Si Nombre alerte > 500, je veux pouvoir avoir un échantillon de cette liste correspondant à 30% de cette liste.

    Ex : Feuille(entitéA) nombre d'alertes = 501, alors taille d'échantillon = 150
    Feuille(entitéB) nombre d'alertes = 299 alors pas d'échantillon, car 100% de alertes prises en compte
    Feuille(entitéC) nombre d'alertes = 800, alors taille d'échantillon = 240

    De plus, j'aimerais que l'échantillon soit aléatoire, et sans doublon.

    Ce que j'ai fait (voir fichier) :
    (1) J'utilise les fonctions =ALEA() et =RANG(B;B:B;1) pour créer mon échantillon aléatoire.
    (2) Ensuite, à l'aide de la fonction arrondi et NB tel que =ARRONDI(0,3*(NB(B:B));0) j'arrive à trouver le nombre d'alertes à sélectionner dans la liste pour obtenir un échantillon d'environ 30% d'alertes.
    (3) Ensuite, je veux sélectionner chaque nombre correspondant à une alerte (rang donné par la fonction aléatoire) qui est inférieur au nombre d'alertes obtenu dans (2) pour lister l'échantillon
    (4) Ensuite, j'aimerais prendre cette liste et la compiler pour obtenir uniquement le champ des alertes de l'échantillon. (étape que je n'arrive pas encore à faire à cause de la fonction Alea qui s'actionne automatiquement)

    Questions :
    Q1 Avez-vous une façon plus simple de faire ?
    Q2 Il y a t-il une manière de faire cela sous VBA ? Si oui, avez-vous une idée des principale fonction à employer ?
    Q3 Pour la fonction Alea, le calcul de l'alea se fait à chaque fois que l'on touche à une formule de la feuille, ou que l'on double clic. Comment stopper ce calcul, sans bloquer les autres fonctions automatiques de la feuille ?

    Merci par avance pour tous les éclairages apportés !

    PS : J'ai essayé d'utiliser "l'utilitaire d'analyse" pour l'échantillon, mais sauf erreur de ma part, celui-ci ne permet que de sélectionner une valeur déterminé et non un % pour l'échantillon.

    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 415
    Par défaut
    Bonjour,
    Une façon de faire est de procéder à un mélange par permutations aléatoires des cellules, façon boules au Loto.
    Une cellule = une boule. Si chaque boule à un n° différent au départ, il n'y a jamais de doublon.
    Ensuite, il suffit de prendre les n premières cellules pour constituer l'échantillon.
    Un exemple ci attaché.
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Par défaut
    Bonjour,

    Merci EricDgn pour avoir pris le temps de répondre à ma question. J'ai finalement trouvé une solution, à partir du forum et d'interoueb ,et je la poste juste en dessous.
    En espérant que ça puisse aider certains,

    Merci!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    Option Explicit
     
    Sub Tirage()
     
    Dim Lg&                                                     'Number submitted
    Dim i%                                                      'Loop
    Dim x&                                                      'Random Row
    Dim Tirages%                                                'Number of draw to set up
    Dim Compte As Double                                        'Count the number of alerts
    Dim Samplenb%                                               'Alerts number in the sameple (defined on 30%)
    Dim T                                                       'Timer
        T = Time
     
     
        'ActiveWorkbook.Names.Add Name:="Nom_Nombre_Alerte", RefersTo:="=Alertes!R1C14:R1C16"
        'Sheets("Alertes").Range("Nom_Nombre_Alerte").Formula = "=COUNTA(A2:A300000)"
     
        Compte = WorksheetFunction.CountA(Range("A2:A300000"))  'Attribue à la variable "Compte", le nombre de cellule remplies dans la plage "A2:A300000"
     
        'Compte = Range("Nom_Nombre_Alerte").Value
        Samplenb = (Compte * 0.3)                               'Value to change if other that 30%
        Tirages = Samplenb
     
     
        Sheets(1).Activate
        Lg = Range("a" & Rows.Count).End(xlUp).Row - 1
     
        If Tirages > Lg Then Exit Sub                           'Control
            Application.ScreenUpdating = False
            Sheets(1).Activate
     
        'With Sheets("Résultat")
        '.Cells.Clear
        '.Rows("2:1000000").EntireRow.Delete
        'Range("a1:j1").Copy Destination:=.Range("a1")
        'End With
     
        'With Sheets("Résultat")
        '   .Rows("2:100000").EntireRow.Delete
        '    Range("a2:j2").Copy Destination:=.Range("a2")
        'End With
     
        Sheets("Alertes").Copy Before:=Sheets(2)
     
        With Sheets(2)                                          'Temporary sheet
            For i = 1 To Tirages
                x = Application.RandBetween(2, Lg)
                .Rows(x).Copy Destination:= _
                Sheets("Feuille_de_fin").Range("a" & Rows.Count).End(xlUp)(2)
                .Rows(x).Delete                                 'Avoid multiple-occurence
                Lg = Lg - 1
            Next i
            Application.DisplayAlerts = False
            .Delete                                             'Erase temporary sheet
        End With
     
        'Call macro_copiecolle
     
        'With Worksheets("Feuille_de_fin")
        '.Range("A2:J5000").Copy .Cells(.Rows.Count, "A").End(xlUp)(2)
        'ActiveSheet.Range("A2:J5000").Copy .Cells(.Rows.Count, "A").End(xlUp)(2)
        'End With

Discussions similaires

  1. [Débutant] Créer un graphique à partir d'une liste
    Par LUCID3 dans le forum Développement Sharepoint
    Réponses: 13
    Dernier message: 23/04/2015, 03h09
  2. [Python 2.X] Comment créer un classement à partir d'une liste
    Par samcro7 dans le forum Général Python
    Réponses: 6
    Dernier message: 12/04/2015, 03h18
  3. Créer des raccourcis à partir d'une liste d'url
    Par bernardh dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2013, 20h41
  4. Créer un dictionnaire à partir d'une liste
    Par jouclar dans le forum Général Python
    Réponses: 7
    Dernier message: 25/04/2012, 22h09
  5. [DOM4J] Créer un Xpath à partir d'une liste
    Par anisse4 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 30/06/2009, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo