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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    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 confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    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
    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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    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 confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    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 confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    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 confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    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

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