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 :

Problème de boucle vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut Problème de boucle vba
    Bonjour,

    Je veux faire une boucle qui me donnera comme résultat pour chaque cellule différente la cellule qui as le plus grand score ou de la première si le score est le même ou de la cellule elle même si le score est unique. Par exemple si j'ai le tableau suivant:

    Nom prénom score
    AAAA BBBBBB 123
    AAAA BBBBBB 456
    CCCC DDDDD 444
    CCCC DDDDD 444
    EEEE FFFFF 1567

    Comme cela, je pourrai avoir comme résultat:
    AAAA BBBBBB 456
    CCCC DDDDD 444
    EEEE FFFFF 1567

    Voilà je veux une boucle qui ne prenne en compte que ces lignes, pour que je puisse les ajouter dans un formulaire.

    Cdt,
    SKIP

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Le mieux est sans doute de mettre les données dans un tableau, puis de les trier (tu trouveras des tonnes d'algorithme de tri sur le web), et enfin de faire une passe pour éliminer les doublons.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Par défaut
    Bonjour,

    Normalement moi ce dont j'ai besoin, c'est que la boucle me prenne les lignes dont j'ai besoin et les insérer dans un formulaire dans le web.

    Il y' aurai pas un code qui me sélectionne les bonnes lignes.
    Moi j'ai le code pour la saisie dans le formulaire web, mais ce qui me manque c'est le choix des bonnes lignes.

    Moi en attendant, ce que je fais c'est que je mets le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const i = numéro_ligne
    et j'applique la macro pour chaque ligne dont j'ai besoin, donc ça me prend du temps.

    Voilà
    Cdt,
    SKIP

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour

    en attendant peut-^tre mieux
    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
    Sub dire_zebest()
    Dim Lig As Long
    Dim dico As Object
    Dim Ref As String, cptr As Long
    Dim T_item, T_key, T_tampon, T_out
     
    Set dico = CreateObject("scripting.dictionary")
    Lig = Cells(Cells.Rows.Count, 1).End(xlUp).Row
     
    For cptr = 2 To Lig
        Ref = Cells(cptr, 1) & ";" & Cells(cptr, 2)
        If Not dico.exists(Ref) Then
            dico.Add Ref, Cells(cptr, 3)
        End If
    Next
     
    For cptr = 2 To Lig
        Ref = Cells(cptr, 1) & ";" & Cells(cptr, 2)
        If dico.exists(Ref) Then
            If dico(Ref) < Cells(cptr, 3) Then
                dico(Ref) = Cells(cptr, 3).Value
            End If
         End If
    Next
    T_item = dico.items
    T_key = dico.keys
     
    ReDim T_out(UBound(T_key), 1)
    For cptr = 0 To UBound(T_key)
        T_tampon = Split(T_key(cptr), ";")
        T_out(cptr, 0) = T_tampon(0)
        T_out(cptr, 1) = T_tampon(1)
    Next
     
    Range("F2").Resize(dico.Count, 2) = T_out
    Range("H2").Resize(dico.Count, 1) = Application.Transpose(T_item)
     
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Par défaut
    Sans mettre tous les détails, tu peux faire ceci :

    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
    L = Cells(Cells.Rows.Count, 1).End(xlUp).Row
    Sort de ligne 1 à ligne L key1:= nom key2:= prénom key3:=score
    L1 =1
    Col1 = 20   ' pour mettre la liste finale dans la colonne 20
    (nom & prenom de la ligne L1) = (nom & prenom de la ligne 1)
    (score ligne L1) = (score ligne 1)
     
     
    for i = 1 to L
       if (nom& prenom de la ligne i) = (nom & prenom de la ligne L1) then
             if (score ligne i) > (nom & prenom de la ligne L1) then
                 (score ligne L1) = (score ligne i)
             end if
        else
             L1 = L1 + 1
             (nom & prenom de la ligne L1) = (nom & prenom de la ligne i)
             (score ligne L1) = (score ligne i)           
       end if
    Next
    C'est compréhensible?

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    Par rapport au code de Michel_M, pourquoi avoir fait deux boucle au départ?

    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
    For cptr = 2 To Lig
        ref = Cells(cptr, 1) & ";" & Cells(cptr, 2)
        If Not dico.exists(ref) Then
            'Si le joueur n'existe pas, on rajoute son profile
            dico.Add ref, Cells(cptr, 3)
        Else
            'Si le joueur a déjà un profil, on met celui ci a jour si le score obtenu est plus élevé que le précédent
            If dico(ref) < Cells(cptr, "C") Then dico(ref) = Cells(cptr, "C")
        End If
    Next
     
    'For cptr = 2 To Lig
    '    ref = Cells(cptr, 1) & ";" & Cells(cptr, 2)
    '    If dico.exists(ref) Then
    '        If dico(ref) < Cells(cptr, 3) Then
    '            dico(ref) = Cells(cptr, 3).Value
    '        End If
    '     End If
    'Next
    Autant tout faire lors de la première boucle, non?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Problème de Boucle Vba
    Par Insaf.ing dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2014, 14h43
  2. Problème avec les boucles VBA
    Par luge29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/06/2010, 15h32
  3. problème avec les boucles vba
    Par Mon_ami dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/04/2009, 06h15
  4. [VBA] - Problème de boucle
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/11/2007, 15h12
  5. [VBA E] Problème de boucles - Structure de code
    Par proutfailelap1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/04/2007, 07h12

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