Probleme avec une fonction vba excel

Fermé
micky - 9 nov. 2017 à 15:46
 micky - 10 nov. 2017 à 17:21
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
A voir également:

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 nov. 2017 à 16:31
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
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
9 nov. 2017 à 17:27
Bonjour,


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

0
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
vous comprenz quoi dans ce code?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
9 nov. 2017 à 17:34
Tout
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié le 9 nov. 2017 à 17:45
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
micky > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
9 nov. 2017 à 18:02
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > micky
9 nov. 2017 à 19:18
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