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 :

Calculer la diagonal variée


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut Calculer la diagonal variée
    Bonjour,
    je suis bloqué pour calculer la somme de diagonal du triangle. J'ai essayé de resoudre avec couleur mais ça fonctionne pas à cause de mise en forme.

    Est-ce que vous pourriez m'aider avec ça? j'ai besoin de la calculer plusieurs fois. Alors je veux créér la fonction où on peut indiquer le plage et voilà. Vouz pouvez regarder le fichier et mise en forme.
    Je veux calculer par couleur mais pour jaune il faut calculer la plage au-dessus du couleur rouge et jusqu'à la ligne 2013 7 pour cette date. Pour date 30-07-2013 jusqu'à la ligne 2013 8 diag.xlsx

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    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
    Function sommediag(x As Integer, y As Integer) As Double
    Dim i As Double, debut As Double, somme As Double
    Dim dernlig As Double, derncol As Double
     
    dernlig = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    For i = 6 To dernlig
    If Feuil1.Range("A" & i) = x And Feuil1.Range("B" & i) = y Then
    debut = i
    Exit For
    End If
    Next i
     
     
    derncol = Feuil1.Cells(6, Columns.Count).End(xlToLeft).Column
    For i = 3 To derncol
    somme = somme + Feuil1.Cells(debut, i)
    debut = debut - 1
    Next i
     
    sommediag = somme
     
    End Function

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut
    Merci EngueEngue. Juste une question. ça va fonctionner si je vais avoir le triangle dans le plage par exemple $DA$9:$EV$80?

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    non..

    Si ton triangle ne commence pas à la première ligne de ton tableau ( 3eme colonne ) alors il faut donner en argument à la fonction les coordonnées de la pointe du triangle

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Donne un exemple de bornes et résultat. C'est tout sauf clair, pour moi, en tout cas.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut
    Daniel, il y a le fichier joint diag.xlsx

    J'ai ça mais c'est pour couleur. Je veux le même mais pour condition de mise en forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function SommeCouleur(Plage As Range, Couleur As String)
    Application.Volatile True
    For Each Cellule In Plage
    If Cellule.Interior.ColorIndex = Couleur Then TotalSomme = TotalSomme + Cellule.Value
    Next
    SommeCouleur = TotalSomme
    End Function
    Citation Envoyé par EngueEngue Voir le message
    non..

    Si ton triangle ne commence pas à la première ligne de ton tableau ( 3eme colonne ) alors il faut donner en argument à la fonction les coordonnées de la pointe du triangle
    Tu peux m'aider avec ça? Et calculer la somme pour rouge et jaune(juste pour que jai decrit)

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Ah j'avais pas compris... oui c'est facile attends je te trouve tes couleurs

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut
    diag1.xlsx
    Fichiers attachés Fichiers attachés

  9. #9
    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
    Une fonction qui calcule la diagonale par rapport à la date de référence en B1

    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
    Option Explicit
     
    Function DIAG(ByVal Rng As Range) As Double
    Dim n As Integer, i As Integer, D As Integer
    Dim S As Double
    Dim Tb
     
    D = Deb(Rng)
    If D > 0 Then
        Tb = Rng.Value
        n = UBound(Tb, 2)
     
        For i = 1 To n - 2
            If i < D - 4 Then S = S + Tb(D - i + 1, i + 2)
        Next i
        DIAG = S
    End If
    End Function
     
    'Fonction qui recherche le mois de référence par rapport à la date en B1
    Private Function Deb(ByVal Rng As Range) As Integer
    Dim n As Integer, i As Integer
    Dim Dte As Long
    Dim Tb
     
    Tb = Rng.Resize(, 2)
     
    Dte = Tb(1, 2)
    n = UBound(Tb, 1)
    For i = 1 To n
        If Tb(i, 1) = Year(Dte) And Tb(i, 2) = Month(Dte) + 1 Then
            Deb = i
            Exit For
        End If
    Next i
    End Function
    La fonction DIAG peut être utilisée directement dans la feuille si elle est écrite dans un module standard par =DIAG(A1:AX77).

    Ou utilisé dans une autre procédure. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
     
    MsgBox DIAG(Feuil1.Range("A1:AX77"))
    End Sub

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Tu veux faire la somme des cellules de C72 à AX25 (paramétrable) ? je t'avais demandé un exemple. Et du calme, même en aoüt, tu n'es pas tout seul...

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Une fonction qui calcule la diagonale par rapport à la date de référence en B1

    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
    Option Explicit
     
    Function DIAG(ByVal Rng As Range) As Double
    Dim n As Integer, i As Integer, D As Integer
    Dim S As Double
    Dim Tb
     
    D = Deb(Rng)
    If D > 0 Then
        Tb = Rng.Value
        n = UBound(Tb, 2)
     
        For i = 1 To n - 2
            If i < D - 4 Then S = S + Tb(D - i + 1, i + 2)
        Next i
        DIAG = S
    End If
    End Function
     
    'Fonction qui recherche le mois de référence par rapport à la date en B1
    Private Function Deb(ByVal Rng As Range) As Integer
    Dim n As Integer, i As Integer
    Dim Dte As Long
    Dim Tb
     
    Tb = Rng.Resize(, 2)
     
    Dte = Tb(1, 2)
    n = UBound(Tb, 1)
    For i = 1 To n
        If Tb(i, 1) = Year(Dte) And Tb(i, 2) = Month(Dte) + 1 Then
            Deb = i
            Exit For
        End If
    Next i
    End Function
    La fonction DIAG peut être utilisée directement dans la feuille si elle est écrite dans un module standard par =DIAG(A1:AX77).

    Ou utilisé dans une autre procédure. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
     
    MsgBox DIAG(Feuil1.Range("A1:AX77"))
    End Sub



    Merci. Mais je dois indiquer que la plage de matrice car je vais avoir 100 matrice comme ça sur onglet
    Mais quand je fait =diag(A1:AX77) je obtiens 0... Je sais pas pourquoi.


    Voci le fichier ou je calcule la somme manuellement
    Somme2 j'ai pas tout calculé j'ai que montré le principe

    diag2.xlsx

  12. #12
    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
    Les lignes de 1 à 5 sont prises en compte par la fonction (tu as une référence circulaire)

    Tu dois écrire la formule au delà de la dernière ligne (pour ce cas au delà de la ligne 77)

  13. #13
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Je t'ai fait une fonction qui te calcule ta diagonale rouge en fonction de la pointe de ton triangle.
    Une fonction qui te calcule toutes tes cases colorées.

    Somme 1 c'est la première,
    Somme 2 la deuxième moins la première.

    Je viens de vérifier et elles marchent parfaitement.


    T'es quand même gonflé de ne même pas chercher à comprendre alors qu'il n'y a rien de plus simple comme code.

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 30
    Par défaut
    J ai resoulu sans macro. Merci à tous

    =SUM(IF((YEAR(B1)-A6:A77)*12+MONTH(B1)-B6:B77+2=C5:AX5;1;0)*C6:AX77)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/04/2008, 14h17
  2. Réponses: 2
    Dernier message: 20/01/2008, 17h31
  3. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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