Excel / macro date à date

[Résolu/Fermé]
Signaler
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
Bonjour,
Me revoilà toujours sur mon tableau avec outil controle DTPicker, grace aux réponse du topic suivant:

https://forums.commentcamarche.net/forum/affich-14591450-excel-outil-controle-calendrier

Maintenant mon DTPicker affiche bien la date du jour (merci m@rina) de plus ma macro affiche les jours de tout un mois entier selon la date du DTPicker nommé datedepose la macro fonctionnant bien pour cette fonction est celle çi:

Dim datesuite As Date, depose, x, y
depose = datedepose
nbjours = Day(DateSerial(Year(datedepose), Month(datedepose) + 1, 0))
jour = Weekday(depose, vbMonday)

If jour = 6 Or jour = 7 Then
MsgBox "Ne pas choisir de samedi ou de dimanche"
Exit Sub
End If

ActiveCell.Offset(0, jour).Value = depose

For x = jour + 1 To nbjours
datesuite = ActiveCell.Offset(0, x - 1).Value + 1
ActiveCell.Offset(0, x).Value = datesuite
Next x

For y = jour - 1 To 1 Step -1
datesuite = ActiveCell.Offset(0, y + 1).Value - 1
ActiveCell.Offset(0, y).Value = datesuite
Next y


là encore merci m@rina.

J'ai dans mon userform un 2° DTPicker nommé dateretour ce que je voudrai pouvoir faire c'est que seuls les jours compris entre les valeurs de datedepose et dateretour s'affiche dans mes cellules
pour celà j'ai suivi tes conseil m@rina du moins j'ai essayé et j'ai donc modifié la macro çi-dessu pour en faire caçi:

Dim datesuite As Date, depose, retour, x, y
depose = datedepose
retour = dateretour
jour = Day(depose)
nbjours = retour - depose

If jour = 6 Or jour = 7 Then
MsgBox "Ne pas choisir de samedi ou de dimanche"
Exit Sub
End If

ActiveCell.Offset(0, jour).Value = depose

For x = jour + 1 To nbjours
datesuite = ActiveCell.Offset(0, jour + x - 1).Value + 1
ActiveCell.Offset(0, jour + x).Value = datesuite
Next x

For y = jour - 1 To 1 Step -1
datesuite = ActiveCell.Offset(0, y + 1).Value - 1
ActiveCell.Offset(0, y).Value = datesuite
Next y


elle marchouille mais voilà la valeur de datedepose aujourd'hui est donc 08/10/2009 la macro devrait afficher dans mes cellules les dates du Lun 05/10 au Jeu 15/10 (valeur de dateretour) là elle affiche du Jeu 01/10 au Jeu 08/10 . . ..


J'éspère avoir été assez explicite. . . .et encore merci à m@rina pour sa participation

9 réponses

Messages postés
17237
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 septembre 2021
10 588
Bonsoir,

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.
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
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 . . .
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
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
Messages postés
17237
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 septembre 2021
10 588
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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
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?
Messages postés
17237
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 septembre 2021
10 588
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 :

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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
oups plus personne pour m'aider???
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
92
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