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

Macros et VBA Excel Discussion :

pas de doublon!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut pas de doublon!
    Bonjour forum,
    Je commence un programme qui tire aléatoirement des questions positionnées dans une première feuille et les placent dans une autre feuille sous le nom des personnes qui devront y répondre. Les noms sont positionnés de B1 à L1.
    Je ne sais pas comment faire pour que les questions ne soient tirées qu'une fois (les personnes ne devront jamais avoir la même question).
    Si en plus les personne peuvent avoir plusieurs questions ...
    Merci de me donner une piste.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 215
    Par défaut
    idée peut-être bête : tu remplis une colonne supplémentaire dans la première feuille (dans ton appli, donc), où tu mets une certaine valeur si la question a été tirée. Et puis tu testes la case correspondant à la question, simplement.

    Et tu détruis cette colonne à la fin de l'appli.

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut
    Merci de ta réponse michel,
    Comment je fais pour tester si la valeur à été prise?
    J'ai pas tout compris.

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Voice ce que j'avais mis répondu a une question similaire que tu trouvera ici

    _____________________________________________________________

    Commençons par les bases. A mon avis cela vos mieux

    Prend 8 valeurs (n'importe quoi) et fait un tirage aléatoire de c'est huit valeurs sans remise.
    Ce que je ferais (ce n'est pas optimal j'ai l'habitude pour ce genre de chose d'uiliser des liste chainé, mais bon on va adapter)

    Tu prend un vecteur donnée qui contient tes donnée, un vercteur résultats et un vecteur temporaire (il me sert a compenser le fait que je ne sais pas si il y a des pointeur en VB)
    je te d'onne pas la version avec le code je te laisse transcrire en VBA, j'utilise juste quelque nom de comande qui sont plus simple en vba quen francais

    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
     
    on réalise ntirage (ntirage<=8)
    Redim donnée(1 to 8)
    redim résultats (1 to ntirage)
    'on stocke les valeur dans donnée
     
    for i =1 to ntirage
       'on choisit aléatoirement qu'elle valeur du vecteur donnée sera tiré
       n=Int((ubound(donnée)- 1+ 1) * Rnd + 1)
       'on récupoère le ième résultat
       résultats(i)= donnée(n)
       'on copie les donnée qui n'ont pas été tiré dans le tableau temporaire
       redim temporaire(ubound(donée-1)
       for j = 1 to n
          temporaire(j)=donnée(j)
       next j
       for j = n to ubound(donnée)
          temporaire(j-1)=donnée(j)
       next j
       'temporaire contient toutes les donnée qui n'ont pas encore été tiré
       redim donnée(ubound(temporaire))
       'tu copie les valeur de temporaire dans donnée
        donnée=temporaire 'ca ne devrais pas fonctionner met le bon code
    next i
    (avec des chaine de pointeur c'est quand même bcp plus élégant, mais j'ai pas trouvé mieux pour compenser)

    _____________________________________________________________
    Pour ton exemple tu met dans le vecteur le numéro de colonne ou de ligne qui corespon a ta question

    Je préfère ce type de d'algo qui ne peuvent pas tirer deux fois plus tot que d'espérer que l'on finisse par tirer une valeur qui na pas encore été utilisé (si on tire 90 valeur sur 100 on a 98% de chance que la dernière ai déja été tiré)

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut
    OK je vais essayer cela,
    mais je n'ai pas compris 2 choses:
    -
    on réalise ntirage (ntirage<=8)
    Pourquoi il y a un 8, je dois changer cela?

    -
    donnée=temporaire 'ca ne devrais pas fonctionner met le bon code
    Qu'est ce qui ne devrais pas fonctionner?

    Sinon je viens de penser à quelque chose?
    Est-ce qu'il serait possible de faire un code qui supprime les doublons en lignes et qui refait un tirage pour combler les vides.
    Est-ce plus compliqué?

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    C'est un peu du pseudo code J'avai tapé ca comme ca pour donner le principe.

    Essaye de le convertir en laguage VBA bien propre. Si tu n'y arrive pas post ce que tu as fait et je continuerais

    pour la première ligne tu doit juste écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n=8 'remplace 8 par  ton nombre d tirage

    donnée=temporaire
    pour etre sur que cela fonction (j'ai tjs des doute sur les égalité de tableau)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1 to ubound(donnée)
    donnée(i)=temporaire(i)
    next i
    Et je en sais pas si on peu mettre des accent dans les nom de variable remplace peut être le é de donnée par un e

  7. #7
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Par défaut
    Ok Krovax, une autre petite question?
    J'ai fais un code pour chaque colonne. Est-ce que ton code marche toujours dan ce cas là? Je le met dan schaque colonne?
    Et pour çà?
    Sinon je viens de penser à quelque chose?
    Est-ce qu'il serait possible de faire un code qui supprime les doublons en lignes et qui refait un tirage pour combler les vides.
    Est-ce plus compliqué?

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Pour supprimer les doublon et refaire le tirage il faudra repasser derrière supprimer les doublon refaire le tirage puis.... jusqua ce que l'on ai plus de doublon

    C'est possible mais encore une fois je préfère un algo qui ne peux pas faire deux fois le même tirage plutot que des bidouille qui fait le tirage puis regarde d'une facon ou dune autre si cela a déja été tiré.

    Mon algo fait un triage sur 2 tableau de dimension 1 (ou vecteur)
    Tu les remplis comme tu veux.
    Tu peut très bien faire tirer dans une matrice mais dans ce cas il faut la stocker dans un vecteur (pas très compliqué)

    Tu peux aussi faire un vecteur par colonne et faire une série de tirage par vecteur.

Discussions similaires

  1. distinct .. y a t il pas des doublons dans mabase ?
    Par zin_rbt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/03/2010, 20h27
  2. [XL-2003] pas de doublons ni de vides dans liste déroulante
    Par csophie49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/12/2009, 14h54
  3. Fichier avec clé unique n'acceptant pas de doublon
    Par as40095 dans le forum AS/400
    Réponses: 27
    Dernier message: 03/06/2009, 15h05
  4. requête ajout qui ne crée pas de doublons
    Par crjo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/04/2009, 22h43
  5. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57

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