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 :

Eviter de très nombreuses combinaisons


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut Eviter de très nombreuses combinaisons
    Bonjour à tous,

    J'ai une feuille de résultat qui me donne le classement intermédiaire du tournoi.
    Je cherche une solution pour vérifier le tour de jeu des finalistes.
    Le classement intermédiaire s'établit au maximum sur 6 joueurs.
    Le premier joueur à son classement intermédiaire sur la case X9
    Les joueurs suivant il suffit d'incrémenter de 5 pour chaques joueurs.
    Ce qui donne pour le dernier joueurs, son classement intermédiaire sur la case X34.

    Pour le dernier tour (finale), le premier joue contre le second et le troisième contre le quatrième (classement établit sur le classement intermédiaire).

    Un exemple de solution possible
    Joueur1: X9 = 1
    Joueur2: X14 = 3
    Joueur3: X19 = 2
    Joueur4: X24 = 4
    Joueur5: X29 = 6
    Joueur6: X34 = 5

    Ce qui nous donne pour le dernier tour
    Joueur1 contre Joueur3
    et
    Joueur2 contre Joueur4
    Ce qui m'interresse est de connaitre la case du nom du joueur concerné.
    Je reprend l'exemple:
    Joueur1 contre Joueur3 me donne case A9 contre case A19
    Joueur2 contre Joueur4 me donne case A14 contre case A24.
    Si j'ai ces 2 cases je peut vérifier si les tours ne mettent pas d'erreur.

    Le problème est que je ne veut pas mettre toutes les possibilité, car il faudrait que j'écrive plus de 300 conditions.

    Je pensais à un script de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each cel In Sheets("Joueurs").Range("X9 :X34")
          If cel = 1 Then
              joueurclasse1 = cel.Offset(0, -23)
          End If
          If cel = 2 Then
              joueurclasse2 = cel.Offset(0, -23)
          End If
    Next cel
    Le problème de ce code est que j'ai le nom du joueur et non la case

    Si vous avez des idées ou d'autres méthodes de procédés pour obtenir le résultat plus simplement
    Merci à tous

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut peofofo et le forum
    Par macro, je ferais un tableau que je classerais par ordre croissant, en utilisant ensuite les indices paires contre les impaires

    Mais pour un problème de ce genre, j'utiliserais des formules
    Avec Petite.Valeur (ou rang), mais en utilisant une colonne supplémentaire, Yn=Xn+(Ligne()/1000) pour départager les ex-aequo.
    Après, avec index() et equiv(), je renvoi le nom (ou autre chose)
    A+

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    je n'ai pas bien compris comment on arriverait à 300 duels pour 6 joueurs, chacun d'entre eux devant rencontrer une fois chacun des autres ...
    Pour 6, moi je ne trouve que 15 duels . (5 + 4 + 3 + 2 + 1)

    Explique mieux (j'ai sans doute mal compris)

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    Si ça peut te rassurer UC je n'ai pas bien compris non plus d'autant plus qu'on ne parle plus que de 2 duels (joueur 1 vs 3 et joueur 2 vs 4)

    Sinon pour reprendre
    Le problème de ce code est que j'ai le nom du joueur et non la case
    D'après ce que j'en ai compris, cela devrait donner un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim joueurclasse(1 To 4)
    For Each cel In Sheets("Joueurs").Range("X9:X34")
        Select Case cel
            Case 1: joueurclasse(1) = Cells(cel.Row, 1).Address
            Case 2: joueurclasse(2) = Cells(cel.Row, 1).Address
            Case 3: joueurclasse(3) = Cells(cel.Row, 1).Address
            Case 4: joueurclasse(4) = Cells(cel.Row, 1).Address
        End Select
    Next cel

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Désolé de ne pas etre assez explicite.
    Je vais te montrer quelques combinaison possible :
    Nom du joueur | RANG POSSIBLE(s)
    Joueur1 1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |
    Joueur2 2 |2 |2 |2 |2 |2 |3 |3 |3 |3 |3 |3 |
    Joueur3 3 |3 |3 |4 |4 |4 |2 |2 |2 |4 |4 |4 |
    Joueur4 4 |NC|NC|3 |NC|NC|4 |NC|NC|2 |NC|NC|
    Joueur5 NC|4 |NC|NC|3 |NC|NC|4 |NC|NC|2 |NC|
    Joueur6 NC|NC|4 |NC|NC|3 |NC|NC|4 |NC|NC|2 |
    NC = Non Classé

    J'arrete là les combinaisons possibles.

    Le problème reste le meme Gorfael, le script que j'ai mis me donne le nom du joueur en fonction du rang, le problème est que j'aurais aimé avoir le nom de la cellule du nom du joueur
    afin de mettre des erreurs...
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ThisWorkbook.Sheets("Résultats").Range("D24") <> ThisWorkbook.Sheets("Résultats").Range("AQ26") Or ThisWorkbook.Sheets("Résultats").Range("D34") <> ThisWorkbook.Sheets("Résultats").Range("AQ24") Then
            MsgBox "Tour de jeu n°1 - Incompatibilité d'adversaire sur la feuille de match entre " & ThisWorkbook.Sheets("Résultats").Range("AQ26") & " et " & ThisWorkbook.Sheets("Résultats").Range("AQ24") & "", 0 + 16, "Erreur n°255"
        Else
    Je pense que je vais devoir mettre des conditions sur les noms des joueurs pour connaitre le nom de la cellule
    si A9 = Joueurclasse1 then
    'Je prend en considération toutes les cellules concernant le joueur1
    si A19 = joueurclasse2 then
    'Je prend en considération toutes les cellules concernant le joueur2
    Je connais désormais toutes les cellules du premier joueur et du second.

    Je ne vois pas comment faire autrement ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Je viens de tester fring ta réponse, décidément tu est vraiment très fort.
    C'est exactement ce que je cherchais .Address

    Je vous remercie tous d'avoir répondu

    Merci mille fois Fring

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Unity 4.5 est disponible : les corrections et améliorations du moteur sont très nombreuses
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 28/05/2014, 16h04
  2. Optimiser l'insertion de très nombreuses lignes depuis .NET
    Par zegreatclan dans le forum Accès aux données
    Réponses: 3
    Dernier message: 12/10/2009, 08h05
  3. Réponses: 3
    Dernier message: 14/09/2008, 12h39
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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