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

Signaler
Messages postés
21
Date d'inscription
mardi 24 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2009
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
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

Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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é
Messages postés
21
Date d'inscription
mardi 24 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2009
4
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)
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
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é :)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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.
Messages postés
21
Date d'inscription
mardi 24 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2009
4
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 ?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"