Probleme avec une fonction vba excel

micky -  
 micky -
Bonjour,
Somme des valeurs sur la diagonale (MaSommeDiag)
Entrée : Plage de cellules (range)
Sortie : Total (réel)
Calcul : (a) Assurez-vous que la plage de cellule est carrée (nombre de lignes identique au nombre de colonnes).
(b) Si ce n’est pas le cas, votre fonction doit renvoyer la valeur 0
(c) Si c’est le cas, votre fonction doit renvoyer la somme des valeurs situées sur la diagonale
Ex. Dans la plage suivante, on aurait Total = 2 + 4 + 7 = 13

2 5 6
3 4 9
8 2 7

pour ce faire j'ai entre le code suivant :

Public Function MaSommeDiag(plage As Range) As Double
Dim i As Long, j As Long
Dim s As Double
s = 0
For i = 1 To plage.Rows.Count Step 1
For j = 1 To plage.Columns.Count Step 1

If (i = j) Then
s = s + plage.Cells(i, i).Value

Else: s = 0

End If
Next j
Next i
MaSommeDiagonaleScolaire = s
End Function

Et à la fin je trouve tjs 0 ca me calcule pas la somme

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Je verrai plus ceci:

    Public Function MaSommeDiag(plage As Range) As Double
        Dim i As Long, j As Long
        Dim s As Double
        
        If plage.Rows.Count = plage.Columns.Count Then  'carré
            For i = 1 To plage.Rows.Count Step 1
                s = s + plage.Cells(i, i).Value
            Next i
        Else
            s = 0
        End If
        MaSommeDiag = s
    End Function


    dans votre function, a la fin:
    MaSommeDiagonaleScolaire = s
    ne correspond pas la Function MaSommeDiag et ceci change le resultat est 7 pas 13
    0
  2. micky
     
    Re, merci pour votre réponse votre formule marche très bien et je la comprend toutafais.

    Cependant je ne comprend pas pourquoi la mienne donne 7 car meme en changant à la fin : MaSommeDiag = s cela donne toujours 7

    PS: comment vous faites pour afficher le code ici sur le forum dans le format VBA excel ???

    merci d'avance
    0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    PS: comment vous faites pour afficher le code ici sur le forum dans le format VBA excel ???

    0
  4. micky
     
    du coup si je met le code suivant :

    Sub RemplissageCellulesStep()
        Dim Compteur As Integer
        For Compteur = 1 To 100 Step 2
            ActiveCell.Offset(Compteur - 1, 0) = Rnd
        Next Compteur
    End Sub
    0
    1. micky
       
      vous comprenz quoi dans ce code?
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Tout
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Patrice, ca roule??

      micky:
      Cependant je ne comprend pas pourquoi la mienne donne 7 car meme en changant à la fin : MaSommeDiag = s cela donne toujours 7
      Ben c'est vraiment simple vous n'avez que la valeur de la derniere ligne/colonne de la plage

      vous comprenz quoi dans ce code?
      Qui doit comprendre vous ou nous???
      0
    4. micky > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      ok c'est pour ca qu'il faut mettre direct la formule si, sinon elle ce prend en compte qua le dernier chiffre sans faire la somme.

      Oui vous comprenez quoi, j'ai trouve ce code je ne l'ai pas compris
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > micky
       
      Re,

      Compteur: 1357......
      Compteur_1: 02468.......
      Activecell : cellule active
      Rnd : nombre aléatoire

      Donc de 1 a 100 par pas de 2 incrémentation de compteur
      Remplissage de cellules par pas de deux d'un nombre "tiré" aléatoirement par Rnd
      En partant d'une cellule sélectionnée qui reçoit le premier nombre
      0