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 l'index colonne du min dans une variable tableau [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Trouver l'index colonne du min dans une variable tableau
    Bonjour a tous
    j'avais vu ca quelques part mais je ne le trouve plus

    j'ai une variable tableau de 1 ligne sur X colonne

    je cherche a determiner l'index de colonne de la plus petie valeur
    en gros je veux trier dans une 2 eme variable tableau le premier mais je veux les index et non les valeurs dans la 2 eme variable tableau



    en gros
    j'ai une 1 ere variable dans la quelle il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tablo1=(array(30,12,49,56,37,89,53)
    et je voudrais obtenir dans mon tableau secondaire

    1,0,4,2,6,3,5
    ces chiffres etant les indexs (position) du premier tableau


    j'ai bien essayé comme ceci: mais ca ne fonctionne pas
    les deux variables tableau ayant bien entendu la meme dimention

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    For i = 0 To Val(Cells(5, "B"))
        old = 1000
         For a = 0 To UBound(tablo)
         If Val(tablo(0, a)) < old Then old = tablo(0, a): indexo = a
          Next
     
      e = e + 1
      tablo(0, Indexo) = 1000
      tablof(0, e - 1) = Indexo
     Next
    quelqu'un aurait une idée ??
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Petite idée rapide

    Tu as un tableau, tu fais un tableau de même longueur avec de 0 à x (juste les index)
    Ensuite pendant le tri c'est toujours un test et un switch de valeurs. Donc là tu test sur le tableau des données et tu switch de la même façon sur les deux tableaux

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour antoni
    soit je n'ai pas compris soit tu oublie quelque chose

    j'ai bien un 2 eme tablo de la meme dimention deja
    ce qu je veux dedans se sont les index des items mais dans l'ordre croissant par rapport a la valeurs des items du 1 er
    comme je l'ai montré dans mon ennoncé
    ta methode me donnerait un tableau avec les index dans le meme ordre
    c'est sans interet

    dans le 2 eme tableau il est pratiquement impossible sinon a 100% d'avoir(1,2,3,4,5,6,7,8,9,....)

    je ne sais pas si je me suis fait comprendre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re bon finalement j'avais trouvé tout seul j'etais pas loin des le depart

    si quelqu'un a une autre methode je veux bien la voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 0 To 15
            For e = 0 To Val(Cells(5, "B"))
                If Val(tablo(0, e)) = WorksheetFunction.Min(tablo) Then a = e: Exit For
            Next
            tablof(0, i) = a + 1
            tablo(0, a) = 1000
        Next
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Coucou patricktoulon,

    Désolé j'ai voulu répondre rapidement avant de ne plus avoir de PC sous la main. Ça a rendu mon poste vraiment pas claire.
    Je reviens aujourd'hui avec l'intention d'être plus clair même si ton souci est résolu.

    En fait lorsqu'on tri un tableau, on test les valeurs entre elles et ensuite on permute en fonction du test. En répétant autant de fois qu'il le faut on a un tableau trié :
    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
    Sub tri()
        Dim tableau()
        Dim valeur_boucle&, i&, tempo_tableau&
        tableau = (Array(30, 12, 49, 56, 37, 89, 53))
        Do 'tri décroissant
            valeur_boucle = 0
            For i = 0 To UBound(tableau) - 1
                If tableau(i) < tableau(i + 1) Then
                    tempo_tableau = tableau(i)
                    tableau(i) = tableau(i + 1)
                    tableau(i + 1) = tempo_tableau
                    valeur_boucle = 1
                End If
            Next i
        Loop While valeur_boucle = 1
    End Sub
    Donc l'idée pour avoir un tableau avec les indices triés c'est d'avoir un autre tableau avec uniquement les indices et de faire les permutations dans les deux tableaux :
    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
    Sub tri2()
        Dim tableau(), indice()
        Dim valeur_boucle&, i&, tempo&
        tableau = (Array(30, 12, 49, 56, 37, 89, 53))
        indice = tableau
        For i = 0 To UBound(indice)
            indice(i) = i
        Next i
        Do 'tri décroissant
            valeur_boucle = 0
            For i = 0 To UBound(tableau) - 1
                If tableau(i) < tableau(i + 1) Then
                    tempo = tableau(i)
                    tableau(i) = tableau(i + 1)
                    tableau(i + 1) = tempo
                    tempo = indice(i)
                    indice(i) = indice(i + 1)
                    indice(i + 1) = tempo
                    valeur_boucle = 1
                End If
            Next i
        Loop While valeur_boucle = 1
    End Sub
    Avec ça tu as bien dans le tableau indice les valeurs {1,0,4,2,6,3,5}

    EDIT :
    J'ai utilisé le tri de ce Tuto sur les tableaux mais comme l'idée est de permuter des deux cotés, peu importe la méthode de tri.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour antoni

    oui j'avais envisagé cette solution dans un code un peu plus simple

    en gardant la methode du tri de la faq et au niveau de la permutaion de i sur i+1 ajouter simplement la ligne indice de la meme maniere

    je cherchais des methodes un peu différentes

    notament avec
    application.large(tablo,X)

    ou
    min ou max

    j'aurais bien voulue faire quelque chose avec application.index aussi
    sur MSDN
    malgré avoir traduit la page je n'ai pas pu faire quoi que se soit
    WorksheetFunction.Index Méthode (Excel)
    Autres versions

    Retourne une valeur ou la référence à une valeur à partir d'un tableau ou d'une plage. Il existe deux formes de la fonction INDEX: la forme de tableau et la forme de référence.

    Syntaxe

    --------------------------------------------------------------------------------


    expression. Index (Arg1, Arg2, Arg3, Arg4)
    expression Une variable qui représente une WorksheetFunction objet.
    Paramètres

    Arg1 nécessaire Variante

    Matrice ou une référence - une plage de cellules ou une constante tableau. Pour des références, il est la référence à une ou plusieurs plages de cellules.

    Arg2 Nécessaire Double

    Row_num - sélectionne la rangée dans le réseau à partir de laquelle une valeur de retour. Si row_num est omis, no_col est nécessaire. Pour les références, le numéro de la ligne de référence à partir duquel retourner une référence

    Arg3 Optionnel Variante

    No_col - sélectionne la colonne dans le tableau à partir de laquelle une valeur de retour. Si no_col est omis, row_num est nécessaire. Pour référence, le numéro de la colonne dans laquelle de référence pour renvoyer une référence.

    Arg4 Optionnel Variante

    Area_num - utilisé uniquement lors du retour des références. Sélectionne une plage de référence à partir duquel retourner l'intersection de row_num et no_col. Le premier domaine sélectionné ou entré est le numéro 1, la deuxième est 2, et ainsi de suite. Si area_num est omis, INDEX utilise la zone 1.

    Valeur de retour est variante


    Remarques

    --------------------------------------------------------------------------------


    Sous forme de tableau

    Retourne la valeur d'un élément dans un tableau ou un tableau, choisi par les lignes et de colonnes numéro index.
    Utilisez le formulaire de tableau si le premier argument de INDEX est une constante tableau.

    Si les deux row_num et no_col arguments sont utilisés, INDEX renvoie la valeur dans la cellule à l'intersection de row_num et no_col.

    Si vous définissez row_num ou no_col à 0 (zéro), INDEX retourne le tableau de valeurs pour la colonne ou ligne entière, respectivement. Pour utiliser les valeurs renvoyées sous forme de tableau, entrez la fonction INDEX comme une formule de matrice dans une gamme de cellules horizontale pour une ligne, et dans une gamme verticale de cellules pour une colonne. Pour entrer une formule matricielle, appuyez sur CTRL + SHIFT + ENTRER.

    Row_num et no_col doivent pointer vers une cellule au sein de tableau; autrement, INDEX retourne le REF! valeur d'erreur.

    Forme de référence

    Renvoie la référence de la cellule à l'intersection d'une ligne et colonne particulière. Si la référence est constitué de sélections non adjacentes, vous pouvez choisir la sélection de regarder dans. Si chaque zone en référence ne contient qu'une seule ligne ou une colonne, l'row_num ou no_col argumentation, respectivement, est facultatif. Par exemple, pour une seule référence de ligne, utiliser INDEX (référence ,, no_col).

    Après référence et area_num ont sélectionné une gamme particulière, row_num et no_col sélectionner une cellule particulière: row_num 1 est la première ligne de la plage, no_col 1 est la première colonne, et ainsi de suite. La référence retournée par INDEX est l'intersection de row_num et no_col.

    Si vous définissez row_num ou no_col à 0 (zéro), l'indice retourne la référence pour la colonne ou ligne entière, respectivement.

    Row_num, no_col et area_num doit pointer vers une cellule au sein de référence; autrement, INDEX retourne le REF! valeur d'erreur. Si row_num et no_col sont omis, INDEX renvoie la surface en référence spécifiée par area_num.

    Le résultat de la fonction d'index est une référence et est interprété en tant que tel par d'autres formules. Selon la formule, la valeur de retour d'indice peut être utilisé comme référence ou comme une valeur. Par exemple, la cellule de formule ("largeur", INDEX (A1: B2,1,2)) est équivalent à CELLULE ("largeur", B1). La fonction de cellule utilise la valeur de retour d'index comme une référence de cellule. D'autre part, une formule telle que 2 * INDEX (A1: B2,1,2) traduit la valeur de retour de INDEX dans le nombre dans la cellule B1.
    tu aurais une idée ?
    merci pour le retour
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [PHP 5.3] Récupérer tous les index d'un array dans une variable
    Par BLJ.CHAUVIN dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2011, 16h36
  2. Réponses: 2
    Dernier message: 12/10/2010, 09h35
  3. Réponses: 13
    Dernier message: 09/08/2008, 14h04
  4. recherche dans une variable tableau
    Par le petit nicolas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/05/2007, 12h41
  5. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50

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