Excel / macro date à date
Résolu/Fermé
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
8 oct. 2009 à 11:12
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 13 oct. 2009 à 08:37
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 13 oct. 2009 à 08:37
A voir également:
- Excel / macro date à date
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Trier par date excel - Guide
- Liste déroulante excel - Guide
- Excel si date comprise entre ✓ - Forum Excel
9 réponses
m@rina
Messages postés
21919
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
26 mars 2025
11 413
9 oct. 2009 à 00:03
9 oct. 2009 à 00:03
Bonsoir,
Dans un premier temps, je vois que ces lignes :
sont devenues inutiles. En effet, auparavant tu parlais de semaine, et la variable "jour" déterminait les jours d'une semaine (weekday). Donc 6 et 7 étaient des jours de week end. Maintenant, ça n'a plus de sens.
Ensuite tu n'as pas recopié ce qu'il fallait recopier. Tu as pris la boucle y. Cette boucle servait à revenir en arrière. On n'en a plus besoin puisque tu vas de la date 1 (depose) à la date 2 (retour) :
J'ai testé rapidement et c'est bon.
Dans un premier temps, je vois que ces lignes :
If jour = 6 Or jour = 7 Then MsgBox "Ne pas choisir de samedi ou de dimanche" Exit Sub End If
sont devenues inutiles. En effet, auparavant tu parlais de semaine, et la variable "jour" déterminait les jours d'une semaine (weekday). Donc 6 et 7 étaient des jours de week end. Maintenant, ça n'a plus de sens.
Ensuite tu n'as pas recopié ce qu'il fallait recopier. Tu as pris la boucle y. Cette boucle servait à revenir en arrière. On n'en a plus besoin puisque tu vas de la date 1 (depose) à la date 2 (retour) :
jour = Day(depose) nbjours = retour - depose 'dans ton exemple ça fait 10 ActiveCell.Offset(0, jour).Value = depose For x = 1 To nbjours date_suite = ActiveCell.Offset(0, jour + x - 1).Value + 1 ActiveCell.Offset(0, jour + x).Value = date_suite Next x
J'ai testé rapidement et c'est bon.
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
9 oct. 2009 à 08:50
9 oct. 2009 à 08:50
Salut,
je vois que tu es fidèle au poste. .. . bon euuuh je dois surement etre debile lol mais ca ne marche pas pour moi . . .ça commence bien à datedepose et affiche bien 8 jours aujourd'hui, mais affiche les dates au mauvaise endroit et sans la mise en forme . . .de plus je voulais revenir en arrière pour ne pas avoir à gérer la mise en forme des weekends en macro (toutes les 5 cellule 2 cellule de couleur différentes) c'est pour celà que je voulais démarrer mes semaines au lundi pour faire plus simple niveau mise en forme . . .voici le code apres tes conseils ci dessus et le problème cité:
Dim datesuite As Date, depose, retour, x, y
depose = datedepose
retour = dateretour
jour = Day(depose)
nbjours = retour - depose
ActiveCell.Offset(0, jour).Value = depose
For x = 1 To nbjours :
datesuite = ActiveCell.Offset(0, jour + x - 1).Value + 1
ActiveCell.Offset(0, jour + x).Value = datesuite
Next x
With Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, nbjours))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 15
.NumberFormat = "ddd-dd/mm/yy"
.Font.Bold = True
End With
Unload Creasupp
End Sub
J'ai essayé de modifier plusieur foi mais rien à faire je dois mal m'y prendre je n'arrive pas à placer les date ou je veux et je n'ai plus la bonne mise en forme mais je viens de comprendre que cela vient du fait que les dates ne se place pas au bon endroit . .. donc la mise en forme se met bien là ou il faut et pour le bon nombre de jour mais les dates elle sont decalées de 8 cellule (soit la valeur de nbjours)
Merci pour ta patience . . .
je vois que tu es fidèle au poste. .. . bon euuuh je dois surement etre debile lol mais ca ne marche pas pour moi . . .ça commence bien à datedepose et affiche bien 8 jours aujourd'hui, mais affiche les dates au mauvaise endroit et sans la mise en forme . . .de plus je voulais revenir en arrière pour ne pas avoir à gérer la mise en forme des weekends en macro (toutes les 5 cellule 2 cellule de couleur différentes) c'est pour celà que je voulais démarrer mes semaines au lundi pour faire plus simple niveau mise en forme . . .voici le code apres tes conseils ci dessus et le problème cité:
Dim datesuite As Date, depose, retour, x, y
depose = datedepose
retour = dateretour
jour = Day(depose)
nbjours = retour - depose
ActiveCell.Offset(0, jour).Value = depose
For x = 1 To nbjours :
datesuite = ActiveCell.Offset(0, jour + x - 1).Value + 1
ActiveCell.Offset(0, jour + x).Value = datesuite
Next x
With Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, nbjours))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 15
.NumberFormat = "ddd-dd/mm/yy"
.Font.Bold = True
End With
Unload Creasupp
End Sub
J'ai essayé de modifier plusieur foi mais rien à faire je dois mal m'y prendre je n'arrive pas à placer les date ou je veux et je n'ai plus la bonne mise en forme mais je viens de comprendre que cela vient du fait que les dates ne se place pas au bon endroit . .. donc la mise en forme se met bien là ou il faut et pour le bon nombre de jour mais les dates elle sont decalées de 8 cellule (soit la valeur de nbjours)
Merci pour ta patience . . .
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
9 oct. 2009 à 09:17
9 oct. 2009 à 09:17
bon j'ai réussi à mettre la valeur datedepose dans la cellule de mon choix en changeant ça:
ActiveCell.Offset(0, jour).Value = depose
contre ça:
ActiveCell.Offset(0, 1).Value = depose
mais datesuite ne se met pas à la suite et crois moi je fais test sur test j'arrive à modifier certain truc mais jamais comme je veux j'arrive à ce qu'il s'affiche l'un à la suite des autres mais ce ne sont plus les bonnes dates ou alors les bonnes date mais pas ou je veux lol le VBA c'est bien mais c'est dur lol
ActiveCell.Offset(0, jour).Value = depose
contre ça:
ActiveCell.Offset(0, 1).Value = depose
mais datesuite ne se met pas à la suite et crois moi je fais test sur test j'arrive à modifier certain truc mais jamais comme je veux j'arrive à ce qu'il s'affiche l'un à la suite des autres mais ce ne sont plus les bonnes dates ou alors les bonnes date mais pas ou je veux lol le VBA c'est bien mais c'est dur lol
m@rina
Messages postés
21919
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
26 mars 2025
11 413
9 oct. 2009 à 09:33
9 oct. 2009 à 09:33
Bonjour,
Le code est bon pour aller d'une date à l'autre.
Maintenant, la cellule où démarre la date depose dépend de la cellule active puisque tu étais parti de là au début.
ActiveCell.Offset etc. part de la cellule active et décale la cellule en fonction du jour du mois.
Si la cellule active est par exemple A5, la cellule où se trouvera la première date sera en A5 + le jour du mois de la première date.
Si par exemple la date de départ est le 10 octobre, elle se mettra dans la 11e colonne.
Et tu vois bien, dans le code, que le formatage se fait à partir de la première cellule qui suit la cellule active : With Range(ActiveCell.Offset(0, 1)
Donc si tu veux commencer à formater sur la cellule où se trouve la première date, il faut remplacer le 1 par la variable jour.
Et si tu veux terminer à formater sur la cellule qui contient la date de retour, il faut remplacer la variable nbjours par jour + nbjours
Si tu veux formater différemment les samedis et dimanches, je pense qu'on peut le faire en fonction de la date... faut que je réfléchisse un peu plus...
m@rina
Le code est bon pour aller d'une date à l'autre.
Maintenant, la cellule où démarre la date depose dépend de la cellule active puisque tu étais parti de là au début.
ActiveCell.Offset etc. part de la cellule active et décale la cellule en fonction du jour du mois.
Si la cellule active est par exemple A5, la cellule où se trouvera la première date sera en A5 + le jour du mois de la première date.
Si par exemple la date de départ est le 10 octobre, elle se mettra dans la 11e colonne.
Et tu vois bien, dans le code, que le formatage se fait à partir de la première cellule qui suit la cellule active : With Range(ActiveCell.Offset(0, 1)
Donc si tu veux commencer à formater sur la cellule où se trouve la première date, il faut remplacer le 1 par la variable jour.
Et si tu veux terminer à formater sur la cellule qui contient la date de retour, il faut remplacer la variable nbjours par jour + nbjours
Si tu veux formater différemment les samedis et dimanches, je pense qu'on peut le faire en fonction de la date... faut que je réfléchisse un peu plus...
m@rina
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
9 oct. 2009 à 09:39
9 oct. 2009 à 09:39
ah ouai je comprend mieux mais je n'ai aucun moyen de pouvoir afficher les date à partir de A6 puis A7,A8 et ainsi de suite?
m@rina
Messages postés
21919
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
26 mars 2025
11 413
9 oct. 2009 à 10:17
9 oct. 2009 à 10:17
Tu pars de la cellule que tu veux, bien entendu. Mais dans ton premier post, tu avais mis toi même cette ActiveCell et tu demandais le décalage !
Pour partir d'une cellule fixe, c'est même plus simple :
Tu remarqueras que dans ce cas, on n'a plus besoin de la variable jour.
m@rina
Pour partir d'une cellule fixe, c'est même plus simple :
nbjours = retour - depose Range("A6").Value = depose For x = 1 To nbjours datesuite = Cells(6, x).Value + 1 Cells(6, x + 1).Value = datesuite Next x With Range(Cells(6, 1), Cells(6, nbjours + 1)) .Borders.LineStyle = xlContinuous .Interior.ColorIndex = 15 .NumberFormat = "ddd-dd/mm/yy" .Font.Bold = True End With
Tu remarqueras que dans ce cas, on n'a plus besoin de la variable jour.
m@rina
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
9 oct. 2009 à 11:19
9 oct. 2009 à 11:19
lol ce que tu me donne marche mais ce n'est pas une cellule fixe, j'ai une boucle pour la selection de ligne et euuh ça m'enerve par ce que j'essaye d'adapter les codes que tu me donne sur le mien et je n'arrive jamais à ce que je veux je m'y prend trop mal je change des code et n'arrive pas à obtenir ce que je veux, je te remt le code complet avec celui que tu viens d'envoyer modifier par mes soins pour passer par la boucle mais j'ai encore mal fait vu que ca ne marche pas.......
Private Sub crea_Click()
Dim a As Integer
Dim b As Long
b = numof_crea
a = 0
Do
a = a + 1
Loop Until Application.Cells(a, 1) = b
Cells(a, 1).Value = b
Cells(a, 2).Value = datedepose
Cells(a, 3).Value = dateretour
'Cells(a, 3).Select
Dim datesuite As Date, depose, retour, x
depose = datedepose
retour = dateretour
nbjours = retour - depose
Cells(a, 4).Value = depose
For x = 1 To nbjours
datesuite = Cells(a, x).Value + 1
Cells(a, x + 1).Value = datesuite
Next x
With Range(Cells(a, 1), Cells(a, nbjours + 1))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 15
.NumberFormat = "ddd-dd/mm/yy"
.Font.Bold = True
End With
Unload Creasupp
End Sub
en faite j'ai remplacer le 6 par le a de ma boucle les date se mette donc bien sur la ligne désignée mais cette fois elles commencent dans la colone A alors que je voudrai dans la colone D mais à une ligne qui peut varier....tu me comprend? désolé si je suis hasardeux dans mon avancement c'est que j'essaye d'y aller doucement et finalement je complique tout en tout cas merci merci beaucoup pour le coup de main
Private Sub crea_Click()
Dim a As Integer
Dim b As Long
b = numof_crea
a = 0
Do
a = a + 1
Loop Until Application.Cells(a, 1) = b
Cells(a, 1).Value = b
Cells(a, 2).Value = datedepose
Cells(a, 3).Value = dateretour
'Cells(a, 3).Select
Dim datesuite As Date, depose, retour, x
depose = datedepose
retour = dateretour
nbjours = retour - depose
Cells(a, 4).Value = depose
For x = 1 To nbjours
datesuite = Cells(a, x).Value + 1
Cells(a, x + 1).Value = datesuite
Next x
With Range(Cells(a, 1), Cells(a, nbjours + 1))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 15
.NumberFormat = "ddd-dd/mm/yy"
.Font.Bold = True
End With
Unload Creasupp
End Sub
en faite j'ai remplacer le 6 par le a de ma boucle les date se mette donc bien sur la ligne désignée mais cette fois elles commencent dans la colone A alors que je voudrai dans la colone D mais à une ligne qui peut varier....tu me comprend? désolé si je suis hasardeux dans mon avancement c'est que j'essaye d'y aller doucement et finalement je complique tout en tout cas merci merci beaucoup pour le coup de main
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
12 oct. 2009 à 08:35
12 oct. 2009 à 08:35
oups plus personne pour m'aider???
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
13 oct. 2009 à 08:37
13 oct. 2009 à 08:37
Bonjour,
je marque ce topic comme résolu mais la solution est ici:
https://forums.commentcamarche.net/forum/affich-14725118-excel-re-macro-date-a-date
Merci à tous
je marque ce topic comme résolu mais la solution est ici:
https://forums.commentcamarche.net/forum/affich-14725118-excel-re-macro-date-a-date
Merci à tous