Problème fonction .Count VBA

Bonjour,

Je viens sur ce forum pour obtenir de l'aide car je débute en VBA (j'y ait été introduit hier) mais j'en ai besoin pour l'exploitation d'un fichier, et je rencontre quelques difficultés.

Dans ce fichier, je dispose de 20 colonnes de mesures. La valeur est 0 ou aux alentours de 2.5 (en réalité, on oscille autour de ces valeurs à cause d'un bruit) et je souhaite trouver la ligne à laquelle on trouve un changement d'état (on passe 4 fois de 0 à 2.5 et 4 fois de 2.5 à 0). Le problème est que les mesures n'ont pas toutes le même nombre de ligne et je dois réaliser cette recherche dans 16 fichiers de la même taille en tout, utiliser une fonction que je n'aurai pas à modifier d'un fichier à l'autre me semble donc le moyen le plus simple pour répéter l'opération.

J'ai donc écrit cette fonction en VBA :

Public Function rech_front_ligne(valeur As Double, etat As Variant, depart As Double)

Dim i As Integer
Dim a As Integer
Dim b As Integer

Dim p As Integer

p = etat.Count

For i = depart To p
a = etat(i)
b = etat(i - 1)
If (valeur < Abs(a - b)) Then
rech_front_ligne = (i)
Exit For
End If
Next i

End Function

Dans cette fonction, je viens rechercher le premier changement visible par la fonction en partant de départ : Ainsi je prends en entrée pour ma première opération 2.4 pour valeur, ma colonne de mesure pour état et 1 pour départ, ce qui doit me donner la position du premier front montant de 0 à 2.5. Une fois la valeur renvoyée, pour trouver le front descendant de 2.5 à 0 qui doit suivre, j'ai simplement à relancer la fonction en mettant cette fois-ci pour la départ la valeur trouvée précédemment +1.

Lorsque j'appelle la fonction dans une cellule, celle-ci me renvoie en sortie "#VALEUR!".. J'ai pourtant vérifié mes entrées et ait même rajouté les symboles $ à mes entrées pour être sûr. Pour tenter d'identifier le problème, j'ai essayé de placer des marqueurs temporels à chaque ligne pour suivre l'évolution du programme et il à l'air de bloquer à la ligne "p = etat.Count".. En effet, lorsque je place un marqueur sur cette ligne, je peux voir que le programme s'y arrête mais lorsque je le place à la ligne suivante, j'ai l'impression que la fonction n'atteint jamais la ligne. Je pense donc que le problème vient de la fonction .Count mais je n'ai aucune idée de comment pallier à ce problème..

Je ne peux pas mettre le fichier en PJ car trop lourd, je mets donc un exemple simplifié (il n'y a qu'une colonne de mesure et il n'y a pas 8 changements de valeurs mais il y en a au moins 5).

10exemple.zip (900.63 Ko)

Il ne faut cependant pas oublier que le fichier de base dispose de 20 mesures différentes et que chaque mesure fait quelques 40 000 lignes, et que l'opération est effectuée dans 16 fichiers où les mesures n'ont pas le même nombre de points d'un fichier à l'autre...

Voilà, j'ai essayé de donner un maximum de détails et j'espère qu'ils permettront de résoudre mon problème (j'insiste bien sur le fait que je souhaite écrire une fonction où l'on rentre les colonnes en argument en entrée) !

Je vous remercie d'avance ! :)

Bonjour,

Vérifiez vos déclarations de variables:

Selon votre exemple, les variables p et i reçoivent le nombre 41929 alors qu'elles sont déclarées en integer.

les variables a et b sont déclarées en integer alors qu'elles doivent recevoir des nombres décimaux

Il y a donc erreur et interruption du déroulement de la fonction qui renvoie alors le message #VALEUR

.

A+

Rechercher des sujets similaires à "probleme fonction count vba"