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
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
A voir également:
- Comment mettre en place un compteur en fonction de la date
- Fonction si et - Guide
- Que signifie la croix sur snap a la place de l'appareil photo - Forum Snapchat
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. - Forum Graphisme
- Comment ouvrir un fichier dat - Guide
- Jm date - Forum Consommation & Internet
11 réponses
ccm81
Messages postés
10850
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 mars 2024
2 403
21 nov. 2014 à 14:46
21 nov. 2014 à 14:46
Bonjour
Comme dit michel (salut à toi en passant) pas besoin de vba
https://www.cjoint.com/?3Kvo0FSkBvg
Cdlmt
Comme dit michel (salut à toi en passant) pas besoin de vba
https://www.cjoint.com/?3Kvo0FSkBvg
Cdlmt
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
Modifié par michel_m le 21/11/2014 à 16:08
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
22 nov. 2014 à 11:55
22 nov. 2014 à 11:55
Bonjour
Proposition VBA
maquette de W
https://www.cjoint.com/?3Kwma35qESk
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
21 nov. 2014 à 13:37
21 nov. 2014 à 13:37
Bonjour
pourquoi VBA?
Le pb se résout par des formules...
pourquoi VBA?
Le pb se résout par des formules...
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
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.
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.
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
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é.
Merci beaucoup, déjà avec cette solution, mon problème a bien avancé.
ccm81
Messages postés
10850
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 mars 2024
2 403
21 nov. 2014 à 15:17
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?
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?
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
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.
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.
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
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.
https://www.cjoint.com/?3Kwj7zk664Z
le but c'est de compter les cases vides par date.
un grand merci à tous.
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
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 :)
encore un grand merci :)
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
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:
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:
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
22 nov. 2014 à 13:33
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
????
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
????
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
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.
je vais refaire des test toute cette après midi et j'espère que ça marchera.
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
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.
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.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
Modifié par michel_m le 22/11/2014 à 18:03
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....
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....