Addition conditionnelle de variable stocker dans matrice

Bonjour à tous,

Pour la réalisation de mon TFE, j'utilise vba pour construire un petit programme informatique de dimensionnement.

Cependant, me voila déjà coincé par un petit problème.

Je dois additionner toute les valeurs positives/negatives sur une mm ligne dans plusieurs matrices Mx(1 to 100, 1to 4).

Si j'ai bien compris, la fonction SUMIF ne fonctionne que pour l'addition conditionnelle de valeur se trouvant dans un range de cellule... Je ne vois donc pas comment l'utiliser ici.

Petit exemple :

M1(5,1) = -1

M2(5,1) = 3

M3(5,1) = -5

M4(5,1) = 6

si on additionne les valeurs +, on a la rep : 9

si on additionne les valeurs - ,on a la rep -6

Avez-vous une idée d'un petit bout de code permettant cela ?

Merci à tous de votre aide si précieuse.

Bonne après midi.

Bonjour,

Comment interpréter ta requête ...

sur une mm ligne dans plusieurs matrices Mx(1 to 100, 1to 4)

Pas super clair ...

Si tu pouvais joindre un fichier test pour éclairer nos lanternes ...

Bonjour, voici mon fichier excel.

sur la feuille 2, j'ai affiché les matrices pour que vous compreniez ce que chaque ligne et colonne représentent.

chaque matrice calcule les efforts internes dans les barres 1,2,3 et 4 pour chaque discrétisation de la longueur. ( à x= 0.5m, l'effort normal N = 5 kilonewton, à x= 1m l'effort normal N = 10 kilonewton, ect).

La première matrice est le cas de charge de la neige sur la structure (les 4 barres),la deuxième matrice est le cas de charge du vent, ect.

Pour calculer l'effort maximal dans la barre, il me faut additionner les efforts positifs en chaque x et pour chaque cas de charge.

Si je veux connaitre l'effort max dans ma barre 1 à x = 0.5m

effort N barre 1 du au neige à x=0.5 + effort N barre 1 du au vent à x= 0.5 + ... = Effort max à x = 0.5.

--> Mais cette addition de devra contenir que des valeurs positives

Merci de votre aide.

8bestmetal.xlsm (276.71 Ko)

Re,

Merci pour ton fichier ...

Ci-joint une proposition ...

Dis-moi si cela correspond à ton attente ... ou pas ...

8bestmetal.xlsm (88.88 Ko)

Salut,

J'inspecte votre code pour essayer de comprendre d'ou pourrait provenir les résultats.

Malheureusement, je ne pense pas que se soient les bons (car trop élevés)... mais sans doute que c'est plutôt un problème de compréhension du problème, qui somme toute, n'est pas évident.

J'ai aussi tenter de résoudre le problème en travaillant différemment.

J'ai recréer une grande matrice en feuille3 regroupant chaque effort dans les barres pour chaque cas de charge.

Pour trouver l'effort max dans la barre 1, je me balade dans cette matrice en reprennant chaque effort +.

la feuille 4 donne les résultats.

Merci pour votre essai

6bestmetalmoi.xlsm (384.11 Ko)

Re,

J'ai sans doute une poutre dans l'oeil ...

Je comprends que la matrice de la Feuille 4 sert de nouvelle base ...

Mais je ne sais toujours pas quel est le résultat attendu ...

la feuille 4 nous donne les moments de force positif ou négatif dans chaque élément de notre structure.

Connaissant cela, nous pouvons choisir une l'inertie de la poutre/colonne pouvant reprendre cette effort.

Bien à vous, et bonne soirée.

Re,

Sur la Feuille 4 ... peux-tu ajouter le calcul fait à la main que tu attends comme résultat ...?

salut James,

En me rallumant mon ordi ce matin, et avec les idées un peu plus fraîches, je me rends compte que j'ai fais une erreur de "débutant". C'est sans doute cela qui te perturbait et que je n'avais pas vu hier.

J'avais en fait reconstruit la matrice a la feuille 3 différemment que la matrice Mh garder en mémoire par vba.

Ensuite pour calculer les maximum, minimum, je me baladais dans la matrice Mh en me referant a la matrice feuille 3... je ne prenais donc pas les bons résultats...

Voici le fichier corrigé et les resultats voulu a la main en cellule B1, C1 feuille 4.

Bien a toi.

Bonjour,

Un petit détail ...

Il me semble que tu as oublié de joindre ton dernier fichier ...

oups

9bestmetalmoi.xlsm (385.64 Ko)

Bonjour,

Tout cela reste bien énigmatique ...

Ci-joint la Feuille 5 ajoutée à ton fichier ...

En espérant que cela t'aide ...

21bestmetalmoi-v3.xlsm (388.33 Ko)

Bonjour à tous,

comme tu as du vba, un essai avec une fonction personnalisée avec un exemple d'utilisation.

J'ai pris 3 matrices pour l'exemple mais ce n'est pas limité.

Sub test()
    Dim mat(1 To 3), result
    With Sheets("Feuil2")
        mat(1) = .[B3:F10].Value
        mat(2) = .[I3:M10].Value
        mat(3) = .[P3:T10].Value
        result = MaxMinMat(mat)
        .[BF3].Resize(UBound(result, 1), UBound(result, 2)) = result
    End With
End Sub

Function MaxMinMat(mat)
    Dim result(), m As Long, lig As Long, col As Long, col2 As Long
    ReDim result(1 To UBound(mat(1), 1), 1 To UBound(mat(1), 2) * 2)
    For m = 1 To UBound(mat)
        For lig = 1 To UBound(mat(1), 1)
            For col = 1 To UBound(mat(1), 2)
                col2 = col * 2 + (mat(m)(lig, col) >= 0)
                result(lig, col2) = result(lig, col2) + mat(m)(lig, col)
            Next col
        Next lig
    Next m
    MaxMinMat = result
End Function

Elle retourne une matrice 2 fois plus large que celles reçues.

Pas de contrôles si toutes les matrices ont bien même taille, à toi de les ajouter si tu le juges utile.

On pourrait la faire appelable depuis une feuille au prix d'une complication. Tu dis si c'est vraiment nécessaire.

eric

Rechercher des sujets similaires à "addition conditionnelle variable stocker matrice"