EXCEL RE MACRO DATE à DATE

Résolu
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. 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
    1. 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
      1. 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
        1. 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
          1. 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
            1. 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
              1. 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
                1. 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
                  1. 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
                    1. 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
                      1. 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
                        1. 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
                          1. 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
                            1. 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