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

Access Discussion :

Prélever de façon aléatoire 25% des enregistrements d'une ta


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Prélever de façon aléatoire 25% des enregistrements d'une ta
    Bonjour à tous!
    j'aimerais pouvoir Prélever de façon aléatoire 25% des enregistrements d'une table donnée. Comment puis-je le faire.
    Merçi d'avance pour votre aide

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    On peu imaginer charger la table dans un RecordSet.
    A partir de là tu peux savoir combien il y a d'enregistrement et donc savoir combien d'enregistrements représentent 25% des enregistrements.
    Tu utilise Randomize en vba pour générer autant de nombre aléatoire que nécessaire entre 1 et le nombre total d'enregistrements (en prennant soin de vérifier l'unicité de chacun).
    Maintenant tu peux parcourir le RecordSet en incrémentant une variable à chaque tour, et si ce nombre incrémenté est égal à l'un des chiffres générés aléatoirement tu garde l'enregistrement.

    Bon ... une solution plus simple serait de faire une requête sur la table du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * From table1 Order By mid(Champtxt, 2, 1)
    En fait ici tu peux généré le chiffre 2 que l'on voit ici aléatoirement, ainsi à chaque fois tu auras un ordre d'enregistrements différent. Tu ouvre ça dans un recordSet et tu parcours les "25% premiers enregistrements"
    Mais tu as besoin d'un champ de type texte.

    Bon ... bien capilotractées comme solutions mais c'est de l'inspiration passagère. C'est à ce genre de moment que quelqu'un va poster après proposant une solution toute simple et évidente.

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 174
    Points
    12 174
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Bonne idée Demco...
    Ca m'a donné une idée //

    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
     
    Function Prendre25Pourcent(ByVal TableName As String, ByVal FieldName As String) As Variant
    Dim oRS As Recordset
    Dim lngNBRecords As Long
    Dim intFlagPosition As Integer
    Dim intRest As Integer
    Dim intPercent As Integer
    Dim aRecords() As Variant
    Dim I As Long
     
      Set oRS = CurrentDb.OpenRecordset("SELECT " & FieldName & " FROM " & TableName & " ORDER BY " & FieldName, 2)
      If oRS.EOF = False Then
        With oRS
          .MoveLast
          lngNBRecords = .RecordCount
          intPercent = lngNBRecords * 0.25
    RunAgain: Randomize
          intFlagPosition = (Int(Rnd * 100) \ (Rnd + 1)) + 1
          If intFlagPosition >= lngNBRecords - intPercent Then GoTo RunAgain
          ReDim aRecords(1 To intPercent)
          .MoveFirst
          Do While Not .EOF
            If .AbsolutePosition >= intFlagPosition Then
              I = I + 1
              aRecords(I) = .Fields(FieldName).Value
              If I >= intPercent Then
                Exit Do
              End If
            End If
            .MoveNext
          Loop
          .Close
        End With
      End If
      Set oRS = Nothing
      Prendre25Pourcent = aRecords
    End Function
     
    Sub TesterExemple()
    Dim aResultat As Variant
    Dim I As Integer
      aResultat = Prendre25Pourcent("Clients", "[Code client]")
      For I = LBound(aResultat) To UBound(aResultat)
        Debug.Print aResultat(I)
      Next
    End Sub
    C'est à tester en mode DEBUG sur "les Comptoirs"

    Argy

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    si ta table comporte une donnée numérique aléatoire
    chiffre de vente
    compteur numérique ou autre numéro de client
    tu fais mod(ent(monnombre);4)
    et tu mets sur celle clause un critère de 0 à 3

    cette méthode crée un échantillon supposé aléatoire
    on obtient pas 25% de la table mais environ 25 %

    on prendra soin de vérifier que l'échantillon est correct pour un chiffre d'affaire moyenne et écart type de l'échantillon proche de la population

Discussions similaires

  1. selectionner des enregistrements d'une facon aléatoire
    Par waldoun dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/06/2007, 20h00
  2. selection des enregistrements d'une façon aléatoire
    Par waldoun dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2007, 13h14
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51
  5. Exclure des enregistrements d'une requête
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 20/06/2005, 13h01

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