Transformation de dates en trimestre
Résolu/Fermé
Dianex87
Messages postés
79
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
8 août 2017
-
16 mars 2017 à 16:39
Dianex87 Messages postés 79 Date d'inscription jeudi 9 mars 2017 Statut Membre Dernière intervention 8 août 2017 - 23 mars 2017 à 09:35
Dianex87 Messages postés 79 Date d'inscription jeudi 9 mars 2017 Statut Membre Dernière intervention 8 août 2017 - 23 mars 2017 à 09:35
A voir également:
- Transformation de dates en trimestre
- Somme si entre deux dates ✓ - Forum Excel
- Transformer majuscule en minuscule word - Guide
- Transformer image en icone - Guide
- Calcul nombre de nuits entre deux dates excel ✓ - Forum Excel
- Excel compris entre deux dates ✓ - Forum Excel
3 réponses
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
Ambassadeur
1 551
Modifié par yg_be le 16/03/2017 à 17:31
Modifié par yg_be le 16/03/2017 à 17:31
bonjour, suggestion:
Dim mois As Integer Dim trimestre As integer For Each cellSolution In Range(Cells(3, 29), Cells(LastrowK, 29)) If IsDate(cellSolution.Value) Then mois = Month(cellSolution.Value) trimestre = 1 + (mois-1) \ 3 cellSolution.Offset(0, 1).Value = "Q" & trimestre & " " & Year(cellSolution.Value) Else cellSolution.Offset(0, 1).Value = cellSolution.Value End If Next cellSolution
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
16 mars 2017 à 17:27
16 mars 2017 à 17:27
Bonjour
Un petit exemple utilisant IsDate
Cdlmnt
Un petit exemple utilisant IsDate
Dim d, m As Long, plage As Range, cel As Range Set plage = Selection For Each cel In plage d = cel.Value If IsDate(d) Then m = Month(d) Select Case m Case Is <= 3: cel.Value = "Q1 " & Year(d) Case Is <= 6: cel.Value = "Q2 " & Year(d) Case Is <= 9: cel.Value = "Q3 " & Year(d) Case Else: cel.Value = "Q4 " & Year(d) End Select Else ' a toi de voir si d n'est pas une date End If Next cel
Cdlmnt
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
16 mars 2017 à 17:36
16 mars 2017 à 17:36
ou plus simple
Cdlmnt
Public Sub OK()
Dim d, m As Long, plage As Range, cel As Range
Set plage = Selection
For Each cel In plage
d = cel.Value
If IsDate(d) Then
m = Month(d)
cel.Value = "Q" & 1 + (m - 1) \ 3 & " " & Year(d)
Else
' a toi de voir si d n'est pas une date
End If
Next cel
End Sub
Cdlmnt
Dianex87
Messages postés
79
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
8 août 2017
>
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
17 mars 2017 à 15:08
17 mars 2017 à 15:08
Merci bcp de ta réponse,
Mais comme pour la 1ere reponse, j'ai un msg d'erreur ""Run time error 1004: Application-defined or object-defined error".
La ligne "Set plage = Range(Cells(3, 30), Cells(LastrowK, 30))" est surlignée en jaune.
Et en passant mon curseur dessus, je peux lire: "Range(Cells(3,30), Cells(Last...) =<Application defined or object-defined error>. Que signigfie cela ?
J'ai cru bien faire en changeant cel.Value = "Q1 " & Year(d) en cel.Offset(0, 1).Value = "Q1 " & Year(d) car c'est dans la cellule de droite, meme ligne, que je souhaite avoir mon format QX 201Y.
Sub autofill()
Dim d, m As Long, plage As Range, cel As Range
Set plage = Range(Cells(3, 30), Cells(LastrowK, 30))
For Each cel In plage
d = cel.Value
If IsDate(d) Then
m = Month(d)
Select Case m
Case Is <= 3: cel.Offset(0, 1).Value = "Q1 " & Year(d)
Case Is <= 6: cel.Offset(0, 1).Value = "Q2 " & Year(d)
Case Is <= 9: cel.Offset(0, 1).Value = "Q3 " & Year(d)
Case Else: cel.Offset(0, 1).Value = "Q4 " & Year(d)
End Select
Else
cel.Offset(0, 1).Value = cel.Value
End If
Next cel
End Sub
Une solution?
Merci encore!
Dianex87
Mais comme pour la 1ere reponse, j'ai un msg d'erreur ""Run time error 1004: Application-defined or object-defined error".
La ligne "Set plage = Range(Cells(3, 30), Cells(LastrowK, 30))" est surlignée en jaune.
Et en passant mon curseur dessus, je peux lire: "Range(Cells(3,30), Cells(Last...) =<Application defined or object-defined error>. Que signigfie cela ?
J'ai cru bien faire en changeant cel.Value = "Q1 " & Year(d) en cel.Offset(0, 1).Value = "Q1 " & Year(d) car c'est dans la cellule de droite, meme ligne, que je souhaite avoir mon format QX 201Y.
Sub autofill()
Dim d, m As Long, plage As Range, cel As Range
Set plage = Range(Cells(3, 30), Cells(LastrowK, 30))
For Each cel In plage
d = cel.Value
If IsDate(d) Then
m = Month(d)
Select Case m
Case Is <= 3: cel.Offset(0, 1).Value = "Q1 " & Year(d)
Case Is <= 6: cel.Offset(0, 1).Value = "Q2 " & Year(d)
Case Is <= 9: cel.Offset(0, 1).Value = "Q3 " & Year(d)
Case Else: cel.Offset(0, 1).Value = "Q4 " & Year(d)
End Select
Else
cel.Offset(0, 1).Value = cel.Value
End If
Next cel
End Sub
Une solution?
Merci encore!
Dianex87
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
Modifié par ccm81 le 17/03/2017 à 17:10
Modifié par ccm81 le 17/03/2017 à 17:10
Set plage = Range(Cells(3, 30), Cells(LastrowK, 30))
Ici LastrowK n'a pas été affectée donc vaut 0
RQ. Pour le n° du trimestre tu as plus simple que le Select Case au post 3
Cdlmnt
Ici LastrowK n'a pas été affectée donc vaut 0
RQ. Pour le n° du trimestre tu as plus simple que le Select Case au post 3
Cdlmnt
Dianex87
Messages postés
79
Date d'inscription
jeudi 9 mars 2017
Statut
Membre
Dernière intervention
8 août 2017
23 mars 2017 à 09:35
23 mars 2017 à 09:35
Merci ccm81 :)
Pour répondre à ta remarque, c'est juste que je comprends mieux écrit comme ça plus que la formule cel.Value = "Q" & 1 + (m - 1) \ 3 & " " & Year(d)
Thx again !
Pour répondre à ta remarque, c'est juste que je comprends mieux écrit comme ça plus que la formule cel.Value = "Q" & 1 + (m - 1) \ 3 & " " & Year(d)
Thx again !
17 mars 2017 à 14:25
Alors j'essaye et ça me retourne un msg d'erreur: "Run time error 1004: Application-defined or object-defined error".
La ligne "For each cellSolution ... est surlignée en jaune.
Et en passant mon curseur dessus, je peux lire: "Range(Cells(3,30), Cells(Last...) =<Application defined or object-defined error>. Que signigfie cela ?
Il y aussi "cellSolution.Offset(0, 1).Value ="<Object variable or with block variable not set">...
Sub autofill()
Dim mois As Integer
Dim trimestre As Integer
Dim cellSolution As Range
For Each cellSolution In Range(Cells(3, 30), Cells(LastrowK, 30))
If IsDate(cellSolution.Value) Then
mois = Month(cellSolution.Value)
trimestre = 1 + (mois - 1) \ 3
cellSolution.Offset(0, 1).Value = "Q" & trimestre & " " & Year(cellSolution.Value)
Else
cellSolution.Offset(0, 1).Value = cellSolution.Value
End If
Next cellSolution
End Sub
Merci bcp!!
Dianex87
Modifié par michel_m le 17/03/2017 à 15:10
dans dernière macro , tu n'as déterminé LastrowK
pour l calcul de trimestre fais une division "/" au lieu de "\"
ton calcul ne marche pour tous les mois
par ex=
Mai=5
1+(5-1)/3 ---> 2,3333 et mois est déclaré en integer (byte aurait suffi)---> erreur!
essaies
application.Int((mois+2)/3)
17 mars 2017 à 15:10
17 mars 2017 à 16:44
Un dernier extra dans ma macro please:
Et si je voudrais que, dans le cas où la valeur remplie en colonne 29 AD est "TBD", la macro renseigne en AE "Fix under development" saurais-tu stp comment le formuler ? J'ai tenté ceci:
Sub autofill()
Dim LastrowK As Long, LastrowAE As Long, LastrowAD As Long, cellSolution As Range
Dim mois As Byte
Dim trimestre As Byte
Dim IsDate As Date
Dim IsString As String
With Sheets("External TFU-TDO")
LastrowK = .Cells(.Rows.Count, "K").End(xlUp).Row
LastrowAE = .Cells(.Rows.Count, "AE").End(xlUp).Row
LastrowAD = .Cells(.Rows.Count, "AD").End(xlUp).Row
End With
' Autofill of solution availability in QuarterX 201Y way
' In any date formats, the macro will run QY 201X
' If the date is already in a Quarter format, no change
' If it is "N/A" no change
' If it is "Available" no change
' If it is "TBD", the macro will run "Fix under development"
For Each cellSolution In Range(Cells(3, 30), Cells(LastrowK, 30))
If IsDate(cellSolution.Value) Then
mois = Month(cellSolution.Value)
trimestre = 1 + (mois - 1) \ 3
cellSolution.Offset(0, 1).Value = "Q" & trimestre & " " & Year(cellSolution.Value)
Else
If IsString(cellSolution.Value) Then
Select Case cellSolution
Case Is = "TBD": cellSolution.Offset(0, 1) = "Fix under development"
End Select
End If
Else
cellSolution.Offset(0, 1).Value = cellSolution.Value
End If
Next cellSolution
End Sub
Qu'en penses-tu?
Un grand merci !
17 mars 2017 à 17:19