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 :

Sélectionner une colonne d'un array 2D


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut Sélectionner une colonne d'un array 2D
    Bonjour,

    Je cherche désespérément une façon de sélectionner facilement l'ensemble des valeurs d'une colonne d'une variable tableau 2, pour par exemple en calculer le maximum.

    Voici un exemple très concret :
    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
    Sub test()
     
    Dim tableau(2, 2) As Single
    Dim a As Single
     
    tableau(0, 0) = 10
    tableau(0, 1) = -5
    tableau(0, 2) = 4
    tableau(1, 0) = 11
    tableau(1, 1) = 11
    tableau(1, 2) = 11
    tableau(2, 0) = 11
    tableau(2, 1) = 11
    tableau(2, 2) = 11
     
    a = WorksheetFunction.Max(tableau.Column(1))
    Debug.Print a
    End Sub
    Rem : la réponse attendue est 10, maximum de 10 -5 et 4.

    Malheureusement la commande suivante ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = WorksheetFunction.Max(tableau.Column(1))
    Et je ne trouve pas la bonne syntaxe pour récupérer la première colonne de mon tableau 2D.
    Je sais qu'il y a moyen de le faire via une boucle, néanmoins ça m'étonne qu'il n'existe pas une façon simple comme pour d'autres langage, comme par exemple dans Matlab : tableau(:,1).

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une proposition pour te mettre sur la piste

    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
     
     Sub test()
     
    Dim tableau(2, 2) As Single
    Dim a As Single
    Dim i As Integer
    Dim Col As Integer
    Dim Cpt As Integer
     
    ' ici on indique la colonne du tableau sur laquelle on fait la recherche du Max
    Col = 0
     
    Cpt = 0
     
    tableau(0, 0) = 10
    tableau(0, 1) = -5
    tableau(0, 2) = 4
    tableau(1, 0) = 11
    tableau(1, 1) = 11
    tableau(1, 2) = 11
    tableau(2, 0) = 11
    tableau(2, 1) = 11
    tableau(2, 2) = 11
     
    For i = LBound(tableau, 2) To UBound(tableau, 2)
     
        If Cpt = 0 Then
     
            a = tableau(Col, i)
     
        Else
     
            If tableau(Col, i) > a Then
     
                a = tableau(Col, i)
     
            End If
     
        End If
     
        Cpt = Cpt + 1
     
    Next i
     
    Debug.Print a
     
    End Sub

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut
    Merci pour ta réponse.

    Je sais qu'il y a moyen facilement de le faire via une boucle comme tu l'as fais.
    Cependant, j'aimerai bien faire ceci plus succinctement, et je reste consterné par le fait qu'il faille 10 lignes en VBA, alors que dans d'autres langage ceci tient en une ligne [matlab : a = max(tableau(:,1)) ].

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Application.Max(Application.Index(Tableau, 1))

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour mercatog

    oh c'est super ça, je vais pouvoir simplifier pas mal de choses avec ça !

    faut vraiment que je sorte des mes sentiers


  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut
    Merci beaucoup ! Exactement ce que je cherchais. Je me disais bien que ça devait exister.

    Petite question subsidiaire (niveau performance / principe / ...) :
    Quelle est la différence entre worksheetfunction.max() et application.max() ?

    Connaitre cette différence me permettrait de savoir laquelle utilisée de préférence.

    [EDIT]
    Pour sélectionner la première colonne et non la première ligne il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Application.Max(Application.Index(Tableau, ,1))

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    P... que j'aime ce forum ! Excusez ma ferveur mais j'ai tellement cherché...

    Alors maintenant je complique un peu (ne ris pas Mercatog...). Est-il possible, avec le même exemple de Corentin de récupérer les index de la valeur MAX (10) dans le tableau, qui seraient 0 et 0 (Tableau(0, 0) = 10) ?

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

Discussions similaires

  1. [XL-2003] Sélectionner une colonne à partir d'un chiffre
    Par coklin dans le forum Excel
    Réponses: 9
    Dernier message: 07/09/2009, 14h00
  2. Gnuplot : sélectionner une colonne
    Par djocin dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 25/06/2009, 02h10
  3. Réponses: 4
    Dernier message: 12/06/2008, 17h54
  4. Sélectionner une colonne selon valeur inexistante ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/02/2008, 15h49
  5. Réponses: 24
    Dernier message: 08/05/2006, 16h40

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