EXCEL RE 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 - 12 oct. 2009 à 10:48
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 13 oct. 2009 à 13:37
Bonjour,

Je reposte mon problème n’ayant plus de réponse . . . je souhaite inscrire une suite de date dépendant de 2 DTPicker dans un userforme par exemple si mes DTPicker sont 18/09/2009 et 22/09/2009 je veux afficher les jours du 18 au 22 «(soit 4 date dans 4 cellules) et ceux à partir de la 4° cellule de la ligne sur laquelle s’arête une boucle avec comme variable a voici le premier code que j’ai eu grâce à m@rina sur ce topic là :

https://forums.commentcamarche.net/forum/affich-14673324-excel-macro-date-a-date#8

Code origine :

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

Ce code affiche bien les date désirée mais à partir d’une cellule fixe je l’ai modifié en essayant d’y adapter la variable de ma boucle cela donne ce code :

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

ActiveCell.Offset(0, 1) = depose

For x = Cells(a, 4) To nbjours
datesuite = Cells(a, x).Value + 1
Cells(a, x + 1).Value = datesuite
Next x

Là ça ne marche plus du tout je dois mal modifier mon code ou alors pas les bonnes choses. . . .

A l’aide je rame malgré plusieurs essais de modification :s


A voir également:

14 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 oct. 2009 à 13:27
je dirais que ton affaire n'est pas claire.... :-(

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
' tu parcours les cellules jusqu'à trouver une valeur de b
Cells(a, 2).Value = datedepose ' pourquoi l'écrire tu l'as trouvé
Cells(a, 3).Value = dateretour ' une date ou un variant
Cells(a, 3).Select ' on sélectionne la cellule

Dim datesuite As Date, depose, retour, x ' là je suis pas sur que ça marche dépose retoue et x sont des variant car non défini et tu devrais les mettre au début ... plus lisible

depose = datedepose ' il y a quoi dans dépose une date
retour = dateretour ' copie de variable

nbjours = retour - depose ' je veux bien

ActiveCell.Offset(0, 1) = depose

For x = Cells(a, 4) To nbjours ' tiens là c'est bizzard... pour x = valeur de la cellule (a,4) donc une date à un nombre de jour....datesuite = Cells(a, x).Value + 1
Cells(a, x + 1).Value = datesuite
Next x

je pense qu'il faut que tu expliques mieux.... pour avoir de l'aide.

A+
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 oct. 2009 à 13:56
je crois qu'il y a eu un bug dans le serveur.
je t'ai répondu mais je vois pas le message

je reprend.....


Dim a As Integer
Dim b As Long

b = numof_crea
a = 0
Do
a = a + 1
Loop Until Application.Cells(a, 1) = b
tu boucles jusqu'à ce que tu trouves la valeur...

Cells(a, 1).Value = b ' si tu a trouvé la valeur ...pourquoi l'écrire?Cells(a, 2).Value = datedepose ' là tu met une date
Cells(a, 3).Value = dateretour ' là une autre date
Cells(a, 3).Select '.... tu sélectionnes

Dim datesuite As Date, depose, retour, x ' ça c'est pas bien ... met le au début et écris sur 2 lignes
jesuis même pas sur que ça marche....

depose = datedepose ' une date
retour = dateretour ' une date
nbjours = retour - depose ( différence de date je veux bien)

ActiveCell.Offset(0, 1) = depose ' tu écris une date ou = datedépose

For x = Cells(a, 4) To nbjours ' pour x= une date à un nombre de jour ?????datesuite = Cells(a, x).Value + 1
Cells(a, x + 1).Value = datesuite
Next x



explique un peu ton code, ce n'est pas clair ( du moins pour moi).

A+
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
12 oct. 2009 à 14:14
ouai il y a eu un bug. .. .je vais te remettre le code en essayant de répondre à tes questions mais si tu va voir le topic dont j'ai mis l'adresse tu comprendra peut etre mieux.... mais je tente quand même de t'eclairer dans pas longtemps
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
12 oct. 2009 à 14:35
Je reprend :

j’ai un userform (crea) dans lequel j’ai 2 DTPicker (datedepose et dateretour),une combobox (numof_crea), dans les 3 premières colonnes j’ai 3 champs : Code pour Colonne « A » , Date depose « B », date retour « C »



1. Private Sub crea_Click()

2. Dim a As Integer
3. Dim b As Long
4. b = numof_crea
5. a = 0
6. Do
7. a = a + 1
8. Loop Until Application.Cells(a, 1) = b ‘ je cherche mon code dans colonne “a”

9. Cells(a, 1).Value = b ‘ cette ligne sert en faite à rien pour l’instant je pense
10. Cells(a, 2).Value = datedepose ‘ là j’inscrit la valeur de date depose dans 2° colo à la ligne trouvé par ma boucle

11. Cells(a, 3).Value = dateretour ‘ idem que ligne 10 mais pour dateretour

12. Cells(a, 3).Select ‘ je selectionne une cellule pour pouvoir jouer sur activecell.offset au besoin

13. Dim datesuite As Date, depose As Date, retour As Date, x As Integer, nbjours As Integer ‘ là je déclare mes variable que j’avais effectivement oublié de bien déclarer

14. depose = datedepose ‘ ca c’est pour avoir moins à écrire à chaque fois
15. retour = dateretour ‘ idem

16. nbjours = retour – depose ‘ je calcule le nombre de jour entre mes 2 dates
17. ActiveCell.Offset(0, 1) = depose ‘ j’affiche ma datedepose dans la première cellule à droite de celle sélectionnée précédemment (colo 4)

18. For x = 1 To nbjours ‘ là en faite je voudrai à partir de la cellule ou je vien d’inscrire depose afficher chaque jour calculés à la ligne 16

19. datesuite = Cells(a, x).Value + 1
20. Cells(a, x + 1).Value = datesuite
21. Next x

22. With Range(Cells(a, 1), Cells(a, nbjours + 1)) ‘ ici je formate les cellule ou une date s’est inscrite
23. .Borders.LineStyle = xlContinuous
24. .Interior.ColorIndex = 15
25. .NumberFormat = "ddd-dd/mm/yy"
26. .Font.Bold = True
27. End With

28. Unload Creasupp
29. End Sub




Est-ce plus clair pour toi ?
0

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
12 oct. 2009 à 14:40
ah oui et pour des code qui t'ont parus bizarre c'est par ce que je suis parti du code que m@rina m'a fait vendredi dernier et que j'ai tenté d'adapter et à force de faire des test euuuh ben je suis arrivé donc à cette mayonnaise d'où le For To d'une date à un entier ce qui ej le reconnai après réflexion ne peut pas du tout marcher lol
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 oct. 2009 à 15:42
je te propose ça


Sub test()



Dim a As Integer
Dim b As Long


Dim datesuite As Date
Dim depose As Date
Dim retour As Date
Dim x As Integer

'pour le test je force les variables
'***********************************

b = 4
datedepose = CDate(Format("18/09/2009", "dd/mm/yyyy"))
dateretour = CDate(Format("22/9/2009", "dd/mm/yyyy"))
'en A6 je mets 4
'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


depose = datedepose
retour = dateretour

nbjours = retour - depose ' j'ai 4

ActiveCell.Offset(0, 1) = depose

For x = 1 To nbjours
datesuite = Cells(a, x + 1).Value + 1 ' je te conseille de partir toujours de la même référrence
Cells(a, x + 4).Value = datesuite ' les dates sont en lignes...
Next x

End Sub
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
12 oct. 2009 à 16:14
re euuh que veux-tu dire par toujours utiliser la même référence?

voilà mon code après avoir ajouté le mit le tiens :

Private Sub crea_Click()

Dim a As Integer
Dim b As Long


Dim datesuite As Date
Dim depose As Date
Dim retour As Date
Dim x As Integer

'pour le test je force les variables
'***********************************

'b = 4
'datedepose = CDate(Format("18/09/2009", "dd/mm/yyyy"))
'dateretour = CDate(Format("22/9/2009", "dd/mm/yyyy"))
'en A6 je mets 4
'b = numof_crea
'****************************************

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 = codearticle
Cells(a, 3).Value = datedepose
Cells(a, 4).Value = dateretour
Cells(a, 4).Select


depose = datedepose
retour = dateretour

nbjours = retour - depose ' j'ai 4

ActiveCell.Offset(0, 1) = depose

For x = 1 To nbjours
datesuite = Cells(a, x + 1).Value + 1 ' je te conseille de partir toujours de la même référrence
Cells(a, x + 4).Value = datesuite ' les dates sont en lignes...
Next x

Unload Creasupp
End Sub


J'ai changé le forcage des variable j'espère ne pas m'etre trompé j'ai aussi juste ajouter une ligne de code car j'ai ajouté une colonne, donc là la macro se bloc sur la ligne datesuite dans le For To Next message= imcompatibilité de type .. . .


Merci pour le coup de main . . . .
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
12 oct. 2009 à 20:15
Private Sub crea_Click()

Dim a As Integer
Dim b As Long


Dim datesuite As Date
Dim depose As Date
Dim retour As Date
Dim x As Integer

'pour le test je force les variables
'***********************************

'b = 4
'datedepose = CDate(Format("18/09/2009", "dd/mm/yyyy"))
'dateretour = CDate(Format("22/9/2009", "dd/mm/yyyy"))
'en A6 je mets 4
'b = numof_crea
'****************************************
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 = codearticle
Cells(a, 3).Value = datedepose
Cells(a, 4).Value = dateretour
Cells(a, 4).Select


depose = datedepose
retour = dateretour

nbjours = retour - depose ' j'ai 4

ActiveCell.Offset(0, 1) = depose

For x = 1 To nbjours
datesuite = CDate(Cells(a, x + 4).Value) + 1 ' je te conseille de partir du début de la ligne Axx : sur cette ligne tu as écrit 5 infos et c'est cette dernière infos que tu récupères
Cells(a, x + 5).Value = datesuite ' les dates sont en lignes... donc ici x+5 pour avoir le dernier
Next x

Unload Creasupp
End Sub

tu testes et tu dis!
R
0
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:33
Salut,

Super je viens de tester ça marche nickel Merci beaucoup par contre j'y ai rajouté mon code de mise en forme des cellules de date et euuh ben j'arrive pas à l'adapter au tiens.....??? ça donne ça:

Private Sub crea_Click()

Dim a As Integer
Dim b As Long

Dim datesuite As Date
Dim depose As Date
Dim retour As Date
Dim x As Integer

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 = codearticle
Cells(a, 3).Value = datedepose
Cells(a, 4).Value = dateretour
Cells(a, 4).Select

depose = datedepose
retour = dateretour

nbjours = retour - depose

ActiveCell.Offset(0, 1) = depose

For x = 1 To nbjours
datesuite = CDate(Cells(a, x + 4).Value) + 1 ' je te conseille de partir du début de la ligne Axx : sur cette ligne tu as écrit 5 infos et c'est cette dernière infos que tu récupères
Cells(a, x + 5).Value = datesuite ' les dates sont en lignes... donc ici x+5 pour avoir le dernier
Next x

With Range(Cells(a, x + 4), Cells(a, nbjours + 1)) ' je sais que c'est sur cette ligne que je dois changé des valeurs ...mais lesquelles????.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 15
.NumberFormat = "ddd-dd/mm/yy"
.Font.Bold = True
End With

Unload Creasupp
End Sub


Merci encore trop cool
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
13 oct. 2009 à 10:20
With Range(Cells(a, x + 4), Cells(a, nbjours + 1))

le problème viens de là

quand tu passe dans cette boucle Qu'y-a-t-il dans X et dans nbjours

ajoute un espion pour suivre la valeur de tes variables

avec debogage ajouter un espion cela te renseignera sur x et nbjours
en voyant la valeur tu comprendras

cells(ligne,colonne) et tu as cells(a, x) donc a est la ligne et xla variable colonne

A+
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
13 oct. 2009 à 10:35
ok je viens de faire le debogage donc la valuer du x n'est pas bonne elle est de 8 au lieu de 5 et nbjours de 7 mais ne met en forme que 5 cellule??? Mais euuh je ne comprend pas ce que je dois changer pour donner les bonnes valeurs au variables....et euuh je ne fais pas d'erreur quand je met 2 variables en parenthèse pour cibler une cellule cela peut se faire au moin?
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
13 oct. 2009 à 12:01
Bon j'ai réussi à faire partir ma mise en forme de là ou je veux comme ceci:

With Range(Cells(a, 5), Cells(a, nbjours))

la valuer de nbjours est 7 mais seulement 3 case se mettent en forme si je met le + 1 4 bien entendu mais le but c'est qu'il determine lui meme de combien il doit incrementer.....????
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
13 oct. 2009 à 13:20
x=8 car en sortant de la boucle for précedente il est à 8
ton point de départ c'est la 5 eme colonne à laposition de ligne a

nbjours = 7
et toi ce que tu veux c'est qu'il répète la mise en forme 7 fois

tu fais
x=5

With Range(Cells(a, x ), Cells(a, nbjours + x + 1)) ' ici le +1 te fais la 13ème colonne
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
13 oct. 2009 à 13:37
Parfait en enlevant le +1 qui en faite ici rajoute 1 à 7 et donc est de trop lol mais super topic résolue 100%


Merci à toi Bidouilleu_R et à bientot peut etre car j'ai encore plein d'autres question à venir. . ..

MERCI BEAUCOUP
0