Macro ou fonction à changer

Jimy

XLDnaute Occasionnel
Bonjour à tous
Dans un autre fil un problème avec une Macro que je souhaiterais changer en fonction:
Code:
[SIZE=3][FONT=Times New Roman]Sub Macro4()[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]' Macro4 Macro[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]' Macro enregistrée le 3/06/2008 par Gruick[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]For i = 2 To Cells(2, 3).End(xlDown).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]  If Cells(i, 3) = 1 Then[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]      Cells(i, 3).Select[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]      For j = Cells(i, 3).Row + 1 To Cells(i, 3).Row + Cells(2, 1) + 1[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]          'Cells(j, 3).Select[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]          If Cells(j, 3) = 1 Then s = s + 1: Exit For[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]      Next j[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]  End If[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Next i[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Cells( 3, 6).value = s[/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3]End Sub[/SIZE][/FONT]
Question est t'il possible de s'inspirer de ce code pour modifier la fonction ?
Cette fonction est destinée a vérifier le nombre de fois qu'une valeur est apparue "avant sa moyenne" donnée dans le fichier en ligne 228.
J'ai vérifié manuellement , mais elle donne faux.
Ex: pour le 1 il est apparu 20 fois alors que la fonction renvoie 22
Pour le 16 pareil, 14 fois alors que la fonction renvoie 16
De plus elle ne fonctionne pas en la mettant à jour... :(
Je joins le fichier en question, au cas ou qqun peut m'aider ?
(merci d'avance)
 

Pièces jointes

  • Euromillion2004-2008R.xls.zip
    33.3 KB · Affichages: 28
  • Euromillion2004-2008R.xls.zip
    33.3 KB · Affichages: 25
  • Euromillion2004-2008R.xls.zip
    33.3 KB · Affichages: 29
Dernière édition:

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Bonjour

Fonction :

Function Précocité(Numéro As Byte, moyenne As Range)
Application.Volatile
' Macro enregistrée le 4/06/2008 par Gruick
i = moyenne.Column
j = 2
k = moyenne.Row
s = Application.CountIf(Range(Cells(j, i), Cells(k, i)), Numéro)
Précocité = s
End Function

Appel :
=Précocité(B1;B228)

Cependant un simple =NB.SI(B2:B225;B1) fait la même chose. Donc quel est l'intérêt ?
 

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Bonjour Chriss
Je crois que tu as mal compris la question, je ne cherche pas la moyenne mais le nombres de fois que la valeur est apparue avant la Moyenne en ligne 228.
je suis d'accord avec toi que =NB.SI(B2:B225;B1) renvoie la même chose, là n'est pas le problème, la fonction va, mais renvoie 22 alors que le nombre de fois qu'elle est apparue avant moyenne est 20. Il faudrait juste que cette fonction se mette a fonctionner correctement.
Code:
Function Précocité(Numéro As Byte, moyenne As Single)
' Macro enregistrée le 4/06/2008 par Gruick
For i = 2 To Cells(1, 1).End(xlDown).Row
    If Cells(i, Numéro + 1) <> "" Then
        For j = Cells(i, Numéro + 1).Row + 1 To Cells(i, Numéro + 1).Row + moyenne + 1
            If Cells(j, Numéro + 1) <> "" Then s = s + 1: Exit For
        Next j
    End If
Next i
Précocité = s
End Function
Je pense qu'elle omet les apparitions à répétitions ( quand la valeur apparait 2 fois de suites)
Counif comme tu l'as écrit traduit représente =NB.SI() mais ce n'est pas ce qui est recherché.
si tu as une idée :confused:
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Bonjour

Le code donné ne calcule pas la moyenne mais bien le nombre de fois où la valeur est sortie.

Mais je ne comprend effectivement pas ce que tu veux calculer : avant la moyenne pour moi c'est les lignes 2 à 225.
Donc la même chose que ce que tu as en ligne 227.

Réexplique ce que tu veux calculer
 
Dernière édition:

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Rebonjour
Ce que j'aimerais calculer est: le nombre d'apparition de chaque valeur " avant la moyenne" en ligne 228.
La moyenne pour la première colonne est de 8.
Si la valeur apparait avant 8 cellules, alors la fonction compte une apparition avant moyenne. sinon elle ne compte rien.
Et ainsi de suite pour les autres valeur en colonnes b, c, d etc...
Je ne peux pas mieux expliquer.
 

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Bonjour

Je ne pige toujours pas quel est le résultat à obtenir.

Entre le 1er tirage et le huitième, le 1 n'est pas sorti donc je trouve 0.

Ou bien est-ce le nombre de fois ou entre 2 sorties du même numéro l'écart est inférieur à la moyenne ?
 

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Bonjour Chriss
reprennons:
- La moyenne est de 8 ( pour le 1 )
- Si ce numéro apparait avant cette moynne de 8 alors la fonction compte 1
- Comme cette valeur est sortie 28 fois
- Et le numéros est apparu 20 FOIS avant cette moyenne de 8
- La fonction devrait renvoyer "20"
C'est le seul résultat qui devrait s'afficher ( pas 22 comme dans le fichier)
Note ; peu importe qu'il n'est pas sorti entre le premier et le huitième tirage, car dans ce cas il ne compte rien.
Il doit compter toute la série pas seulement les huit premiers tirages.
J'espère avoir été plus clair ?
 

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Bonjour

Soit je suis bouchée soit personne ne comprend car tu n'as pas d'autre réponse.
Reprenons : avant veut dire quoi ?
Pour moi cela est
  • soit une notion de temps (dates)
  • soit une notion de numéro de ligne Excel se trouvant avant la ligne 228.
Or avant la ligne 228 il y a 28 fois le chiffre 1. Donc pour moi le 20 visé reste un mystère entier !
 

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Bonjour Chriss
Avant moyenne veut dire avant 8 lignes ( 8 qui est la moyenne )
donc si la valeur apparait dans les 7 lignes ou 6 ou moins encore.
donc la fonction renvoie 1 pour chaque apparitions avant moyenne.
petit ex:
0 0 0 1 0 0 0 0 0 1 0 0 0
là elle apparait 1 fois. (entre les deux 1 il compte 5 zéros) donc considéré avant la moyenne de 8.
Dans ce cas, la fonction renvoie 1
Est plus clair ?
 

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Bonjour

chris à dit:
Ou bien est-ce le nombre de fois ou entre 2 sorties du même numéro l'écart est inférieur à la moyenne ?

J'avais donc proposé cette hypothèse !

En fait 2 problèmes dans ton tableau :

La moyenne est rarement sans décimales. Donc comme les numéros de lignes eux sont sans décimales, cela crée automatiquement un arrondi à la valeur inférieure.

Ton code correspond à inférieure ou égal et donc cela change aussi le nombre par rapport à strictement inférieur.

Donc précises :
  • arrondit-on la moyenne au plus proche et non en-dessous
  • est-ce strictement inférieur ou <=
et je te donnerai le code.
 

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Rebonjour Chriss
Oui je pense que le mieux est d'arrondir au chiffre le plus proche et c'est ce qui est le plus logique.
Et c'est bien "inférieur à la moyenne"
Merci de ton aide et ta patience :)
 

chris

XLDnaute Barbatruc
Re : Macro ou fonction à changer

Re

Function Précocité(Numéro As Byte, moyenne As Single)
For i = 2 To Cells(1, 1).End(xlDown).Row
If Cells(i, Numéro + 1) <> "" Then
For j = i + 1 To i + Round(moyenne, 0) - 1
If Cells(j, Numéro + 1) <> "" Then s = s + 1: Exit For
Next j
End If
Next i
Précocité = s
End Function
 

Jimy

XLDnaute Occasionnel
Re : Macro ou fonction à changer

Bonjour Chriss
Merci de m'avoir fait ce code, elle a l'air de marcher super !!!
Je suis bluffé vu la vitesse à laquelle tu as résolu le prob :D
cependant il y a un problème , j'ai un autre fichier ou à la place des vides entre les apparitions de numéros, j'ai des zéros, et j'ai essayé de la faire fonctionner sur cet autre fichier, mais il me dit qu'il y a une erreur de compilation:confused: pourtant j'ai recopié tout comme c'était.
Il surligne la parite du code où il y a
Code:
round(moyenne,0)
j'ai simplement remplacé les <>"" en <>0
c'est tout ce qu'il y de changé.
Sinon sur le fichier joint en premier elle fonctionne du tonnerre !
Encore un grand merci sans toi je ne serais jamais arrivé :)
 

Discussions similaires

Réponses
0
Affichages
155

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia