IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

boucle for next ? peut être mais comment


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut boucle for next ? peut être mais comment
    bonjour,
    je sors un calendrier d'utilisation jour/jour de materiel a partir d'une table "tdate" (datecle,datedebut,heuredebut,datefin,heurefin) et une requete avec expression me renvoyant 1 ou 0 a chaque 1/2h mais je suis oblige de rentrer mes periodes jour/jour. je voudrait entrer les periodes completes et en faire decoule par code une table "tdatedecompose"(cledatedecompose(N°),cledate(lien),DD,HD,DF,HF) et une requete "diffdate+1". L'idee du code,je suis novice, serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Function Macro1()
    '1er passage
        If (Forms!tdate![date debut] = Forms!tdate![date fin]) Then
     
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut]
            Forms!tdate!tdatedecompose.Form!HD = Forms!tdate![heure debut]
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date fin]
            Forms!tdate!tdatedecompose.Form!HF = Forms!tdate![heure fin]
     
            Else
     
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut]
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut]
            Forms!tdate!tdatedecompose.Form!HF = "23:59"
            End If
     
     
     '2eme passage
         If (Forms!tdate![date fin] = Forms!tdate![date debut] + 1) Then
     
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + 1
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + 1
            Forms!tdate!tdatedecompose.Form!HF = Forms!tdate![heure fin]
            Else
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + 1
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + 1
            Forms!tdate!tdatedecompose.Form!HF = "23:59"
           End If
     
      'neme passage  +1
         If (Forms!tdate![date fin] = Forms!tdate![date debut] + (n + 1)) Then
     
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + (n + 1)
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + (n + 1)
            Forms!tdate!tdatedecompose.Form!HF = Forms!tdate![heure fin]
            Else
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + (n + 1)
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + (n + 1)
            Forms!tdate!tdatedecompose.Form!HF = "23:59"
           End If
    ' l'idee serait de passer chaque enregistrement de tdate dans une boucle ou le compteur irait de 0 a (n+1)
    (n+1)etant diffdate+1
     
    End Function
    Je crois avoir tous les elements de la salade mais j'ai des soucis pour faire la sauce . je patauge dans l'utilisation des boucles et la facon d'utiliser le compteur.

    je vous remercie de prendre le temps de lire ma bafouille en esperant vous avoir donne toutes les informations

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Je n'ai pas vraiment compris ce que tu cherches à faire...
    Une piste pour écrire ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 to x
         .....
    Next i
    Ici tu incrémentes i à chaque tour de boucle jusqu'à une valeur x.

    Cette valeur x dans ton cas pourrais être le nombre d'enregistrement de ta table tdate.
    Il te faut donc utiliser les recordset et DAO.
    Je te renvoi vers ce tuto incontournable en la matière.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Le mieux serait de créer deux tables supports
    Une table des dates dans laquelle tu entres toutes les dates de la période
    madate
    01/01/2007
    ….
    31/12/12/2007
    une table des heures (enfin des demies heures)
    tranche hdeb hfin
    1 0 0,02083333
    2 0,02083333 0,04166667
    3 0,04166667 0,0625
    4 0,0625 0,08333333
    ,,, ,,,,
    48 0,97916667 1

    …………

    Si tu fais select tranche,madate+hdeb as dathdeb,madate+hfin as datehfin from tabdat, tabh ;
    Tu obtiendras toutes les combinaisons souhaitées
    Si tu prends ton horodatage d’utilisation et que tu le compares à >=datehdeb et <=datehfin tu obtiendras tous les enregistrements souhaités
    Elle est pas belle la vie ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut boucle for next ? peut être mais comment
    Bonjour a vous 2
    pour Random je ne veux justement plus rentrer toutes les dates de la periode
    pour kikof j'essaye la fameuse boucle dont j'envoie le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function Macro1()
    'Form_tdate.Texte27= difference des dates+1 c'est dire le nbre de fois que
    'je dois passer au max dans la boucle ainsi que la valeur max ajoutee a l'equation if
     
    ReDim x(Form_tdate.Texte27)
     
    For i = 0 To Form_tdate.Texte27
     
        If Form_tdate.date_fin = Form_tdate.date_debut + x Then
     
     
     
            Forms!tdate!tdatedecompose.Form!DD = Form_tdate.date_debut + x
            Forms!tdate!tdatedecompose.Form!HD = Form_tdate.heure_debut
            Forms!tdate!tdatedecompose.Form!DF = Form_tdate.date_fin
            Forms!tdate!tdatedecompose.Form!HF = Form_tdate.heure_fin
            Else
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + x
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + x
            Forms!tdate!tdatedecompose.Form!HF = "23:59"
            End If
     
    Next i
     
    End Function
    il ne reconnait pas ma valeur x qui va de 0 a une valeur qui varie sur chaque enr. de la table tdate. Pour une periode sur 2 jours la table tdate decompose devrait afficher 2 enr. Le 1er issu du 1er passage (FAUX) dans la boucle avec x=0. Le 2nd issu du 2eme passage (VRAI) avec x=1

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    C'est quoi ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim x(Form_tdate.Texte27)
    ??
    Il sert à rien.

    Enlève-le.

    par contre, modifie le critère d'arrêt de la boucle For :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 To Form_tdate.Texte27 - 1
    Si tu ne mets pas -1, tu vas boucler 3 fois au lieu de 2 (pour reprendre ton exemple).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut
    bon voici la derniere version du code mais j'ai toujours un souci

    EX1 tdate : du 20/06 a 10H au 20/06 a 12H
    tdatedecompose : du 20/06 a 10H au 20/06 a 12H
    Je devrais passer 1 fois dans la boucle (i=0),la condition est vrai l'instruction pour vrai devrait me donner un enregistrement

    EX2 tdate: du 20/06 a 10H au 21/06 a 12H
    tdatedecompose 1 : du 20/06 a 10H au 20/06 a 23H59
    tdatedecompose 2 : du 21/06 a 00H au 21/06 a 12H00
    je devrais donc passer 2 fois dans la boucle

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Dans la boucle, remplace x par i
    j'ai pas fait attention

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut
    J'ai fait une fausse manip
    merci du temps que vous m'accordez il m'est plus que precieux

    bon voici la derniere version du code mais j'ai toujours un souci

    EX1 tdate : du 20/06 a 10H au 20/06 a 12H
    tdatedecompose : du 20/06 a 10H au 20/06 a 12H
    Je devrais passer 1 fois dans la boucle (i=0),la condition est vrai l'instruction pour vrai devrait me donner un enregistrement

    EX2 tdate: du 20/06 a 10H au 21/06 a 12H
    tdatedecompose 1 : du 20/06 a 10H au 20/06 a 23H59
    tdatedecompose 2 : du 21/06 a 00H au 21/06 a 12H00
    je devrais donc passer 2 fois dans la boucle
    i=0 ,la condition est fausse mais doit tout de meme me donner un 1er enregistrement
    i=1, la condition est vrai et me donne mon second enr. et par exit for me fait sortir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Function Macro1()
    'Form_tdate.Texte27= difference des dates+1 c'est dire le nbre de fois que
    'je dois passer au max dans la boucle ainsi que la valeur max ajoutee a l'equation if
     
    For i = 0 To Form_tdate.Texte27
    If Form_tdate.date_fin = Form_tdate.date_debut + i Then
     
         Forms!tdate!tdatedecompose.Form!DD = Form_tdate.date_debut + i
            Forms!tdate!tdatedecompose.Form!HD = Form_tdate.heure_debut
            Forms!tdate!tdatedecompose.Form!DF = Form_tdate.date_fin
            Forms!tdate!tdatedecompose.Form!HF = Form_tdate.heure_fin
            Exit For
            Else
            Forms!tdate!tdatedecompose.Form!DD = Forms!tdate![date debut] + i
            Forms!tdate!tdatedecompose.Form!HD = "00:00"
            Forms!tdate!tdatedecompose.Form!DF = Forms!tdate![date debut] + i
            Forms!tdate!tdatedecompose.Form!HF = "23:59"
            End If
     
    Next i
     
    End Function

  9. #9
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Tu n'as pas besoin du exit for.
    Tu sortiras du For dès que i sera supérieur à Texte27
    Si tu dois n'avoir qu'un enregistrement tu ne passeras qu'une fois dans le If.

    Par contre ce serait bien que tu sois plus explicite sur ce qui fonctionne et ce qui ne fonctionne pas.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il n'était justemen pas question de saisir toutes les dates à chaque utilisation mais de se servir d'une table les contenant toutes
    c'est une technique puissante, manipulable en sql et réutilisable

    de plus la création d'une telle table à partir de données copiées d'excel prends
    quelques minutes
    mais c'est à toi de voir
    Elle est pas belle la vie ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut
    j'AI UN PEU honte puisque j'ai une grosse connerie au niveau de mes conditions et instructions. alors au lieu de te faire perdre ton temps je me replonge dans le pb serieusement

    merci bcp et a tres bientot des que je raconte moins de connerie

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 76
    Points
    76
    Par défaut
    Voila, j'ai fini par tout remettre dans l'ordre en sortant la 1ere condition de la boucle et en incorporant la creation d'un nouvel enregistrement a chaque instruction. Bon je ne sais pas si l'affaire est tres orthodoxe mais ca fonctionne . je vous remercie bcp pour l'aide et le soutien c'etait le1er code que j'entrais et les livres ne sont pas tjs tres clairs. a bientot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Function Macro1()
    If Form_tdate.date_fin = Form_tdate.date_debut Then
     
     
            Forms!tdatedecompose!cledateass = Forms!tdate![cledate]
            Forms!tdatedecompose!DD = Forms!tdate![date debut]
            Forms!tdatedecompose!HD = Forms!tdate![heure debut]
            Forms!tdatedecompose!DF = Forms!tdate![date fin]
            Forms!tdatedecompose!HF = Forms!tdate![heure fin]
    DoCmd.GoToRecord acForm, "tdatedecompose", acNewRec
     
             Else
             Forms!tdatedecompose!cledateass = Forms!tdate![cledate]
            Forms!tdatedecompose!DD = Forms!tdate![date debut]
            Forms!tdatedecompose!HD = Forms!tdate![heure debut]
            Forms!tdatedecompose!DF = Forms!tdate![date debut]
            Forms!tdatedecompose!HF = "23:59"
     DoCmd.GoToRecord acForm, "tdatedecompose", acNewRec
            End If
     
    For i = 1 To Form_tdate.Texte27
    If Form_tdate.date_fin = Form_tdate.date_debut + i Then
     
          Forms!tdatedecompose!cledateass = Forms!tdate![cledate]
         Forms!tdatedecompose!DD = Form_tdate.date_debut + i
            Forms!tdatedecompose!HD = "00:00"
            Forms!tdatedecompose!DF = Form_tdate.date_debut + i
            Forms!tdatedecompose!HF = Form_tdate.heure_fin
        DoCmd.GoToRecord acForm, "tdatedecompose", acNewRec
            Exit For
            Else
            Forms!tdatedecompose!cledateass = Forms!tdate![cledate]
            Forms!tdatedecompose!DD = Forms!tdate![date debut] + i
            Forms!tdatedecompose!HD = "00:00"
            Forms!tdatedecompose!DF = Forms!tdate![date debut] + i
            Forms!tdatedecompose!HF = "23:59"
       DoCmd.GoToRecord acForm, "tdatedecompose", acNewRec
            End If
     
    Next i
     
    End Function

Discussions similaires

  1. Boucle For Next
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2008, 19h39
  2. les boucles for..next
    Par dispa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/06/2007, 14h23
  3. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  4. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36
  5. Réponses: 3
    Dernier message: 03/11/2005, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo