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 :

comparaison une serie de nombre avec une autre serie


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut comparaison une serie de nombre avec une autre serie

    bonjour à tous
    j'ai untableau excel
    ou sur la meme ligne , pour l'exemple ligne 1
    disons des cellules 20 à 30 une serieA de nombre comme 15-20-1-9-17-2-5-8
    dans la meme ligne disons dans les cellules 50à54 une autre serieB 20-1-8-9-5

    je souhaiterai trouver un code permettant de comparer ces 2 series pour obtenir
    sur la meme ligne le resultat suivant
    dans la cellule 150 le terme "gagnant" car le 20 existe dans la serie A est situe en premiere positon dans la serie B

    dans cellule 151 le terme "place "car le 1 existe dans la serie A et est situe en 2 positiondans la serie B

    dans cellule 152 le terme "place" car le 8 existe dans la serie A et est present en 3position dans la serie B

    dans cellule 153 le terme"gagne ordre " car la suite 20-1-8 est present dans l dans la serie A et correspond dans l'ordre dans la serie B au 3 premier numero soit 20-1-8

    dans cellule 154 le terme"gagne desordre " car la suite 20-1-9-8 est present dans la serie A et correspond dans desordre dans la serie B au 4 premier numero soit 20-1-8-9

    dans la cellule 155 le terme"gagne desordre " car la suite 20-1-9-5-8 est present dans la serie A et correspond dans desordre dans la serie B au 5 numero soit 20-1-8-9-5

    je precise aussi que si la compraison est perdant à la place de "gagner" , il y a "perdu"

    le nombre total de ligne est 1000 lignes ....

    merci

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    Si je comprends bien tu veux tester plusieurs listes A avec plusieurs listes B?
    j'ai des idées, mais j'ai peur (c'est un euphémisme) que ce soit gourmand en temps
    J'y réfléchis
    Slts

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut suite
    merci
    juste une precision afn de corriger une erreur
    pour les cellules 150,151,152 si pas "gagnant" alors perdant (rien ne change)
    mais pour la cellule 153,154,155
    cellule 153
    il peut y avoir "gagner ordre" si la combinaison dans la serie A eest la meme dans la serie B en respectant le meme position
    et bien sur "perdant" si il n'y a pas les trois n° identique entre la serie A et B
    cellule 154
    idem dans que 153 mais 4 numeros identique
    cellule 155
    idem mais que 153 mais en 5 numero identique

    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Oh ! Un quinté !!!
    Moi aussi j'ai des idées mais ça risque de manger beaucoup de temps aussi ...
    J'essaie de t'en faire profiter dès que j'ai un peu de temps à y consacrer...
    Bon courage !

    Az
    (j'ai envie de dire qu'il y aura peut-être une ou plusieurs boucle if...)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Voilà un premier petit truc qui marche pas (pour l'instant...)
    Mais qui peut te donner une idée de la façon dont moi je verrais les choses...

    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
     
    Sub quinté()
    Dim i As Integer
    Dim j As Integer
    Dim pos1 As Integer
    Dim pos2 As Integer
    Dim pos3 As Integer
    Dim pos4 As Integer
    Dim pos5 As Integer
    Dim cel1 As Range
    Dim cel2 As Range
     
    Worksheets("Résultat").Activate
     
    For Each cel1 In Worksheets("Résultat").Range("A1", Range("A1").End(x1down))
        i = 0
        pos1 = 10
        pos2 = 0
        pos3 = 0
        pos4 = 0
        pos5 = 0
        For Each cel2 In Range(cel1, cel1.Offset(0, 7))
            i = i + 1
            If cel2.Value = cel1.Offset(0, 11).Value Then
            cel1.Offset(0, 20).Value = "Gagnant"
            pos1 = i
            ElseIf cel2.Value = cel1.Offset(0, 12).Value Then
            cel1.Offset(0, 21).Value = "Placé"
            pos2 = i
            ElseIf cel2.Value = cel1.Offset(0, 13).Value Then
            cel1.Offset(0, 22).Value = "Placé"
            pos3 = i
            ElseIf cel2.Value = cel1.Offset(0, 14).Value Then
            pos4 = i
            ElseIf cel2.Value = cel1.Offset(0, 15).Value Then
            pos5 = i
            End If
        Next
        If pos1 < pos2 < pos3 Then cel1.Offset(0, 23).Value = "gagnant tiercé ordre"
        If cel1.Offset(0, 20) <> vide And cel1.Offset(0, 21) <> vide And cel1.Offset(0, 22) <> vide Then cel1.Offset(0, 24) = "gagnant désordre"
        If pos1 < pos2 < pos3 < pos4 Then cel1.Offset(0, 25).Value = "gagnant quarté ordre"
        If cel1.Offset(0, 24) <> vide And pos4 <> 0 Then cel1.Offset(0, 26) = "gagnant quarté désordre"
        If cel1.Offset(0, 25) <> vide And pos4 < pos5 Then cel1.Offset(0, 27).Value = "gagnant quinté ordre"
        If cel1.Offset(0, 26) <> vide And pos5 <> 0 Then cel1.Offset(0, 28).Value = "gagnant quinté désordre"
        For Each cel2 In Range(cel1.Offset(0, 20), cel1.Offset(0, 28))
            If cel2 = vide Then cel2.Value = "perdu"
        Next
    Next
     
    End Sub

    Les numéros joués sont dans les colonnes 1 à 10, le résulat colonnes 12 à 16 et le reste colonnes 21 à 29

    Bon si ça peut t'aider un peu tant mieux mais chez moi ça marche pas :-)


    Az...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Celui-là il marche -
    Enfin jusqu'à 3 lignes... j'ai pas testé plus...
    Dis-moi si c'est long :-p

    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
    Sub quinté()
    Dim i As Integer
    Dim j As Integer
    Dim pos1 As Integer
    Dim pos2 As Integer
    Dim pos3 As Integer
    Dim pos4 As Integer
    Dim pos5 As Integer
    Dim cel1 As Range
    Dim cel2 As Range
     
    For Each cel1 In Worksheets("Résultat").Range("A1", Range("A65356").End(xlUp))
        i = 0
        pos1 = 10
        pos2 = 0
        pos3 = 0
        pos4 = 0
        pos5 = 0
        For Each cel2 In Range(cel1, cel1.Offset(0, 7))
            i = i + 1
            If cel2.Value = cel1.Offset(0, 11).Value Then
            cel1.Offset(0, 20).Value = "Gagnant"
            pos1 = i
            ElseIf cel2.Value = cel1.Offset(0, 12).Value Then
            cel1.Offset(0, 21).Value = "Placé"
            pos2 = i
            ElseIf cel2.Value = cel1.Offset(0, 13).Value Then
            cel1.Offset(0, 22).Value = "Placé"
            pos3 = i
            ElseIf cel2.Value = cel1.Offset(0, 14).Value Then
            pos4 = i
            ElseIf cel2.Value = cel1.Offset(0, 15).Value Then
            pos5 = i
            End If
        Next
        If pos1 < pos2 And pos2 < pos3 Then cel1.Offset(0, 23).Value = "gagnant tiercé ordre"
        If cel1.Offset(0, 20) <> vide And cel1.Offset(0, 21) <> vide And cel1.Offset(0, 22) <> vide Then cel1.Offset(0, 24) = "gagnant désordre"
        If cel1.Offset(0, 23) <> vide And pos3 < pos4 Then cel1.Offset(0, 25).Value = "gagnant quarté ordre"
        If cel1.Offset(0, 24) <> vide And pos4 <> 0 Then cel1.Offset(0, 26) = "gagnant quarté désordre"
        If cel1.Offset(0, 25) <> vide And pos4 < pos5 Then cel1.Offset(0, 27).Value = "gagnant quinté ordre"
        If cel1.Offset(0, 26) <> vide And pos5 <> 0 Then cel1.Offset(0, 28).Value = "gagnant quinté désordre"
        For Each cel2 In Range(cel1.Offset(0, 20), cel1.Offset(0, 28))
            If cel2 = vide Then cel2.Value = "perdu"
        Next
    Next
     
    End Sub
    Az

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut serie
    bonjour azounet

    j'ai joint un fichier execl et fait une modifi mais je n'arrive pas à afficher le resultat correct et au bonne endroit

    cordialement

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Oula !
    Est-ce que tu as compris la modif que tu avais faite (l'ajout de "ligne") ?
    La methode Offset de l'objet Range créé un décalge de X lignes et Y colonne si tu l'écris : macellule.offset(X,Y).
    Dans ton code, tu as donc créé un décalage de 4 lignes...
    Pour ce qui est de l'ajout de la variable vide, chez moi elle n'est pas nécessaire mais si tu dois le faire chez toi alors fait-le, ça ne gène pas le programme.

    Je t'ai modifé ce qu'il fallait, dis-moi si ça te va mieux et si tu comprends les changements !!!

    Je te laisse faire le multi tout seul

    Az
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Hello !
    Voilà j'ai rajouté des comments.
    La principale difficultés d'adaptation de ce programme à une strcuture existante étant la gestion de l'offset, j'espère tout de même que tu y parviendras.
    N'hésite pas à me dire ce qui ne va pas ou éventuellement ce qui fonctionne .
    Bonne fin de week end !

    Az
    Fichiers attachés Fichiers attachés

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut serie

    d'abord merci
    tu m'as fait decouvrir de nouvelles fonctions( et utilisations possibles.

    a)j'aurai besoin de qql explication complementiaire sur la ligne suivant
    "For Each cel1 In Worksheets("Résultat").Range("A4", Range("A65356").End(xlUp))
    peut on lui faire demarrer le parcour de la feuille à partir du colonne determinée.
    ex: je veux qui lise à partir de la colonne D et cela sur tout le tableau.

    b)Range(cel1.Offset(0, 15), cel1.Offset(0, 23)).Clear ' l:
    la commande OFFSET m'intrigue? pourrais tu m'expliquer un peu plus car on la voit de partout dans le programme?

    merci d'avance

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Oki !

    a) Attention je me suis peut-être mal exprimé mais cette boucle ne fait parcourir qu'une colonne. Tu définis après le "in" la zone que tu veux parcourir.

    Dans la configuration actuelle, on parcours la colonne A de la cellule "A4" jusqu'à la première cellule non-vide en partant du bas (Range("A65356").end(x1Up)).

    Si c'est la colonne D que tu veux parcourir (attention pour la suite du programme fonctionne correctement, il faut que ce soir la colonne ou est inscrit le premier numéro joué), remplace simplement dans la ligne de la boucle les deux A par des D.

    b) la commande offset va te permettre de chercher un cellule lorsque tu connais sa position par rapport à une cellule déterminée. Dans tout le programme je pars de la première cellule de la ligne (Cel1) et je fais prendre à cel2, tour à tour, les valeurs des autres cellules de résultat (2ème boucle).

    Lors du Range(Cel1.offset(0,15),Cel1.offset(0,23)).clear , je dis que l'ensemble des cellules comprises entre celle située sur la même ligne que cel1 mais décalée de 15 colonnes et celle située sur la même ligne mais décalée de 23 colonnes doivent être vidées.

    La commande offset est piègeuse car si tu insères une colonne dans ton tableau tu risques de ne plus avoir le bon résultat...

    Pour plus de précision sur les commandes qui t'intriguent, n'hésite pas à jeter un coup d'oeil dans l'aide de VbA, la syntaxe est très bien expliquée !

    N'hésite pas à revenir vers moi si tu n'as toujours pas compris ...

    ++
    Az

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut serie

    bonsoir à tous, azounet.
    voici en piece jointe le fichier tiercetravail que j'ai ,en fin j'espere,fait avance.
    Peux tu me dire si l'ensemble est correct et si on peut eventuellment l'optimiser.
    il y a le2/4 et le 4/5 ou je n'arrive pas à ecrire le code.

    tu verras j'ai associe des boutons pour retenir ou pas les chevaux .
    il y a peut etre mieux en termes de selection (je pense au checkbox )

    cordialement

Discussions similaires

  1. Comparaison cellules avec une plage de données dans un autre fichier
    Par Jibi64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/08/2008, 16h22
  2. Parser une Partie du Fichier avec un autre Schema
    Par cimdziri dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 23/04/2008, 17h59
  3. Datediff mais avec une date & un nombre de jours en input
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/12/2007, 17h08
  4. [Source] Comment arrondir un nombre avec une précision variable
    Par OhMonBato dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 31/03/2007, 12h44
  5. Ajout dans une table et relation avec d'autres
    Par climz dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 15h32

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