EXCEL RE MACRO DATE à DATE

Résolu
informatifien Messages postés 781 Statut Membre -  
informatifien Messages postés 781 Statut Membre -
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

--
MERCI A CCM à déclarer source d'intéret public . .. .. pensez à marquer vos topic résolus quand c'est le cas .. . . .
Configuration: asus P5V800 / P4 2,8 Ghz / 1,5 Go Windows XP FireFox / IE 7

14 réponses

  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  3. informatifien Messages postés 781 Statut Membre 92
     
    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
  4. informatifien Messages postés 781 Statut Membre 92
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. informatifien Messages postés 781 Statut Membre 92
     
    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
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  8. informatifien Messages postés 781 Statut Membre 92
     
    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
  9. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  10. informatifien Messages postés 781 Statut Membre 92
     
    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
  11. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  12. informatifien Messages postés 781 Statut Membre 92
     
    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
  13. informatifien Messages postés 781 Statut Membre 92
     
    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
  14. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  15. informatifien Messages postés 781 Statut Membre 92
     
    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