Bonjour,
déjà juste avec la fonction VBA DateDiff …
_________________________________________________________________________________________________________Je suis Paris, Nice, Bruxelles, Charlie, …
Version imprimable
Bonjour,
déjà juste avec la fonction VBA DateDiff …
_________________________________________________________________________________________________________Je suis Paris, Nice, Bruxelles, Charlie, …
re
on s'égare la robert la dernière solution que j'ai proposé garde bien que les dernier jour du mois des dates en cellules
et date(jour1 du mois ) +31 ne donne pas forcement le 1 du mois suivant c'est une erreur robert
test avec les 12 mois tu verra
Je ne parviens pas à croire que l'on se pose tant de questions en ce qui concerne l'utilisation de Dateserial.
Cette fonction, qui reconstitue en arrière plan le numérique d'une date ne saurait en aucun cas se tromper. Quel que soit le mois de quelle que soit l'année.
J'ai par ailleurs lu ici des interrogations relatives aux "jours ouvrables". Or :
1) qui a dit que le demandeur se limitait à des jours ouvrables ? Qui vous dit, d'ailleurs, qu'il s'agit de dates liées à une activité professionnelle ?
2) et quand bien même il s'agirait d'activité professionnelle :
-- a) certaines "vivent" 24 heures sur 24, 7 jours sur 7, y compris certains services de l'Etat !
-- b) d'autres s'étalent sur 5 jours par semaines et d'autres sur 6 jours par semaines et pour ces dernières :
------- le(s) jour(s) non ouvrables ne sont pas forcément les mêmes (samedi ou/et Dimanche)
etc, etc ...
-- c) et même si l'on acceptait l'idée d'une "généralité" : elle serait différente dans certains pays
alors, utiliser une "fonction" universelle pour déterminer les jours ouvrables relève de la quasi-utopie !
Il serait dans ces conditions assez sage de ne pas extrapoler la question du demandeur.
Et (pour garder les pieds sur terre),si l'on veut ne garder que les données correspondant à la dernière date ayant donné lieu à un enregistrement de chaque mois, même si cette date n'est pas le dernier jour du mois, rien de plus simple non plus (dès lors que l'on veut supprimer toutes les autres données) !
Je suggère maintenant qu'on attende que le demandeur s'exprime.
Mercii les gars
J'ai essayé le code de patricktoulon, mais au lieux de faire une boucle For, j'ai utilisé une boucle Do. Je l'ai exécuté sur un échantillon de 10 lignes, et ça marche
voici mon code final, en ayant rajouter la condition sur les doublons. En fait, ma feuille contient des doublons et je voudrai supprimer le doublon qui a la date < a 30 ou 31:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Sub dat() Dim i As Integer Sheets("Extraction").Select Application.Calculation = xlCalculationManual Application.ScreenUpdating = False i = 2 Do Range("A" & i).Select Range("I" & i).Select If Cells(i, 1).Value = Cells(i + 1, 1).Value And Day(CDate(Cells(i, 9))) < 30 Then Rows(i).Delete i = i Else If Cells(i, 1).Value = Cells(i + 1, 1).Value And Day(CDate(Cells(i + 1, 9))) < 30 Then Rows(i + 1).Delete i = i End If i = i + 1 End If Loop While (Sheets("Extraction").Range("A" & i) <> "") Application.Calculation = xlCalculationAutomatic End Sub
Mais interrogation ce portaient sur le fait de préciser si le dernier jours du mois pouvais ou non être un samedi ou dimanche, pas d'imposer les jours ouvrés!
Mon questionnement ce prêtait également sur le traitement du mois de février, mais puisque il semblerait que le demandeur a trouvé sa solution, le mois de février n'est pas traiter!
Maintenant j'ai dit que le premier jour du mois + 31 tombait en début du mois suivant pas que c'était le le premier jour du mois suivant, l solution que j'ai proposé le montre bie et elle donne la date du dernier jour du mois même pour février.
Les date reste des dates même si le sicle journalier est de 5 heures cumulé sur 31 jours sinon il faut s'intéresser qu'aux nombres d'heures!
La durée du temps de travail ne donneront jamais 31 jours au mois de février!
Bonjour Robert
Regarde :
Dateserial ne se trompera jamais (et pour cause : il "repart" toujours d'un numérique, qu'il traite d'abord comme tel)Code:
1
2
3
4
5
6
7 Dim d As Date d = CDate("02/02/2007") ' année normale MsgBox DateSerial(Year(d), Month(d) + 1, 1) - 1 d = CDate("02/02/2008") ' année bissextile MsgBox DateSerial(Year(d), Month(d) + 1, 0) d = CDate("21/12/2008") ' on est à la fin d'une année MsgBox DateSerial(Year(d), Month(d) + 1, 0)
Amitiés
Je sais que ça fonctionne je fais autrement mais c'est une autre façon de voir
Utiliser ta méthode ou la mienne pour qualifier l valeur de la cellule ok.
De toutes le façons nos deux méthode ce place au 01 du mois suivant - 1!
Mais ne confondons pas les sujets, la question posée est le dernier jour du mois 30 ou 31!
Et c'est bien ce que fait la solution retenue (pas de 28 ou 29 février)
Pourquoi cela?
Ma boucle teste bien mes deux colonnes. Si la cellule (i,1) est égale à la cellule (i+1, 1), alors mon code supprime la ligne qui a la date < au 30 dans la cellule(i,9) ou bien le cellule (i+1,9)
Il supprimera la i ème ligne si la cellule(i,9)<30 et cellule (i+1,9) >30. Ou il supprimera la i ème +1 ligne si la cellule (i+1,9) est <30 et cellule(i,9) >30 . Et cela sous la condition qu'il ai un doublon
La seconde condition est imbriquée dans la première condition