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. 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
    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. 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. 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. 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. 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. 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. 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. 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. 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 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. 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 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. 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