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 :

vba calcul dans un tableau [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut vba calcul dans un tableau
    Bonjour le forum !
    petite question:
    j'ai créé un tableau à 2 dimension (pout l'exemple: Montableau(3,4))
    Je souhaiterais retirer le max de chaque ligne, soit pour chaque ligne quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheetfunction.max(montableau(1,1),montableau(1,2),montableau(1,3),montableau(1,4))
    existe t il une commande plus sythétique ? (je sais qu'on peut faire cette opération de manière simple sur l'ensemble du tableau avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheetfunction.max(montableau)
    mais je n'arrive pas à transposer sur "un morceau du tableau"... une idée ?

    Merci d'avance !

  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,

    Comme tu veux récupérer la valeur max de chaque ligne, tu n'as pas le choix que de boucler sur le tableau ou alors de créer une fonction tableau perso, enfin c'est mon avis mais je peux me tromper :
    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
     
    Sub Tableau()
     
        Dim TblRetour() As Integer
        Dim I As Long
     
        Randomize
     
        Tbl(1, 1) = Int(Rnd * 50) + 1
        Tbl(1, 2) = Int(Rnd * 50) + 1
        Tbl(1, 3) = Int(Rnd * 50) + 1
        Tbl(1, 4) = Int(Rnd * 50) + 1
     
        Tbl(2, 1) = Int(Rnd * 50) + 1
        Tbl(2, 2) = Int(Rnd * 50) + 1
        Tbl(2, 3) = Int(Rnd * 50) + 1
        Tbl(2, 4) = Int(Rnd * 50) + 1
     
        Tbl(3, 1) = Int(Rnd * 50) + 1
        Tbl(3, 2) = Int(Rnd * 50) + 1
        Tbl(3, 3) = Int(Rnd * 50) + 1
        Tbl(3, 4) = Int(Rnd * 50) + 1
     
     
        'ici, avec l'utilisation d'une fonction perso où tu peux
        'transposer sur une feuille de calcul :
        TblRetour = TableauPerso(Tbl)
     
        'en ligne
        Range(Cells(1, 1), Cells(1, UBound(TblRetour))) = TblRetour
     
        'en colonne
        Range(Cells(1, 1), Cells(UBound(TblRetour), 1)) = WorksheetFunction.Transpose(TblRetour)
     
    End Sub
     
    Function TableauPerso(Tablo() As Integer) As Integer()
     
        Dim Tbl() As Integer
        Dim I As Long
     
        For I = 1 To UBound(Tablo, 1)
     
            ReDim Preserve Tbl(1 To I)
     
            Tbl(I) = WorksheetFunction.Max(Tablo(I, 1), Tablo(I, 2), Tablo(I, 3), Tablo(I, 4))
     
        Next I
     
        TableauPerso = Tbl
     
    End Function
    Hervé.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    il y a pourtant plus simple en combinant la fonction de feuille de calcul INDEX, du genre

    Application.Max(Application.Index(Montableau, NumLigne)) (à la louche car pas testé) …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut
    merci Marc-L
    tu m'as mis sur la bonne piste .
    la bonne syntaxe (pour ceux que ça intéresse) est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.Max(Application.Index(Montableau, NumLigne))
    Et au fait , ça marche bien pour tous ces types de fonctions mathématiques...
    Et un souci résolu , 1

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

Discussions similaires

  1. [A-02] Insérer un champ calculé dans un tableau croisé dynamique
    Par atoffoli75 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2008, 08h55
  2. [AIDE] Calcul dans un tableau (JSP+Struts)
    Par Diablo_22 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 07/11/2008, 14h40
  3. champs calculés dans un tableau croisé
    Par abdoing dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 23/08/2007, 19h11
  4. Réponses: 4
    Dernier message: 03/08/2007, 13h48
  5. [VBA] calcul dans un formlaire
    Par lucienkany dans le forum VBA Access
    Réponses: 18
    Dernier message: 16/04/2007, 19h14

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