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 :

Trouver la valeur minimum d'une colonne d'un tableau variant VBA à plusieurs dimensions


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Points : 27
    Points
    27
    Par défaut Problème de RechercheV sur un tableau variant VBA à trois dimensions
    Bonjour à tous,

    J'ai un problème avec un tableau en VBA. La solution ne doit pas être complexe mais je ne trouve pas

    Voilà, j'ai une fonction VBA que j'ai nommée Lagfind. Elle procède à des calculs dans une boucle en utilisant deux autres fonctions. (Akaike et Schwarz information criterions). Elle range les résultâts dans un tableau à trois dimensions ("temp"):
    -la première colonne correspond au délai ("Lag")
    -la seconde aux critères AIC pour ce délai
    -la troisième aux critères SIC pour le délai

    Je voudrai que si le minimum du AIC est atteint en Lag 3, elle m'indique 3. Et de même pour le minimum du SIC. Cependant je n'arrive pas déjà à trouver le minimum dans les colonnes de mon tableau.

    En effet, j'ai cru comprendre qu'il ne sélectionne pas toutes les valeurs de la colonne 2 qui contient 15 nombres. Aussi, l'instruction Array n'est pas la bonne. L'instruction Range non plus

    Any ideas?

    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
     
    Function LagFind(Y As Range, X As Range)
    '   Find the number of Lag using AIC and SIC information criterion
        Dim K, i As Integer, temp As Variant
        K = 15
        ReDim temp(K, 3) As Variant
        '
        For i = 1 To K
            temp(i, 1) = i
            temp(i, 2) = AIC(Y, X, i)
            temp(i, 3) = SIC(Y, X, i)
        Next i
        '
        'Find the Lag minimizing AIC and SIC
        Dim MinAic, MinSic, LagAic, LagSic
     
        MinAic = WorksheetFunction.min(range(temp(1, 2), temp(K, 2)))
        LagAic = Application.VLookup(MinAic, temp, 1, False)
     
        MinSic = WorksheetFunction.min(Array(temp(1, 3), temp(K, 3)))
        LagSic = Application.VLookup(MinAic, temp, 1, False)
     
    End Function
    J'oubliais, les valeurs de mon tableau Temp sont comme cela:

    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
    1	1,47533494	6,754085829
    2	1,451687717	6,812431611
    3	1,450860791	6,86650828
    4	1,453698856	6,915370452
    5	1,458011428	6,966012272
    6	1,460715742	7,013070449
    7	1,465700744	7,053706042
    8	1,470644021	7,092846743
    9	1,472862906	7,130334578
    10	1,474822532	7,166463082
    11	1,478294861	7,196580962
    12	1,489471525	7,228630139
    13	1,493153789	7,25874535
    14	1,494039948	7,285451228
    15	1,497900179	7,311176162
    Merci pour votre aide

    Cordialement

    Anthony

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Points : 27
    Points
    27
    Par défaut
    Bonjour à tous,

    Alors j'ai fini par me résoudre à faire une petite manipulation afin de trouver les minimas de mes colonnes ci-dessus et cela fonctionne. Maintenant si quelqu'un sait utiliser VBA et la rechercheV pour un tableau de type variant je suis preneur. Cela me renvoie "erreur 2042". Peut-on par hasard utiliser la fonction VBA Vlookup sur ce type de tableau? ou bien est-ce impossible?

    Merci d'avance de votre aide.

    Anthony

    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
     
    Function LagFind(Y As Range, X As Range)
    '   Find the number of Lag using AIC and SIC information criterion
        Dim K As Integer, i As Integer, temp As Variant
        K = 15
        ReDim temp(1 To K, 1 To 3) As Variant
        '
        For i = 1 To K
            temp(i, 1) = i
            temp(i, 2) = AIC(Y, X, i)
            temp(i, 3) = SIC(Y, X, i)
        Next i
        '
        'Find the minimum of AIC and SIC
        Dim MinAic As Double, MinSic As Double
        MinSic = 1000
        MinAic = 1000
            For i = 1 To K
                MinAic = Application.Min(temp(i, 2), MinAic)
                MinSic = Application.Min(temp(i, 3), MinSic)
            Next i
        '
        'find the lag minimizing
        Dim LagAic As Integer, LagSic As Integer
        LagAic = Application.VLookup(MinAic, temp, 1, False)
        LagSic = Application.VLookup(MinSic, temp, 1, False)
    End Function

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 538
    Points
    8 538
    Par défaut
    Salut
    Si j'ai bien compris, tu veux la valeur de K (1ere dimension de ton tableau) en fonction de la valeur la plus petit de Aic (2eme dimension) et pour la plus petit valeur de Sic(3eme dimension).
    si c'est bien ça, pourquoi ne pas faire ça?

    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
        'Find the minimum of AIC and SIC
        Dim MinAic As Double, MinSic As Double
        Dim TmpMin As Double, TheKAic As Byte, TheKSic As Byte
     
        MinSic = 1000
        MinAic = 1000
            For i = 1 To K
                TmpMin = Application.Min(temp(i, 2), MinAic)
                If TmpMin < MinAic Then TheKAic = i
                MinAic = Application.Min(temp(i, 2), MinAic)
     
                TmpMin = Application.Min(temp(i, 3), MinSic)
                If TmpMin < MinSic Then TheKSic = i
                MinSic = Application.Min(temp(i, 3), MinSic)
            Next i
    A++
    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

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Points : 27
    Points
    27
    Par défaut
    Merci Qwazerty pour ton aide, j'avais fait quelquechose de similaire mais en deux boucles. En fait je me cassais la tête pour pas grand chose car je voulais garder le code le plus petit possible. Mais t'as solution est très bien et simplissime. Merci bien ;-) ==> RESOLU

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

Discussions similaires

  1. [XL-2010] Valeurs différentes d'une colonne d'un tableau
    Par Pierre Dumas dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/11/2012, 15h30
  2. [XL-2007] trouver les valeur différentes d'une colonne
    Par dodo69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/05/2011, 14h50
  3. Recherche de la valeur minimum d'une colonne Excel
    Par defluc dans le forum Langage
    Réponses: 1
    Dernier message: 05/06/2010, 16h03
  4. Réponses: 13
    Dernier message: 06/07/2006, 11h25
  5. Nombre de valeurs différentes dans une colonne
    Par KrusK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2005, 14h18

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