XL 2013 Erreur de Formules

Phoenix23

XLDnaute Occasionnel
Bonjour à toutes et tous .
Dans le fichier ci joint qui me sert à recenser les animaux sauvages de ma région 2 erreurs se sont glissées dans la feuille Tableau, N'ayant pas les qualités, l’expérience requises , je ne peux les résoudre seul.
D’ailleurs à l'origine ce classeur n'est pas de moi j'ai sollicité de l'aide sur le site pour sa création.
Si une personne pouvait me venir en aide? Les explications se trouvant sur la feuille "Tableau" et concernant la Feuille "Cerfs"
D'avance Merci
Cordialement
 

Pièces jointes

  • Animaux 2018.xls
    224.5 KB · Affichages: 30

job75

XLDnaute Barbatruc
Bonjour Phoenix23,

J'ai revu toutes les formules du tableau Tableau!B5:T18 dans le fichier joint.

Il faut savoir que la fonction MOIS renvoie 1 (janvier) si la cellule est vide, d'où le test avec la fonction SIGNE.

A+
 

Pièces jointes

  • Animaux 2018(1).xls
    249 KB · Affichages: 28

job75

XLDnaute Barbatruc
Bonjour Phoenix23, le forum,

Si vous aimez le VBA vous pouvez utiliser cette fonction personnalisée :
Code:
Function Sigma(dat$, MF$, plage As Range)
Dim mois As Byte, ncol%, tabdat(), j%, i&
mois = Month("1/" & dat)
Set plage = Intersect(plage, plage.Parent.UsedRange)
ncol = plage.Columns.Count
ReDim tabdat(1 To ncol)
For j = 1 To UBound(tabdat)
    tabdat(j) = plage(1, j).MergeArea(1)
Next
For i = IIf(MF = "", 2, 3) To plage.Rows.Count
    For j = 1 To ncol
        If IsDate(tabdat(j)) And IsNumeric(plage(i, j).Formula) Then _
            If Month(tabdat(j)) = mois Then _
                If MF = "" Or plage(2, j) = Left(MF, 1) Then Sigma = Sigma + plage(i, j)
Next j, i
End Function
La formule en B5, à copier et à adapter sur B5:T16, est très simple, aucun risque d'erreur :
Code:
=Sigma($A5;B$4;Blaireau!$C$3:$IV$100)
Attention, pour les feuilles avec les lettres M/F il faut impérativement que les cellules des dates en ligne 3 soient fusionnées.

Fichier joint.

Bonne journée.
 

Pièces jointes

  • Animaux 2018 VBA(1).xls
    284 KB · Affichages: 24

Phoenix23

XLDnaute Occasionnel
Bonjour job 75
Je viens à l'instant de découvrir les solutions proposées.
Actuellement sur mon téléphone, je pense opter pour la première solution qui pour moi novice quand à l'utilisation des formules Excel me semble la plus simple.
Le VBA restant une méthode qui me dépasse.
Lorsque la possibilité me sera donné je mettrai en application sur mon pc de votre fichier.
Je tiens à vous remercier de votre précieuse aide.
Merci.
Cordialement.
 

job75

XLDnaute Barbatruc
Re,

Grâce aux tableaux VBA cette macro est 3 fois plus rapide que la précédente :
Code:
Function Sigma(dat$, MF$, plage As Range)
Dim mois As Byte, ncol%, tabdat, j%, tabMF, tablo, i&
mois = Month("1/" & dat)
Set plage = Intersect(plage, plage.Parent.UsedRange)
ncol = plage.Columns.Count
tabdat = plage.Rows(1)
If MF <> "" Then
    For j = 1 To ncol
        If tabdat(1, j) = "" Then tabdat(1, j) = plage(1, j).MergeArea(1)
    Next j
End If
tabMF = plage.Rows(2) 'matrice, plus rapide
tablo = plage.Formula 'matrice, plus rapide
For i = IIf(MF = "", 2, 3) To plage.Rows.Count
    For j = 1 To ncol
        If IsNumeric(tablo(i, j)) Then _
            If IsDate(tabdat(1, j)) Then _
                If Month(tabdat(1, j)) = mois Then _
                    If MF = "" Or tabMF(1, j) = Left(MF, 1) Then Sigma = Sigma + plage(i, j)
Next j, i
End Function
Fichier (2).

Malgré cette amélioration la durée du recalcul des formules est de 0,48 seconde.

Alors qu'elle est de 0,05 seconde pour le fichier du post #2, SOMMEPROD est donc 10 fois plus rapide.

A+
 

Pièces jointes

  • Animaux 2018 VBA(2).xls
    289 KB · Affichages: 22
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Bon alors j'ai amélioré la fonction afin de gagner du temps de calcul :
Code:
Function Sigma(dat$, MF$, plage As Range)
Dim mois As Byte, ncol As Variant, nlig&, tabdat, j%, tabMF, tablo, i&
mois = Month("1/" & dat)
ncol = Application.Match(9 ^ 9, plage.Rows(1))
If IsError(ncol) Then ncol = 1
ncol = ncol + plage(1, ncol).MergeArea.Count - 1
If ncol = 1 Then ncol = 2 'au moins 2 cellules
nlig = Application.Match("zzz", plage.Columns(-1)) 'en colonne A
Set plage = plage.Resize(nlig, ncol)
tabdat = plage.Rows(1)
If MF <> "" Then
    For j = 1 To ncol
        If tabdat(1, j) = "" Then tabdat(1, j) = plage(1, j).MergeArea(1)
    Next j
End If
tabMF = plage.Rows(2) 'matrice, plus rapide
tablo = plage 'matrice, plus rapide
For i = IIf(MF = "", 2, 3) To nlig
    For j = 1 To ncol
        If IsNumeric(tablo(i, j)) Then _
            If IsDate(tabdat(1, j)) Then _
                If Month(tabdat(1, j)) = mois Then _
                    If MF = "" Or tabMF(1, j) = Left(MF, 1) Then Sigma = Sigma + tablo(i, j)
Next j, i
End Function
Avec ce fichier (3) le recalcul se fait maintenant en 0,07 seconde.

Mais il est vrai que la plupart des feuilles sont quasiment vides...

A+
 

Pièces jointes

  • Animaux 2018 VBA(3).xls
    289 KB · Affichages: 25
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 153
Membres
103 137
dernier inscrit
Billly