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

XL 2019 Boucle For...Each non fonctionnel et autres soucis de traitement

Hutchy33

XLDnaute Nouveau
Bonjour à tous,
J'ai plusieurs soucis de traitement sur le fichier joint. Actuellement je suis en train de m'énerver sur ce fichier car cela fait plusieurs jours que je suis dessus, j'ai défait et refait sans succès, et à force l'énervement prend le dessus et je n'arrive plus à rien (je sais c'est pas bien!). Je m'explique:
Dans le fichier joint l'utilisateur doit renseigner des données, notamment la date de fin d'une action à réaliser dans la colonne K. Au moment de la sélection de cette colonne une Inputbox demande à l'utilisateur le nombre de jour qu'il souhaite paramétrer pour l'alerte visuelle couleur lorsque l'on approche de la date de fin de l'action. J'écris ce paramètre en Q12. Jusque ici tout fonctionne.
Dans la colonne L (Échéance) je dois retrouver (de façon automatique) le nombre de jours restant jusqu'à la fin de l'action prévue, et un code couleur sur la cellule en fonction de l'alerte paramétrée par l'utilisateur (rouge si date du jour supérieur à la date de fin, marron si nombre de jours restant jusqu'à la date de fin se trouve dans le critère paramétré).
Lorsque j'exécute la macro Échéance pour que la colonne L se mette à jour sur le nombre de jours restant jusqu'à la date de fin de l'action prévue, ma macro se déroule bien au début, la différence entre date du jour et date de fin d'action s'inscrit bien dans la cellule mais du fait du signe négatif (-) que j'obtiens en résultat ma cellule ne devient jamais rouge.
J'ai tenté d'utiliser la fonction Mid sans succès.
De plus dans mon code j'utilise une boucle For Each pour que ce traitement se fasse pour chaque date contenue dans la colonne K, et une msgbox pour dire "fin de traitement", sauf que cette boucle ne fonctionne pas, le code continu même si je n'ai plus de date dans K
Please une âme charitable pour un coup de pouce s'il vous plait.

(mon code ne plaira peut-être pas à certain d'entre vous, mais je suis débutant en vba)

Merci beaucoup
 

Pièces jointes

  • test.xlsm
    16.5 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Bonjour


Voir ce petit test qui peut expliquer des choses
Code:
Sub Un_indice()
MsgBox Range("K12", Range("K12").End(xlDown)).Address
End Sub
Sub Un_second_indice()
MsgBox Range(Cells(12, "K"), Cells(Rows.Count, "K").End(xlUp)).Address
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Précisions
Je poste souvent non une solution toute prête mais de quoi titiller la curiosité du demandeur.
C'était ce qu'était censé faire le bout de code du message#2
Et normalement une fois la curiosité suscitée, le demandeur devait me poser des questions ou des demandes de précisions.

Heureusement (et c'est la seconde fois ), Phil69970 a sorti sa lampe de poche.

Quant à moi, je suis reparti écluser deux trois bières dans une arrière-salle miteuse pour oublier d'avoir été assimilisé à ...
"Personne pour m'aider ?
Alors que selon l'état civil, je suis bien un individu et non point personne.
 

Staple1600

XLDnaute Barbatruc
Bonjour Phil69970

J'essaierai de mettre plus d'eau de roche dans mes prochaines réponses

A propos de piste, je me rappelle bien ,il y a un DateDiff dans le code ?

Jadis, ne disait-on pas ceci à propos de cela ?

A moins qu'une correction a été apportée dans les nouvelles versions ?
 

Hutchy33

XLDnaute Nouveau
Bonsoir @Staple1600 ,
Merci bien sûr pour ta réponse, il est vrai que j'ai pas su l'interpréter et j'ai pas osé te demander des précisions, tout semblait logique pour toi et je suis novice en VBA. Du coup je bois une bière à ta santé (et celle de @Phil69970 au passage)
 

Staple1600

XLDnaute Barbatruc
Re

Alors voilà de quoi oser me poser des questions
(tests en rapport avec ce que j'évoquais dans le message#8... où il y avait un lien cliquable )

VB:
Sub tests()
Dim test_a, test_b, test_c
test_a = DateDiff("d", Range("K12"), Range("N6"))
MsgBox test_a
test_b = [N6] - [K12]
MsgBox test_b
test_c = Date - [K12]
MsgBox test_c
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Oui mais je ne sais si c'est corrigé dans les dernières versions d'Excel.
Ou si il vaut mieux se faire sa propre fonction DateDif

Quoique, selon le besoin, une simple soustraction (comme dans mes tests) du message#10 devrait suffire, non ?
 

Staple1600

XLDnaute Barbatruc
Re

J'ai replongé le nez dans le fichier exemple
(mais j'ai point regardé celui du message#4, donc j'espère ne pas faire dans la redondance)

Pourquoi ne pas simplement utiliser une MFC ?
La formule pour ORANGE
=((AUJOURDHUI()-K12)=1)

La formule pour ROUGE
=((AUJOURDHUI()-K12)=1)=FAUX
 

Hutchy33

XLDnaute Nouveau
La couleur orange doit être quand le résultat datedif se trouve dans la fourchette du nombre de jours paramétrer par l'utilisateur. Mais pour ce point là j'ai arrivé à faire se que je souhaitais. Merci tout de même.
 

Discussions similaires

Réponses
5
Affichages
336
Réponses
9
Affichages
306
Réponses
4
Affichages
297
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…