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 :

Macro qui renvoie une matrice


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut Macro qui renvoie une matrice
    Bonjour,

    Voici mon problème :

    Matrice renvoyée par la macro
    Ma macro renvoie une matrice 2D
    J'ai donc un tableau avec en colonne 1,2,3... pour l'indice colonne et en ligne 1,2,3... pour l'indice ligne.
    dans chacune des case, j'appelle =INDEX(Ma_Macro(); $A7; J$5) par exemple.
    Si j'ai 10*10 = 100 cases, je dois donc appeler 100 fois la fonction.
    j'aurais plutôt préféré l'appeler une fois et ensuite piocher dans sa matrice mais comme une cellule Excel ne contient qu'un résultat et pas une matrice, j'ai pas trouvé le moyen. Existe-t-il ?

    Merci.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    au lieu de renvoyer une matrice, arrange toi pour écrire dans une feuille de calcul (stocker) les données de ta matrice et leur donner un nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(LeNomQueTuAurasChoisi ; A7; J5)
    ça permettra de n'appeler qu'une fois ta macro.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    OK; je veux bien un exemple évetuellement pour illustrer.

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    OK donc un exemple :
    dans un module de 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
    Sub TestMachin()
     
    Dim machin() 'une matrice
    ReDim machin(1, 3) ' à deux dimensions
     
    machin(0, 0) = "Tutu"
    machin(0, 1) = "Toto"
    machin(1, 1) = "tata"
    machin(1, 3) = "Test"
     
    ' copie de la matrice dans une plage
    Range(Cells(1, 1), Cells(UBound(machin, 1) + 1, UBound(machin, 2) + 1)) = machin
     
    ' nomme la plage
    ActiveSheet.Names.Add "LaZone", _
                    "=" & Split(Range(Cells(1, 1), _
                    Cells(UBound(machin, 1) + 1, _
                    UBound(machin, 2) + 1)).Address(True, True, xlA1, True), _
                    "]")(1)
     
     
    End Sub

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Je ne sais pas pourquoi mais ça plante ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(1, 1), Cells(UBound(machin, 1) + 1, UBound(machin, 2) + 1)) = machin

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par stof Voir le message
    Bonjour,

    Voici mon problème :

    Matrice renvoyée par la macro
    Ma macro renvoie une matrice 2D .../..
    Il s'agit donc d'une fonction et non d'une macro

    Au lieu d'écrire dans chaque cellule ta fonction :
    - tu sélectionnes la page complète (10x10)
    - tu écris ta formule =Ma_Macro()
    - et tu valides avec les touches Ctrl+Maj+Enter

    Tu obtiens ainsi une formule matricielle au lieu d'une formule standart.
    Dans le code il suffit d'affecter le tableau à Ma_Macro

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Merci! Génial!
    (mais pas intuitif les développeurs de chez microsoft...)

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

Discussions similaires

  1. créer une macro qui renvoie à une cellule vide
    Par cachou52fr dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 17/06/2011, 14h11
  2. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 21h22
  3. [?] Fonction qui renvoie une table
    Par Dimitri_87 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/04/2007, 11h48
  4. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52

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