Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Tableau Excel loi de Benford

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 !

JDA75

XLDnaute Nouveau
Bonjour Je m'appelle Julien et suis nouveau sur le forum.

J'essaye d'améliorer un fichier trouvé ici pour analyser une suite de nombres avec la loi de Benford (et analyse graphique).

Je ne connais pas bien les fonctionnalités "Matrice" et ne comprends pas que quand je sélectionne G2-G10, modifie la plage C2-C26000 et valide avec Ctrl+ Shift + Entrée, la formule ne fonctionne pas. Dans le futur je souhaite utiliser ce modèle pour différentes base de données avec un nombre de lignes différents.

Est ce qu'une bonne âme pourrait m'aider à faire fonctionne ce tableau et m'expliquer la procédure a suivre avec une prochaine base de données avec plus ou moins de lignes ?

Cordialement,
 

Pièces jointes

Bonjour,

Je ne connais pas cette loi mais il y déjà un problème avec
chi = CInt(Left(Format(datas(lig, 1), "0.0E+00"), 1)) ' retourne le 1er chiffre <> 0

pour les valeurs négatives Left(Format(datas(lig, 1), "0.0E+00"), 1) renvoie le signe moins donc CInt n'aime pas.
Tu peux faire chi = CInt(Left(Format(Abs(datas(lig, 1)), "0.0E+00"), 1))

mais il y a un problème plus loin.

Avant de chercher plus loin :
- Peux tu expliquer l'algorithme de calcul à effectuer ?
-Si c'est faisable par formule est tu OK ?
 
Bonsoir,
Corrigez le code de la fonction FreqBenford comme suit :
VB:
Function FreqBenford(plage As Range)
    Dim datas, dictApparition, chi
    Dim lig As Long, tmp(1 To 9, 1 To 1) As Double, total As Long, k
    Set dictApparition = CreateObject("Scripting.Dictionary")
    datas = plage.Value
    For lig = 1 To UBound(datas)
        If IsNumeric(datas(lig, 1)) Then
            chi = CInt(Left(Format(Abs(datas(lig, 1)), "0.0E+00"), 1)) ' retourne le 1er chiffre <> 0
            dictApparition(chi) = dictApparition(chi) + 1
        End If
    Next lig
    For Each k In dictApparition
        If k <> 0 Then tmp(k, 1) = dictApparition(k)
        total = total + dictApparition(k)
    Next
    For lig = 1 To 9
        tmp(lig, 1) = tmp(lig, 1) / total
    Next lig
    FreqBenford = tmp
    Set dictApparition = Nothing
End Function
Cordialement,
 
Bonsoir,

Le fiston était là. Il a donné un coup de main.
J'ai essayé de reporter ses explications en feuil 2.

Bonne soirée.
Bonjour,

Je vous remercie tous pour vos réponses et quelle célérité !

Merci beaucoup Cathodique pour votre participation et le fichier corrigé en pièce jointe qui fonctionne maintenant quelque soit le nombre de ligne, j'en suis très satisfait pour de futures analyse.

Merci encore pour votre aide.

Bien cordialement,
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…