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

Excel Discussion :

matrice de dimension variable


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut matrice de dimension variable
    Bonjour à tous
    Je dois développer un petit prog sous excel
    Ce prog comprend des calculs matriciels (en ce moment les matrices sont sélectionnées "à la main" sous excel)
    Ma problématique :
    Dans ce prog, en fonction des cas de figure, les matrices à manipuler peuvent avoir des tailles variables, or sous excel les matrices définies en saisie manuelle le sont une fois pour toute (entre accolades)
    Je voudrais par exemple pouvoir créer des matrices carrés (n colonnes et n lignes) en rentrant "n" comme variable et en sélectionnant automatiquement les plages concernées dans un tableau de données
    Ensuite je dois faire du calcul matriciel divers sur ces matrices (transpose, inverse, etc...)
    Le problème c'est que je suis très débutant en prog et je sens que cela passe vers une prog VBA ?
    Merci pour vos conseils

  2. #2
    Expert confirmé Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Points : 4 299
    Points
    4 299
    Par défaut
    Salut,

    Si j'ai bien compris, tu veux utiliser des variable de type tableau.

    Pour les déclarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim mavariabletableau () as string
    c'est les () qui font tout. De cette manière tu créé un tableau sans dimension. Dans ta procedure tu peux modifier la dimention du tableau.

    Pour plus d'info:
    http://silkyroad.developpez.com/vba/tableaux/
    Jérôme

    " Je pense donc je suis. Tu es donc j'apprends ". (GCM)

    Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Bonjour Jérome

    Merci de prendre un peu de temps pour un néophite
    Je vais regarder tous ça en détail

    Si j'ai bien compris les infos dans le lien:
    - je mets Option base 1 (car excel commence à 0)
    - si mes variables dans mon tableau sont des nombres décimaux et non des caractères, je dois déclarer variable "currency" et non "string"
    - mon tableau a 2 dimensions (matrice ligne + colonne)
    - j'aurais "n" ligne et "n" colonne (matrice carrée)
    - je définis la taille de ma matrice à 2 dimensions par ReDim nomtableau (1 to n, 1 to n)

    Je vais faire des essais dans ce sens

    PS : comment faire pour insérer mes futurs extrait de code dans une fenêtre comme tu l'as fait

    A+

  4. #4
    Expert confirmé Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Points : 4 299
    Points
    4 299
    Par défaut
    Salut,

    Par contre fait attention quant tu utilises le REDIM. il faut l'utiliser de la mnière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redim preserve montableau(n,n)
    si tu ne mets pas le preserve, les données stockées dans la variable redimensionnée sont perdues ...

    cd :
    http://silkyroad.developpez.com/vba/tableaux/#LIII-B
    Jérôme

    " Je pense donc je suis. Tu es donc j'apprends ". (GCM)

    Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Bonjour

    Voilà ce que j'ai pu coder en m'inspirant des infos du net (mais pas encore testé sous excel)

    Pour le "preserve" de Redim, je ne suis pas sûr que ça me serve, car mes matrices ont une taille fixe dans mon prog pour chaque cas de calculs (mais je dois seulement pouvoir faire varier cette taille en fonction des hypothèses de calculs de chaque affaire)

    Par contre, une question me vient : si la plage de cellules qui sert à définir ma matrice "matvar" évolue (indépendemment du cas où je fais varier la taille de la matrice), est ce que les éléments stockés dans "matvar" suivront en dynamique ?

    Voilà où j'en suis, vu mon peu de connaisance en VBA, j'ai l'impression que je vais galérer à automatiser mon prog !!

    N'hésitez pas à me faire part de vos remarques
    Et encore merci pour votre temps

    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
    Sub matvarTableau()
     
       'Définit le type de données pour le tableau.
        Dim matvar() As Currency
        Dim n As Integer,i As Integer, j As Integer, x As Integer, y As Integer
     
        'Définit taille matrice depuis une cellule, valeur de "n" situé en cellule B37
        n= Range("B37").Value
     
        'Définit la taille du tableau
        ReDim matvar(1 to n, 1 to n)
     
     
        'Alimente les éléments du tableau, cellule départ B78 = Cells(78, 2)
        x=78
        y=2
        For i = 1 To n 'boucle sur la 1ere dimension
            For j = 1 To n 'boucle sur la 2eme dimension
                'Alimente les éléments du tableaux
                 matvar(i, j) = Cells.Value (x+i, y+j)
                'Lit les éléments du tableau
                 Debug.Print matvar(i, j)
            Next j
        Next i    
     
        'Imprime la matrice dans une plage de cellule dim n x n, cellule départ B92 = Cell(92, 2)
         Range(Cells(92, 2), Cells(UBound(matvar, 1), UBound(matvar, 2))) = matvar
     
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Rebonjour

    Voilà j'ai testé et modifié mon code qui fonctionne maintenant
    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
    Option Explicit
     
    Sub matvarTabl()
     
       'Définit le type de données pour le tableau.
        Dim matvar() As Currency
        Dim n As Integer, i As Integer, j As Integer, x As Integer, y As Integer
     
        'Définit taille matrice depuis une cellule, valeur de "n" situé en cellule C2
        n = Range("C2").Value
     
        'Définit la taille du tableau
        ReDim matvar(1 To n, 1 To n)
     
        'Alimente les éléments du tableau, cellule départ B5 = Cells(5, 2)
         x = 5 - 1
         y = 2 - 1
         For i = 1 To n 'boucle sur la 1ere dimension
             For j = 1 To n 'boucle sur la 2eme dimension
                'Alimente les éléments du tableaux
                  matvar(i, j) = Cells.Value(x + i, y + j)
                  'MsgBox matvar(i, j)
             Next j
         Next i
     
        'Imprime la matrice dans une plage de cellule dim n x n, cellule départ B36
         Range("B36").Resize(UBound(matvar, 1), UBound(matvar, 2)) = matvar
     
    End Sub
    Par contre :
    - cela met environ 30s pour exécuter la procédure !! (cela vient-il de mon vieux PC?)
    - comme je le craignais cela n'est pas "dynamique" comme avec les cellules excel (je voudrais que ma matrice matvar soit automatiquement modifiée lorsqu'une ou plusieurs des valeurs de la plage de référence sont modifiées)

    J'en reviens donc à ma problématique de base sachant que mon prog de base sous excel fonctionne très bien (avec un paquet de calculs matriciels) pour un cas unique de matrices 5 x 5 avec par exemple :
    {=INVERSEMAT(B78:F82)}
    {=TRANSPOSE(K141:O145)}
    {=PRODUITMAT(PRODUITMAT(K150:O154;B122:F126);K141:O145)}
    {=DIAGSYM(B181:F185;VRAI)} "extraction des valeurs propres de la matrice"
    etc....

    Je voudrais paramétrer tout cela pour des cas de matrice 1x1 à 10x10 maxi
    Y a t'il un moyen simple en modifiant ma feuille de base ? (et sans tout recoder en VBA)

    Merci de vos conseils

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    Si le max à sortir est 10x10, tu devrais pouvoir sortir systématiquement une matrice 10x10 avec une formule qui ne renverra des valeurs que dans la zone que tu souhaites réellement obtenir (1x1 à 10x10 selon les cas) et les cases restantes de ta zone fixe 10x10 renverront une erreur.

    => Il suffit alors d'encapsuler ta formule avec un SIERREUR pour ne plus afficher une erreur mais un texte vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(MaFormuleMatricielle; "")

    Edit:
    NB: Pour rendre variables tes plages en entrée, il te faudra la fonction DECALER.

  8. #8
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Nom : INV MAT.JPG
Affichages : 1806
Taille : 95,3 KoBonjour Prométhée25

    Je suis sous Excel 2000 et je n'ai pas la fonction SIERREUR

    Je ne comprends pas trop si que tu envisages pour la condition d'erreur ? Pourrais tu me faire un exemple ?

    Si je sélectionne toute la plage 8x8 comme dans l'image en PJ

    L'inverse de la matrice 5x5 (5 premiers termes de la matrice 8x8) est différent des 5 premiers termes de l'inverse de la matrice 8x8

    A+ et merci pour ton aide

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    Dommage que tu n'ais pas accès à cette fonction.
    Peux-tu partager ton fichier? Ce sera plus simple pour t'aider.

  10. #10
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Bonjour
    Comme demandé voilà le fichier Excel 2000
    La plage de données pour sélection de la matrice K est en ce moment en 8x8 mais je vais l'étendre en 10x10
    Les calculs matriciels sont effectués avec matrice 5x5
    En espérant que vous pourrez m'aider
    A+
    Fichiers attachés Fichiers attachés

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    C'est bien la fonction DECALER qui devrait répondre à ta problématique.
    Au lieu d'attaquer une plage fixe B78:F82 par exemple, il faut attaquer DECALER(B78; 0; 0; DimensionMatrice; DimensionMatrice).

    Je n'étais pas certain que ta dimension de matrice soit le nombre d'étages donc j'ai créé une plage nommée DimensionMatrice en K102; à toi d'adapter.
    J'ai appliqué la fonction DECALER sur tes premières matrices sur leur taille max possible (8*8 donc). Comme prévu, ça renvoie une erreur sur les cases pour lesquelles la dimension dépasse DimensionMatrice.
    Pour masquer ça, j'ai appliqué une MFC qui affiche l'erreur #NA en police blanche sur fond blanc (et seulement cette erreur) donc visuellement c'est ok.

    Ce sera à toi de l'appliquer sur les dernières matrices (j'ai de toute façon une erreur #NOM? car tu utilises des fonctions personnalisées issues d'un xla donc c'était difficile de valider le principe mais il n'y a pas de raison que ce soit différent sur ces matrices).

    MFR MSR.xls


    Edit: pour une matrice 1x1, ça va te reproduire la valeur dans chaque case; ça va marcher car le DECALER va de toute façon sélectionner une seule cellule mais visuellement ce n'est pas très sexy; tu peux peut-être voir à adapter la MFC pour gérer le cas où DimensionMatrice vaut 1.

  12. #12
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Merci Prométhée25
    ça marche SUPER !!!!
    Je vais reparamétrer mon prog en 10x10 et je te tiens au courant
    Encore merci pour ce coup de main

    PS : je passerais le post en "résolu" dès que j'aurais finalisé la mise à jour

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    ...je passerais le post en "résolu" dès que j'aurais finalisé la mise à jour
    à tout hasard, profites-en pour cliquer sur sous les réponses de promethee
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Rebonjour à tous

    Grâce aux conseils de Prométhée25, j'ai quasiment terminé la modif de mon prog (avec sans doute des manip pas très élégantes mais bon ça fonctionne)

    Je bloque sur la dernière étape pour paramétrer la dernière opération mathématique (calcul moment)

    Je mets en fichier en PJ

    Si une âme charitable peut m'aider

    Merci d'avance

    TEST moment.xls

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    Cette formule matricielle marche sur ton cas avec dimension matrice à 5 mais ça reste à valider avec précaution pour les autres cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(DECALER(B$74; MAX(1; LIGNE() - LIGNE(B$89)) - 1; ; MIN(DimensionMatrice - LIGNE() + LIGNE(B$89) + 1; DimensionMatrice)) * (DECALER($F$4; MIN(LIGNE()-LIGNE(B$89));0) - DECALER($F$4; MAX(1; LIGNE() - LIGNE(B$89)); ; MIN(DimensionMatrice - LIGNE() + LIGNE(B$89) + 1; DimensionMatrice))))

  16. #16
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Bonsoir Prométhée25
    Merci encore pour ton aide
    Je dois mal m'y prendre car quand je copie la formule matricielle, j'obtiens la même valeur dans toute la matrice 5x5
    Dans le fichier en PJ, la colonne B89:B94 devrait correspondre à la colonne P8994
    Cela vient peut être de ma version Excel ?
    TEST moment 2.xls

  17. #17
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Rebonsoir
    Après d'autres essais, ça à l'air de marcher si je copie la formule dans chaque cellule et je valide ensuite chaque cellule par F2/CTRL/SHIFT/ENTREE
    Il faut que je fasse cellule par cellule pour ma matrice 12x12 ?
    A+

  18. #18
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Oui, c'est bien une fonction matricielle mais cellule par cellule; désolé j'ai pas pensé à préciser... :p


    Edit: une fonction matricielle, ça correspond à une matrice en entrée et/ou en sortie; là c'est uniquement en entrée.

  19. #19
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Super
    Je vais faire la manip pour ma matrice 12x12
    Je ne me suis pas encore penché sur la compréhension de ta formule, mais chapeau pour la traduction qui donne les bons résultats!!!
    Si ce n'est pas trop abusé, pourrais tu m'expliquer un peu la syntaxe de ta formule
    Encore merci, je sens que je vais arrivé au bout grace à toi !!!

  20. #20
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Avec des +1 je suis prêt à tout t'expliquer!

    Et si ça te rassure, j'ai quand-même dû réfléchir un peu...

    Plus sérieusement:
    Oublions le cas du Moment M0 pour l'instant car c'est un cas particulier.
    Donc en gros ta formule pour le Moment Mj (j > 1), c'est somme de i=j à DimensionMatrice de (Fi * (yj - yi))

    Pour traduire cette somme de j à DimensionMatrice dans la formule Excel on passe par un DECALER; Les arguments de DECALER ne sont pas une borne min et une borne max mais une borne min et un nombre d'éléments à partir de cette borne min donc cela fait que la somme de j à DimensionMatrice se traduit par un décalage de j (2ème argument de DECALER) avec un nombre d'éléments égal à DimensionMatrice - j + 1 (4ème argument de DECALER).

    j est le numéro du moment en cours de calcul et vaut en fait LIGNE() - LIGNE(B$89).
    Et donc DimensionMatrice - j + 1 = DimensionMatrice - LIGNE() + LIGNE(B$89) + 1

    Ainsi:
    La matrice des Fi de j à DimensionMatrice se traduit donc par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(B$73; LIGNE() - LIGNE(B$89); ; DimensionMatrice - LIGNE() + LIGNE(B$89) + 1)
    (Je suis parti de B73 ici pour garder j en argument 2 mais dans ma formule initiale j'avais B74 & j-1 ce qui revient au même; c'est juste que pour l'explication, ça me semble plus clair comme ça)

    yj (qui n'est pas une matrice mais une simple valeur) vaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER($F$4; LIGNE()-LIGNE(B$89);0)
    Et donc la matrice des yj - yi se traduit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER($F$4; LIGNE()-LIGNE(B$89);0) - DECALER($F$4; LIGNE() - LIGNE(B$89); ; DimensionMatrice - LIGNE() + LIGNE(B$89) + 1)
    On a alors la matrice des Fi et celle des (yj-yi), il n'y a plus qu'à les multiplier (élément par élément vu que ce sont deux matrices à 1 colonne et avec le même nombre de lignes; il ne s'agit pas d'un produit matriciel tel que tu les exploites) puis sommer les éléments de la matrice résultante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(DECALER(B$73; LIGNE() - LIGNE(B$89); ; DimensionMatrice - LIGNE() + LIGNE(B$89) + 1) * (DECALER($F$4; LIGNE()-LIGNE(B$89);0) - DECALER($F$4; LIGNE() - LIGNE(B$89); ; DimensionMatrice - LIGNE() + LIGNE(B$89) + 1)))

    Les MIN et MAX ne sont ensuite là que pour gérer le cas particulier du moment M0 pour lequel la formule est une espèce d'adaptation du moment M1; ils ont l'inconvénient de rendre la formule un peu indigeste mais offrent l'avantage de se contenter d'une unique formule.


    Edit: si tu essaies la formule comme ça dans Excel elle ne marchera pas même si l'algorithme est bon car dans une formule matricielle, la fonction LIGNE() renvoie une matrice d'un élément et non une simple valeur, ce qui fait planter les DECALER. => Si tu essaies dans Excel il faut transformer ces matrices d'un élément en une valeur simple avec MIN par exemple (ou MAX ou n'importe quoi qui sortira une valeur plutôt qu'une matrice):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - MIN(LIGNE()) + MIN(LIGNE(B$89))

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affectation d'une matrice dans une variable
    Par sango85 dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/03/2007, 10h20
  2. [TP] Matrice à deux dimensions
    Par bongo parfait dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/03/2007, 22h20
  3. matrice 3 dimensions autour de z
    Par aimad41 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2007, 15h13
  4. [débutant] un tableau de dimension variable selon l'objet qui le contient
    Par Epistocles dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/01/2007, 18h07
  5. tableau à dimension variable
    Par Phoenix_Blue dans le forum C++
    Réponses: 17
    Dernier message: 18/11/2006, 14h17

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