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 :

arraylist vba, boucles imbriquées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Par défaut arraylist vba, boucles imbriquées
    Bonjour,

    Dans une feuille contenant 4000 lignes, je chercher à réaliser une macro, qui va sortir une arraylist contenant les 10 valeurs les plus élevées de la colonne A.

    Le problème est que les champs de la colonne A sont des dates, j'ai donc une incompatibilité de type avec ce 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
    18
    19
    20
    21
    22
    Sub entrainement ()
    Dim tabdates_compta_max(10) As Date
    Dim cpt1 As Integer
    Dim i As Integer
    Dim j As Integer
     
    tabdates_compta_max(0) = Range("A" & 1).Value
     
    For cpt1 = 0 To Range("A:A").End(xlDown).Row Step 1
     
        For i = 9 To 0 Step -1
     
            If Range("A" & cpt1).Value > tabdates_compta_max(i) Then
     
                For j = i To 10 Step 1
                tabdates_compta_max(j + 1) = tabdates_compta_max(j)
                Next j
            End If
        Next i
    Next cpt1
     
    End Sub
    Merci de m'éclairer SVP! =)

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je peux te proposer autre chose si ça t'intéresse ?
    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
     
    Sub entrainement()
     
        Dim Plage As Range
        Dim tabdates_compta_max(1 To 10) As Date
        Dim I As Integer
     
        'défini la plage de recherche en colonne A
        Set Plage = Range([A1], [A65536].End(xlUp))
     
        'boucle pour récupérer les 10 plus grandes dates
        '(en ordre croissant, de la plus récente à la plus ancienne)
        With Application.WorksheetFunction
     
            For I = 1 To UBound(tabdates_compta_max)
     
                tabdates_compta_max(I) = .Large(Plage, I)
     
            Next I
     
        End With
     
        'pour l'exemple, affiche le résultat dans la fenêtre de débogage
        'c'est ici que tu vas utiliser tes 10 dates...
        For I = 1 To UBound(tabdates_compta_max)
     
            Debug.Print tabdates_compta_max(I)
     
        Next I
     
    End Sub
    Hervé.

  3. #3
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub les_10_recents()
    Dim fin As Integer, cptr As Byte
    Dim Tablo(1 To 10)
     
    fin = Columns("A").Find("*", Range("A1"), , , , xlPrevious).Row
    For cptr = 1 To 10
         Tablo(cptr) = Application.Large(Range("A1:A" & fin), cptr)
    Next
    'pour vérifier
         Range("C1:C10") = Application.Transpose(Tablo)
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Par défaut
    Bonjour et merci pour vos réponses.

    J'ai de mon côté réalisé ce code, mais je le trouve bien compliqué par rapport aux vôtres.

    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
    Sub entrainement()
     
    Dim tabdates_compta_max(10) As Date
    Dim cpt1 As Integer
    Dim I As Integer
    Dim j As Integer
    Dim enfin As Boolean
     
    enfin = True
    tabdates_compta_max(0) = Range("A" & 2).Value
     
    For cpt1 = 2 To Range("A:A").End(xlDown).Row Step 1
        For I = 0 To 9 Step 1
            If enfin = True Then
                If Range("A" & cpt1).Value > tabdates_compta_max(I) Then
     
                    enfin = False
                    For j = 9 To j = I + 1 Step -1
                    tabdates_compta_max(j + 1) = tabdates_compta_max(j)
                    Next j
                    tabdates_compta_max(I) = Range("A" & cpt1).Value
                    End If
                End If
            Next I
        enfin = True
    Next cpt1
     
    Msgbox "voici les 5 plus grosses dates " & tabdates_compta_max(0) & tabdates_compta_max(1) & tabdates_compta_max(2) & tabdates_compta_max(3) & tabdates_compta_max(4) & tabdates_compta_max(5), vbOKOnly, "Mdr"
     
    End Sub

    Puis-je continuer sur cette lancée ou vous me conseillez d’utiliser le votre?
    Car maintenant, je vais pour chacune des 10 dates les plus élevées renvoyer la valeur en colonne C & i également par exemple.

    (En effet vous utilisez des méthodes/fonctions que je ne connais absolument pas)

  5. #5
    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,

    J'ai de mon côté réalisé ce code, mais je le trouve bien compliqué par rapport aux vôtres.
    ....
    Puis-je continuer sur cette lancée ou vous me conseillez d’utiliser le votre?
    c'est ton projet, pas le notre !!!

    En effet vous utilisez des méthodes/fonctions que je ne connais absolument pas
    eh bien, c'est l'occasion d'en faire la connaissance pour progresser

    http://excel.developpez.com/cours/

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 75
    Par défaut
    vous avez raison, je vais me perfectionner en suivant votre voie ! =)

    Juste une petite précision svp.

    J'ai créé un tableau de la meme facon que vous l'avez fait précedemment, qui contient des integer.

    Je voudrais stocker dans ce tableau le numéro de la ligne correspondante à la valeur trouvée dans tab_dates_compta_max(I), le but étant de ressortir la ligne complète ultérieurement.

    J'ai essayé d'utiliser la fonction .index, mais sans succès. Pourriez-vous m'éclairer ?


    Merci

Discussions similaires

  1. [XL-2003] comment ecrire en vba des boucles imbriquées?
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2009, 15h15
  2. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23
  3. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  4. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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