XL 2013 Erreur de Formules

  • Initiateur de la discussion Initiateur de la discussion Phoenix23
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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.
 
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

Dernière édition:
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
682
Réponses
2
Affichages
1 K
Retour