Comment mettre en place un compteur en fonction de la date

Résolu/Fermé
Signaler
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014
-
Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
-
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

Messages postés
10185
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 novembre 2021
2 251
Bonjour

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

Cdlmt
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
3 249
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
3 249
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
3 249
Bonjour

pourquoi VBA?

Le pb se résout par des formules...
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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.
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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é.
Messages postés
10185
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 novembre 2021
2 251
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?
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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.
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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.
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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 :)
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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:
Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
3 249
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
????
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014
>
Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021

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.
Messages postés
11
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
22 novembre 2014

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.
Messages postés
16537
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 novembre 2021
3 249
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....