[VBA] Identifier une date la + proche de fin de mois

altarez Messages postés 21 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 4 juin 2009 - 26 mai 2006 à 11:43
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 28 mai 2006 à 20:17
Bonjour à tous,

Voila, je cherche un code VBA qui identifie parmis un liste de date, celle qui se rapporche le plus de la fin du mois.
voici comment se compose le fichier Excel :

    col A      |       col B      |
abc0101         29/05/06       
abc0101         30/05/06       
abc0101         01/06/06     
dec0208         26/05/06
dec0208         02/06/06
xyzd253          22/05/06
xyzd253          05/06/06    

Comme vous pouvez le voir, en colonne A il y a plusieurs "nom" differents, je cherche donc à identifier la date pour chaque "nom" la plus proche (en nombre de jour ouvrés) de la date de fin de mois (ici :31/05/2006) et afficher en colonne C le resultat.

Merci a tous ceux qui pourront m'aider, et n'hesitez pas à me demander si je n'ai pas été assez explicite.

  

6 réponses

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
26 mai 2006 à 11:53
En gros l'algo est le suivant :

pour chaque valeur dans la colonne B


      récupérer le texte et le convertir en date
      si le mois et l'année sont égals à ce de la date du jours (now) alors
            comparer le jour avec le tmpDate et s'il est plus grand alors remplacer tmpdate par la valeur courante
     
une fois tous les éléments parcouru on renvoie le nom de la colonne A correspondant a la cellule de B qu'on a déterminé
0
altarez Messages postés 21 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 4 juin 2009 4
26 mai 2006 à 13:30
Merci de ta réponse.
Ca me parit pas trop mal, mais j'ai du mal a visualisé comment ca fonctionne et comment le retranscrire.
est-ce que dans ton algo il est prévu de differencier les differents noms?

Dans mon exmple il y a 3 noms (code) differents dans la colA, a la fin du traitement j'aurai donc logiquement un resultat de 3 dates (1 par code)
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
26 mai 2006 à 13:40
tout dépend de ce que tu veux :)
tu peux soit prendre le premier élément de la liste, pour celà il faut faire un test strictement plus grand ; soit le dernier il faut faire un plus grand ou égal.

sinon si tu les veux tous ben là ca se complique un petit peu car il faut faire un tableau et gérer l' "agrandissement" de celui-ci.


pour la retranscription je t'avouerais que je fais pas de vba. mais avec un bon tuto sous la main pour savoir récupérer les valeurs d'une colonne, faire une boucle (do while, for) et hop le tour est joué :)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 mai 2006 à 14:02
Salut,

Je vous file un algo pour trouver le 1er et dernier jour du mois :

DerJourMoisPrecedant = Date - Day(Date)
PremJourMoisEnCours = Date - Day(Date) + 1

@ ++






  Mortalino 



Le mystérieux chevalier "Provençal, le Gaullois"



Valider les réponses qui vous conviennent.
Pensez à Voir le règlement de CodeS-SourceS.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
altarez Messages postés 21 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 4 juin 2009 4
27 mai 2006 à 12:30
Merci pour le truc des dates, c'est bon a savoir.
Mais je pense pas que ca puisse m'aider dans ce que je cherche a faire.
vpoyo : Je suis un peu perdu la ;)

En language VBA je pensais faire :
tant que (monCode) est identique
alors fait le calcul "maDate"
Sinon passe a la ligne suivante

maDate serai une procedure VBA qui calcule le jour le plus proche de fin de mois
(monCode) serai une variable qui stockerai le code actuel.
genre: monCode = Activecell.text

A la fin j'aurai un truc comme ça :

col A | col B | col C
BBBBBBB 29/05/06
BBBBBBB 30/05/06 correct
BBBBBBB 01/06/06
PPPPPPP 26/05/06
PPPPPPP 02/06/06 correct
xyzd253 22/05/06
xyzd253 05/06/06 correct
AAAAAAA 30/05/06
AAAAAAA 31/05/06 correct
AAAAAAA 01/06/06

VOus pensez que c'est possible ?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 mai 2006 à 20:17
Oui c'est possible.
Je veux bien t'aider sur le code mais il me faut une précision car je ne comprends pas ton critère de recherche.

Tu souhaites chercher les dates les + proches du dernier jour mais dans quel interval de date ?
(car un moment tu mets "correct" au 30/05, au 02/06, au 05/06 et au 30/05 ; par contre tu délaisses le 01/06 & le 30/05 vers la fin de liste de ton exemple)

Merci pour tes petites précisions !

@++

Mortalino
Le Mystérieux Chevalier "Provençal, le Gaulois"
0
Rejoignez-nous