Comment mettre en place un compteur en fonction de la date

Résolu/Fermé
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014 - 21 nov. 2014 à 11:39
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 22 nov. 2014 à 17:51
Bonjour,

je me permets de poster sur ce forum car j'ai un petit problème, auquel je ne trouve pas de solution.

J'ai un tableau excel avec un 3 colonne; A,B et C.
A:date de réception
B: date de validation
C: la différente entre A et B

Je voudrais en fonction de "la date de réception", avoir le nombre de case vide "date de validation".

merci pour vos réponses

11 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
21 nov. 2014 à 14:46
Bonjour

Comme dit michel (salut à toi en passant) pas besoin de vba
https://www.cjoint.com/?3Kvo0FSkBvg

Cdlmt
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 21/11/2014 à 16:08
re,
pour répondre à ta préoccupation
A1 doit rester vide de préférence
en D2
=INDEX(A:A;MIN(SI(NB.SI(D$1:D1;A$2:A$50)=0;LIGNE(A$2:A$50))))
mettre au format date
tirer vers le bas
Formule à valider par « ctrl+maj+entrée » (et non directement par « entrée »), le curseur clignotant dans la barre de formule

Décocher afficher 0 cellules vides (options excel -avancées)

Mais si tu as des milliers de dates, alors, oui, il vaut mieux passer par du vba , les formules matricielles et sommeprod étant très lentes(toujours préciser le nombre de lignes dans les demandes car l'nalyse du pb varie suivant le nombre de lignes)

Je regarde pour du vba mais je dois m'absenter
Merci de mettre un extrait de ton classeur (1000 lignes environ) car je n'ai pas trop envie de m'amuser à passer 1 heure à le reconstituer:

mettre le classeur sans données confidentielles en pièce jointe sur http://cijoint.fr/
et coller le lien proposé dans le message de réponse


pour ccm81:
mon idée:voir avec un dictionary avec un item comptant les vides

Michel
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
22 nov. 2014 à 11:55
Bonjour

Proposition VBA
Option Explicit
'-------
Sub compter_lesvides()
Dim Derlig As Long, T_in, Idx As Long, Jour As Long
Dim D_date As Object
Dim test
'----initialisations
Application.ScreenUpdating = False
With Sheets("test")
Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
'stocke en RAM le tableau
T_in = .Range("C6:D" & Derlig)
Set D_date = CreateObject("scripting.dictionary")
'-----collecte et traitement
For Idx = 1 To UBound(T_in)
Jour = CLng(T_in(Idx, 1))
If Not D_date.Exists(Jour) Then
D_date.Add Jour, 0
If T_in(Idx, 2) = "" Then D_date.Item(Jour) = 1
Else
If T_in(Idx, 2) = "" Then D_date.Item(Jour) = D_date.Item(Jour) + 1
'test = D_date.Item(Jour)
End If
Next
'restitution
.Range("G7:H10000").Clear
With .Range("G7").Resize(D_date.Count, 1)
.Value = Application.Transpose(D_date.keys)
.NumberFormat = "dd/mm/yyyy"
End With
.Range("H7").Resize(D_date.Count, 1) = Application.Transpose(D_date.items)
.Range("G7:H" & D_date.Count + 7).Borders.Weight = xlThin
End With
End Sub


maquette de W
https://www.cjoint.com/?3Kwma35qESk
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
21 nov. 2014 à 13:37
Bonjour

pourquoi VBA?

Le pb se résout par des formules...
0

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

Posez votre question
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
21 nov. 2014 à 13:59
Merci pour ta question,
j'ai passé quelques heures à essayer avec les formules comme NB.SI ou autre sans résultats, mais si tu as une solution à me communiquer, je te remercie d'avance.
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
21 nov. 2014 à 15:03
merci beaucoup ccma81 pour ta réponse, cela va beaucoup m'aider dans un premier temps. Mais la solution atteint ses limites quand j'ai une base de donné qui se remplie tout les jours avec les données que j'ai cité dans ma problématique (colonne A et B). Car dans ta solution on renseigne les dates manuellement et cela devient vite lourd quand notre base de données comprte des milliers de date.

Merci beaucoup, déjà avec cette solution, mon problème a bien avancé.
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
21 nov. 2014 à 15:17
Je ne comprend pas très bien
1. Mais la solution atteint ses limites quand j'ai une base de donné qui se remplie tout les jours avec les données que j'ai cité dans ma problématique
Dans ce cas
Definir les plages de façon dynamique
date1=DECALER(Feuil1!$A$1;1;0;NB(Feuil1!$A:$A);1)
date2=DECALER(Feuil1!$A$1;1;1;NB(Feuil1!$A:$A);1)
puis la formule en F2
F2=SOMMEPROD((date1=D2)*(date2=""))
2. Car dans ta solution on renseigne les dates manuellement et cela devient vite lourd
est ce que tu parles de la colonne D?
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
21 nov. 2014 à 17:00
merci beaucoup pour la réponse.
laisse moi quelques temps pour allégé le document et supprimer toutes les données sensible. Je le mettrai par la suite sur ton lien.
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
22 nov. 2014 à 09:54
Bonjour à tous et bon weekend, comme convenu voici le fichier en question.
https://www.cjoint.com/?3Kwj7zk664Z
le but c'est de compter les cases vides par date.
un grand merci à tous.
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
22 nov. 2014 à 12:10
wow c'est exactement ce que je voulais, je vais l'adapter sur mon fichier d'origine et je me permettrai de revenir vers toi si jamais j'ai des difficulté.
encore un grand merci :)
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
22 nov. 2014 à 13:18
j'ai modifier le code pour l'adapter à mon tableau mais malheureusement je n'ai aucun résultat, devant toutes les dates il y a marqué 0.

le code
Option Explicit
'-------
Sub compter_lesvides()
Dim Derlig As Long, T_in, Idx As Long, Jour As Long
Dim D_date As Object
Dim TempsdeTraverseGlobale
'----initialisations
Application.ScreenUpdating = False
With Sheets("TempsdeTraverseGlobale")
Derlig = .Columns("E").Find("*", , , , , xlPrevious).Row
'stocke en RAM le tableau
T_in = .Range("E6:K" & Derlig)
Set D_date = CreateObject("scripting.dictionary")
'-----collecte et traitement
For Idx = 1 To UBound(T_in)
Jour = CLng(T_in(Idx, 1))
If Not D_date.Exists(Jour) Then
D_date.Add Jour, 0
If T_in(Idx, 2) = "" Then D_date.Item(Jour) = 1
Else
If T_in(Idx, 2) = "" Then D_date.Item(Jour) = D_date.Item(Jour) + 1
'TempsdeTraverseGlobale = D_date.Item(Jour)
End If
Next
'restitution
.Range("K6:L10000").Clear
With .Range("K6").Resize(D_date.Count, 1)
.Value = Application.Transpose(D_date.keys)
.NumberFormat = "dd/mm/yyyy"
End With
.Range("L6").Resize(D_date.Count, 1) = Application.Transpose(D_date.items)
.Range("K6:L" & D_date.Count + 7).Borders.Weight = xlThin
End With
End Sub

le resultat:
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
22 nov. 2014 à 13:33
Oui mais ca marche sur le mien comme quoi les exemples vite faits ne correspondant pas à la réalité posent toujours des problèmes

par exemple
T_in = .Range("E6:K" & Derlig) ???? pourquoi K puisque tu restitue en K ?
et sur mon code
T_in = .Range("C6:D" & Derlig)
le test se fait sur la colonne à droite de la colonne date
????
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
22 nov. 2014 à 13:49
effectivement, à ce niveau je me suis trompé, le test sur mon ficher ce fait sur la colonne G et non sur la K.
je vais refaire des test toute cette après midi et j'espère que ça marchera.
0
cooka Messages postés 11 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 22 novembre 2014
22 nov. 2014 à 16:50
j'ai enfin trouvé d'où vient le bug.
sur mon fichier, entre la colonne date de réception et date de validation, il y a une colonne avec un certain nombre de données, et quand j'efface ses données la macro remarche.
mais je n'arrive pas à voir comment je pourrais corriger la macro.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 22/11/2014 à 18:03
Si tu as une colonne entre les deux réception et validation, tu changes partout
T_in(Idx,2) en T_in(Idx,3)

edit à 18:02h

Et tu instancies ton tableau par
T_in = .Range("E6:G" & Derlig)

comme quoi, avec la config réelle plutôt qu'un exemple faux....
0