VBA : Petit mystère Excel (Problème de format?)

Bonjour,

Afin de pouvoir comparer un très grand nombre de données, j’ai cherché une solution en passant par des tableaux VBA.

Mon code fonctionne assez bien, à l’exception d’un petit mystère qui m’embête bien. Afin d’en faire la démonstration, j’ai réduit mon fichier ci-joint à une ligne alors que qu’il peut aller jusqu’à 1500 lignes environ.

Mon problème est que si je lance la macro placée derrière le ‘Bouton 1’, les résultats en E5 et en H5 ne sont pas identiques, alors que les données de base – en C5:D5 et en F5:G5 - semblent tout à fait égales. Afin d’en avoir la preuve, j’ai effectué des tests en A12 et B12. Le format des cellules C5:D5 et F5:G5 est également identique de prime abord.

En deux mots voici les étapes principales de ma macro : ça remplit un Tableau_A avec les données des colonnes C à BD, ça place en colonnes IA et IB – les unes à la suite des autres - les données des colonnes BF:DY, ça trie les colonnes IA et IB, ça charge le Tableau_B avec les données des colonnes IA:IB, ça compare en boucle les données du Tableau_A avec les données en boucle du Tableau_B afin de trouver des chevauchements de période entre les deux (mais afin de réduire le nombre de comparaisons nécessaires, ça recherche au préalable par les instructions 'WorksheetFunction.Match' les données du Tableau_B qu’il est nécessaire de traiter), ça charge le Tableau_C avec les résultats trouvés, résultats qui sont finalement placés dans les colonnes E, H, K, etc.

Afin de bien voir le problème, il faudrait placer un point d’arrêt sur la ligne If Inférieur_majoré <= Tableau_B(m, 2) And Inférieur >= Tableau_B(m, 1) Then Compteur_Bis = 1. A la première pression sur la touche F5, k =1, m =18, Inférieur_majoré = 00:18:10, Tableau_B(m, 2) = 00:18:10, Inférieur = 00:18:00 et Tableau_B(m, 1) = 00:17:10. Bizarrement, en appuyant alors sur la touche F8, le code ne passe pas par Then Compteur_Bis = 1, ce que je n’arrive absolument pas à expliquer.

Ci-dessus, les valeurs des variables Inférieur_majoré, Tableau_B(m, 2), Inférieur et Tableau_B(m, 1) correspondent aux données des cellules C5:D5.

En appuyant 3 fois sur F5 - jusqu’à ce que k = 2 et m = 18, les autres variables correspondant alors aux données des cellules F5:G5 et étant, à ce que je peux constater, absolument identiques – et en appuyant une fois sur F8, le code passe cette fois par Then Compteur_Bis = 1, ce qui correspond à ce que je désirerais.

Si j’effectue un copier-coller des cellules C5:D5 ou F5:G5 vers un autre endroit du tableau de gauche (par exemple collé en I5:J5), le problème suit.

Avez-vous une idée pour résoudre mon problème ?

Bonsoir

Yvouille a écrit :

j’ai réduit mon fichier ci-joint

Il est où le fichier ?

Ah ces nouveaux membres !!!

Amicalement

Nad

Oh, la honte

Merci Nad de m'avoir rendu attentif à cela.

Très bonnes salutations et ..... au plaisir de lire ta solution

19demo-forum.zip (122.81 Ko)

Re

L'erreur vient de F5.

Bien que C5=F5 si tu revalides F5 tu obtiens bien 2

Par contre, te dire le pourquoi du comment ...

Nad

Salut Nad et merci pour ta réponse.

J’avais bien remarqué qu’en réinscrivant les données, ça modifiait les résultats. Mais tout d’abord ça les modifie dans le faux sens (en réinscrivant F5, je ne trouve plus que 2 occurrences alors que selon moi il y en a 3, comme avant la modification de F5) et secondement si j’ai un tableau de 1500 lignes, je ne vais pas pouvoir réécrire toutes les cellules des 18 paires de colonnes de C à BC.

Il me semble pourtant que lors du passage sur la ligne mentionnée dans mon premier message, la première condition est remplie [If Inférieur_majoré <= Tableau_B(m, 2), 00 :18 :00 est bien égal à 00 :18 :00] ainsi que la deuxième condition [ And Inférieur >= Tableau_B(m, 1), 00 :18 :00 est bien supérieur à 00 :17 :10].

Je cherche donc toujours une solution afin de trouver 3 occurences avec ces données.

A vous relire.

Bonjour

Une autre piste à explorée : Le stockage des données par XL

Il y a souvent des erreurs de calculs avec les nombres non entier

Le moyen utilisé est d'arrondir

Essayes

        If Round(Inférieur_majoré, 8) <= Round(Tableau_B(m, 2), 8) And Inférieur >= Tableau_B(m, 1) Then Compteur_Bis = 1

Salut Banzai et merci pour ton intervention,

A première vue, ta solution semble résoudre tous mes problèmes …… en espérant que ça n’en crée pas d’autres à un autre niveau.

J’avais travaillé au début avec des heures décimales arrondies à 10 chiffres après la virgule (ce qui s’est avéré exagéré) mais ça créait d’autres problèmes à d’autres niveaux, d’où mon passage aux heures au format ‘Date’, de plus bien plus agréable à lire en tant que variables. Mais je n’aurais jamais pensé qu’il fallait quand même arrondi ces données ‘Date’.

Banzai64 a écrit :

Une autre piste à explorée : Le stockage des données par XL

Je ne connais pas du tout. Est-ce une solution beaucoup plus rapide que les tableaux VBA ?

A te relire.

Rechercher des sujets similaires à "vba petit mystere probleme format"