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 :

fonction pour retrouver certaines valeurs dans un tableau vba que j'ai créé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 32
    Par défaut fonction pour retrouver certaines valeurs dans un tableau vba que j'ai créé
    Bonjour,
    j'ai créé cette fonction pour chercher dans un classeur avec plusieurs pages, les valeurs maximales et afficher un résultat concaténé.
    Ma deuxième boucle me sert pour n'afficher que le résultat.
    Ma dernière boucle, celle qui me donne le résultat concaténé ne fonctionne pas, pouvez vous m'aider?


    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
    51
    52
    Public Function max_clasind(myrange As Range) As String
     
    Dim Arr(), valr(), best() As Integer 'Tableau contenant toutes les valeurs de la cellule choisie
     
    Dim i, j, k, m, n As Integer
    Dim com As String
     
    m = 1
    ReDim Arr(1 To myrange.Count * Worksheets.Count, 3)
     
     
     
    For j = 1 To Worksheets.Count
     
    Set myrange = Worksheets(j).Range(myrange.Address)
     
        For i = 1 To myrange.Count
     
        Arr(m, 3) = myrange.Cells(i).Value
        Arr(m, 1) = Worksheets(j).Name
        Arr(m, 2) = Worksheets(j).Range("B5:B27").Cells(i).Value
     m = m + 1
        Next i
     
    Next j
     
     
    ReDim valr(1 To myrange.Count * Worksheets.Count)
     
    For k = 1 To myrange.Count * Worksheets.Count
    valr(k) = Arr(k, 3)
    Next k
     
    n = 1
     
     
    For i = LBound(Arr, 3) To UBound(Arr, 3)
     
     
    If Arr(3, i) = Application.Max(valr) Then
    best(n) = Arr(1, i) & Arr(2, i) & Arr(3, i)
    n = n + 1
    End If
     
     
    Next i
     
    max_clasind = best(1)
     
     
     
    End Function

  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,

    Teste 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Public Function max_clasind(myrange As Range) As String
     
        Dim Arr(), valr() 'Tableau contenant toutes les valeurs de la cellule choisie
        Dim best As String
        Dim I As Integer, j As Integer, k As Integer, m As Integer, n As Integer
        Dim com As String
     
        m = 1
        ReDim Arr(1 To myrange.Count * Worksheets.Count, 3)
     
        For j = 1 To Worksheets.Count
     
        Set myrange = Worksheets(j).Range(myrange.Address)
     
            For I = 1 To myrange.Count
     
                Arr(m, 3) = myrange.Cells(I).Value
                Arr(m, 1) = Worksheets(j).Name
                Arr(m, 2) = Worksheets(j).Range("B5:B27").Cells(I).Value
                m = m + 1
     
        Next I, j
     
        ReDim valr(1 To myrange.Count * Worksheets.Count)
     
        For k = 1 To UBound(valr)
            valr(k) = Arr(k, 3)
        Next k
     
        For I = LBound(Arr, 3) To UBound(Arr, 3)
     
            If Arr(3, I) = Application.Max(valr) Then
                best = Arr(1, I) & Arr(2, I) & Arr(3, I)
            End If
     
        Next I
     
        max_clasind = best
     
    End Function
    "best" ne peut pas être Integer car tu concatène des valeurs donc, String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    best = Arr(1, I) & Arr(2, I) & Arr(3, I)
    Il n'est pas nécessaire d'utiliser un tableau car tu cherches la valeur maximale et tu ne retourne que la première dimension

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 32
    Par défaut
    bonjour,
    merci de ta réponse,
    mais en fait il est possible dans mon tableau Arr() , que plusieurs lignes correspondent à ma recherche,
    c'est pourquoi je veux les stocker dans un nouveau tableau best(),
    je me servirai ensuite de ce tableau pour concaténer les lignes et les afficher dans le résultat de ma fonction,

    j'ai testé ton code et le résultat me renvoie une erreur type #valeur

    amicalement,

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 32
    Par défaut Résolu
    il y avait une inversion dans ma boucle pour le tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    best=arr(1,i)...
    'en fait il fallait lire
    best=arr(i,1)...
    merci pour ttes vos infos

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

Discussions similaires

  1. [XL-2003] Retrouver une valeur dans un tableau
    Par Autodidacte_vba dans le forum Macros et VBA Excel
    Réponses: 51
    Dernier message: 18/06/2009, 23h23
  2. Récuperation de certaines valeurs dans un tableau PHP
    Par ns_deux dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/05/2009, 22h06
  3. Réponses: 7
    Dernier message: 09/02/2009, 14h28
  4. [Tableaux] retrouver une valeur dans un tableau
    Par tininou dans le forum Langage
    Réponses: 3
    Dernier message: 26/01/2007, 22h04
  5. Réponses: 21
    Dernier message: 28/02/2006, 15h23

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