Macro - filtre et Calcul de date/heure
Bonjour,
J'ai un tableau excel 2007, contient une colonne " DATE/HEURE ", et cet colonne contient des valeurs comme " 01/07/2011 07:13 ", " 01/07/2011 07:19 ", " 01/07/2011 07:57 ", " 04/07/2011 15:50 "...etc.
je souhaite creer un macro qui fais un filtre dans mon tableau pour trier et grouper les dates par jours et calcule la difference entre le premier date et le dernier, j'explique encore :
le macro va creer une nouvelle valeur dans un nouvel cellule, cet valeur est egale à le MAX( de date) - le Min( de date)
exemple : [01/07/2011 07:57] - [01/07/2011 07:13] = 0:44 min
Merci pour vos aide et avances.
Tri et différence de dates en Excel VBA
Bonjour spy_shoooter,
1. Spécification : où trouver la source des données et où afficher le résultat cible ?
Citation:
Envoyé par
spy_shoooter
J'ai un tableau excel 2007, qui contient une colonne " DATE/HEURE "
Où ? Toujours indiquez par des constantes Excel VBA où trouver la source des données.
Ce n'est pas la valeur numérique du n° de rangée et du n° de colonne qui importe, c'est comment vous allez les nommer et quel est le commentaire associé.
Citation:
Envoyé par
spy_shoooter
créer une nouvelle valeur dans une nouvelle cellule, cette valeur est égale à le MAX( de date) - le Min( de date)
Idem. Où ? Il faut préciser par des constantes Excel VBA commentées où afficher le résultat cible de façon à faciliter la compréhension du problème et plus tard la relecture du code.
2. Maquette Excel VBA du tri et de la différence de dates
Ouvrir Excel. Une feuille vide apparaît.
Ouvrir le Visual Basic Editeur (VBE) en cliquant sur l'Excel menu "Outils" > "Macro" > "Visual Basic Editeur" (Alt+F11)
Cliquez sur le VBE menu "Insérer" > "Module".
Dans la fenêtre d'Edition de Module1, copier-coller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Option Explicit
Public Const rowDuration = 2 ' Target: maximal difference of dates
Public Const colDuration = 1
Public Const nbrDate = 4
Public Const rowDateStart = rowDuration + 1 ' Source: first date to be sorted
Public Const rowDateEnd = rowDateStart + nbrDate - 1 ' Last date to be sorted
Public Const colDate = 1
Sub SortDate()
Dim rngDate As Range, dateMax As Date, dateMin As Date, strNbrDay As String, nbrDay As Integer
Set rngDate = Range(Cells(rowDateStart, colDate), Cells(rowDateEnd, colDate))
rngDate.Sort Key1:=Cells(rowDateStart, colDate), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
dateMax = Cells(rowDateStart, colDate)
dateMin = Cells(rowDateEnd, colDate)
nbrDay = DateDiff("d", dateMin, dateMax)
strNbrDay = IIf(nbrDay > 0, CStr(nbrDay) + " jours ", "")
Cells(rowDuration, colDuration) = strNbrDay + Format(dateMax - dateMin, "HH:MM:SS")
End Sub |
3. Usage de SortDate()
La feuille Excel étant vide, mettre les quatre dates indiquées de A3 à A6.
Enlever l'espace blanc avant la date et après l'heure.
Dans la fenêtre d'Exécution immédiate (Ctlr+G) du VBE, copier-coller et valider par ENTER :
Le résultat attendu dans la feuille de calcul est en première colonne.
Sous l'en-tête "DATE/HEURE" en A1, on trouve la différence entre les dates extrêmes en A2
puis les dates triées dans l'ordre du plus récent au plus ancien toujours de A3 à A6 :
Code:
1 2 3 4 5 6
| DATE/HEURE
3 jours 08:37:00
04/07/2011 15:50
01/07/2011 07:57
01/07/2011 07:19
01/07/2011 07:13 |
4. Personnalisation des constantes pour s'adapter à votre contexte
Vous pouvez personnaliser le nombre de dates nbrDate ainsi que l'endroit où trouver les dates et où afficher le résultat en changeant les constantes.
Si vous voulez inverser l'ordre de tri, remplacez Order1:=xlDescending par Order1:=xlAscending puis inversez les bornes de rangées pour récupérer dateMax et dateMin.
5. L'enregistreur de macros comme modèle
Pour trouver par vous même l'instruction principal de tri, enregistrez avec l'enregistreur de macro les actions suivantes :
- Sélectionner les cellules A3 à A6
- Excel menu "Données" > "Tri". Cochez l'option [x] Pas d'en-tête de rangée.
Comparez le code généré par l'enregistreur de macro avec la maquette SortDate().
___________
Si la discussion est résolue, vous pouvez cliquer sur le bouton :resolu:
En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert http://www.developpez.net/forums/ima.../vote1left.gif ci-dessous.