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

VBA Access Discussion :

Eviter les doublons


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Eviter les doublons
    Bonjour,
    J'aimerais "tirer" au hasard des champs d'une base de données.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Randomise
    curY = DCount("[Fiche]", "COMPLETE", "Base=True")
        NUM = Int(curY * Rnd) + 1
        FicheT = curY
        Fiche = NUM: Passage = TOP
        nbFiches = curY
        If TOP = nbFiches Then Exit Sub
        DoCmd.GoToRecord , , acGoTo, NUM
    Ce code fonctionne, mais hélas il peut "tirer" 2 fois le même NUM
    Comment procéder pour être sur de tirer toutes les fiches, sans jamais avoir 2 fois ou plus, la même ?

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par momongana Voir le message
    Ce code fonctionne, mais hélas il peut "tirer" 2 fois le même NUM
    Comment procéder pour être sur de tirer toutes les fiches, sans jamais avoir 2 fois ou plus, la même ?
    Le hasard par principe ne connait pas le passé. Pour que chaque enregistrement soit tiré une et une seule fois ce n'est plus un tirage au hasard mais un "tri au hasard"

    Pour cela je ne vois pas d'autre solution que de marquer les lignes déjà tirées et de choisir au hasard parmi celles qui ne sont pas marquées
    On peut aussi trier sur une fonction mathématique de la clé unique si elle est numérique mais ce n'est pas du hasard au sens strict (ça trie de façon prévisible)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Tirage au hasard
    Bonjour et merci de votre réponse...

    Je ne sais pas si c'est du hasard, mais j'aimerais pouvoir "tirer" toutes les fiches qui effectivement ont un N° de Fiches ordonnée (1-2-3-4-5-6-7....jusqu'a 30000), et ne pas avoir deux fois la même fiche qui "sorte" !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Randomise
    curY = DCount("[Fiche]", "COMPLETE", "Base=True")
        NUM = Int(curY * Rnd) + 1
        FicheT = curY
        Fiche = NUM: Passage = TOP
        nbFiches = curY
        If TOP = nbFiches Then Exit Sub
        DoCmd.GoToRecord , , acGoTo, NUM
    Le curY me donne le total des fiches
    Le NUM me donne un N° au hasard entre 1 et curY...
    Et le Docmd, va ouvrir la fiche.
    Comment faire pour être sur de ne pas avoir de doublon ?
    D'avance, merci pour votre aide.
    Cordialement

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Pour cela je ne vois pas d'autre solution que de marquer les lignes déjà tirées et de choisir au hasard parmi celles qui ne sont pas marquées
    On peut aussi trier sur une fonction mathématique de la clé unique si elle est numérique mais ce n'est pas du hasard au sens strict (ça trie de façon prévisible)
    Je n'ai pas grand chose d'autre à ajouter... Ca dépend à quoi ça sert, si c'est sur une période longue ou courte, si l'algorithme doit garantir que chaque enregistrement a des chances égales d'être choisi ou si c'est juste pour le plaisir d'avoir du vrac...
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Tirage au hasard
    Bonsoir,
    Super la réponse... Mais avec ça, je fais quoi ?
    Peut-être un bout de code pour me faire avancer serait le bienvenu...
    Ca fait 3 jours que je rame dessus et même avec ma "nouvelle formule, je me tapes des doublons !
    Ce serait sympa de m'aider autrement que part des discours... qui j'en conviens sont juste, mais qui ne m'explique pas la façon de faire...
    Mon Code :
    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
    curY = DCount("[Fiche]", "TABLEMOT")
            For I = 1 To curY
    REJOUE2:
     
                REP(I) = Int(curY * Rnd) + 1
                For J = 1 To I - 1
                    If REP(I) = REP(J) - 1 Then
                        GoTo REJOUE2
                    Else
                        Fiche = REP(I)
                        nbFiches = curY
                        Message.Caption = Message.Caption & REP(I) & " - " (Pour essai afin de savoir ce qui est tiré !)
                        DoCmd.GoToRecord , , acGoTo, REP(I)
                        Exit Sub
                    End If
                Next J
            Next I
    D'avance merci
    Cordialement

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Citation Envoyé par momongana Voir le message
    Super la réponse... Mais avec ça, je fais quoi ?
    Tu écris un joli cahier des charges qui explique précisément ce que tu veux faire et quelles sont les données dont tu disposes... ou tu te débrouilles !
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Tirage au hasard !
    Bonjour,

    Voilà quelques années que je demande conseil et aide sur ce forum... et c'est bien la première fois que l'on m'envoi "promener" ou presque !
    Tout le monde n'a pas la science infuse et avec mes 76 ans, je commence un peu à fatiguer...
    Je demandais un bout de code, une routine pour ne pas avoir deux fois le même tirage... Mais on me répond avec hauteur et mépris...
    Je vais donc me "débrouiller", (puisque c'est le conseil que l'on me donne) et au bout de 4 jours de galère je suis enfin arrivé à faire ce que je voulais.

    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
    curY = DCount("[Fiche]", "TABLEMOT")
                For I = 1 To curY - 1
    REJOUE2:
                    REP(I) = Int(curY * Rnd) + 1
                    If I = 1 Then GoTo PASSE
                    For J = 1 To I - 1
                        If REP(I) = REP(J) Then
                            GoTo REJOUE2
                        End If
                    Next J
    PASSE:
                            Fiche = REP(I)
                            nbFiches = curY
                            Message.Caption = Message.Caption & REP(I) & " - "
                            DoCmd.GoToRecord , , acGoTo, REP(I)
                Next I
    Je suppose que ce n'est pas très "catholique", mais ça fonctionne !

    Merci encore à ce charmant "Môssieur", qui me demande un cahier des charges, les données dont je dispose et presque l'âge de ma mère !!!
    Tout ça pour 4 lignes de code que je n'arrivais pas à trouver !

    Encore merci !
    Cordialement

Discussions similaires

  1. Après importation, eviter les doublons
    Par uloaccess dans le forum Access
    Réponses: 6
    Dernier message: 16/11/2005, 16h36
  2. [Débutant][XSLT]Eviter les doublons
    Par leminipouce dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/10/2005, 11h34
  3. hash et Tie , eviter les doublons
    Par bluecurve dans le forum Langage
    Réponses: 5
    Dernier message: 12/10/2005, 16h39
  4. Eviter les doublons
    Par cyrill.gremaud dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2005, 12h37
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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