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 :

Boucles do while next for...


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut Boucles do while next for...
    bonjour

    j'essaie de mettre en place une boucle pour faire exécuter une condition sur mon formulaire basé sur une table mais visiblement je n'y arrive pas. Je dois confondre les fonctions et patatra

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Open(Cancel As Integer)
    Do While CodeHp <> ""
    If Me.CouleurHp <> "" Or Me.CouleurHp = vbWhite Then
          Me.CouleurFOnd.BackColor = Me.CouleurHp.Value
           Else
           Me.CouleurFOnd.BackColor = vbWhite
         Exit Do
          End If
     
          Loop Until CodeHp = ""
     End Sub
    j'ai dû "looper" mais je sais pas où

    pourriez vous m'aider

    En fait je veux afficher sur un même formulaire les différentes couleurs choisies par chef de chantier (un récapitulatif)
    La couleur doit changer à chaque ligne en fonction du code couleur numérique indiquer par enregistrement

    Codehp (est le numéro auto du chef), couleur de fond (le coloris) couleur HP (son code numérique)

    merci à vous

    isa

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    Citation Envoyé par isabelle b Voir le message
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Open(Cancel As Integer)
    Do While CodeHp <> ""
    If Me.CouleurHp <> "" Or Me.CouleurHp = vbWhite Then
          Me.CouleurFOnd.BackColor = Me.CouleurHp.Value
           Else
           Me.CouleurFOnd.BackColor = vbWhite
         Exit Do
          End If
     
          Loop Until CodeHp = ""
     End Sub
    isa
    Je crois que c'est soit do while soit do loop, mais pas les deux. Ensuite codeHp c'est quoi et ça devient quand codeHp= ""???

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    merci de ta rapide réponse

    en fait c'est ce que j'explique dans mon titre, je mélange tout, mais je cherche un tuto pour m'expliquer les next, for, each, loop et pas loop, until etc.... bon ca c'est pour rire

    CodeHp, c'est l'identifiant de l'employé, c'est un num auto

    je veux lui dire que tant qu'il y a des employés, il doit afficher ligne par ligne les couleurs de chacun. C'est un récapitulatif de chaque couleur par employé qui s'affiche

    comme cela quand j'affecte une nouvelle couleur à un nouvel employé ca me permet de visualiser toutes les couleurs choisies pour les autres et ne pas choisir deux fois la même

    a la fin je veux dire, qu'il doit continuer tant que mon codehp n'est pas en numauto, en fait tant qu'il y a des employés créés dans ma table

    merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    C'est pas très clair... Il faudrait des précisions sur la table en question au niveau de la structure et surtout comment tu veux afficher ces informations? Si tu veux parcourir une table, tu es très mal parti. Si veux simplement afficher les informations d'une table dans un formulaire, tu es aussi très mal parti...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    ben oui j'en ai l'impression

    la table est constituée

    CodeHp = NumAuto
    Couleur de fond = texte
    CouleurHP = numérique
    NomHP = texte
    PrenomHp = Texte

    Dans la couleur de fond je récupére le coloris
    Dans CouleurHP je récupére le N° de la couleur

    Je voudrais afficher sur un même formulaire les différents coloris en fonction du N° de couleur du même enregistrement:

    CodeHp Nom & prénom coloris N° de la couleur
    1 truc chose sa couleur 250
    2 machin sa couleur 16652224


    et ainsi de suite

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    Désolé mais je ne comprends rien. Tu veux simplement afficher les données d'une table dans un formulaire? Si c'est ça pas besoin de programmer il suffit simplement de mettre ta table en source dans les propriétés du formulaire. Mais je ne pense pas qu'il s'agisse de cela. Je ne comprends pas la nuance que tu recherche, ou la particularité de la table...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    C'est la couleur qui doit changer pour chaque employé

    si je ne lui dit pas de passer en paramètre le numéro de la couleurhp dans la couleur de fond, la couleur de fond reste identique dans tous les enregistrements

    la couleur de fond est visuellement la couleur de la palette, la couleur hp est son code numérique

    je veux juste faire fonctionner ma boucle pour que pour chaque enregistrement elle passe le code numérique dans la couleur de fond pour qu'elle change visuellement mais en fait comme je maitrise mal le code elle reste sur mon premier employé et ne passe pas à l'enregistrement suivant

    j'ai juste besoin de la syntaxe de cette fonction pour quelle passe à l'enregistrement suivant pour quelle exécute mon code

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    Comprends rien. Il faudrait pouvoir voir le formulaire pour comprendre ce que tu veux faire.
    Imaginons que tu possède un formulaire où tes contrôles sont dans la section "Détail", il suffit d'insérer ton code en évènement formatage et cela marchera nickel. Mais là encore, je suis peut-être à côté de la plaque, car je n'ai pas le formulaire sous les yeux...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    eh bien non

    c'est un formulaire en continu

    quand on affecte une couleur de fond à un champ, il garde cette couleur quelque soit l'enregistrement

    ce que je veux faire, c'est modifier cette couleur pour chaque enregistrement en fonction de la couleur affectée à chaque employé

    comprends tu ?

  10. #10
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonsoir,

    La boucle ci-dessus ne change jamais d'employé me semble-t-il car je ne vois pas de movenext ou qqch comme ça

    Par ailleurs il n'est pas possible de faire en sorte que chaque ligne soit d'une couleur différente (ou alors pas simplement).

    Par contre il est possible simplement d'afficher la couleur de l'employé sélectionné dans une case de l'entete (ou du pied de page) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
    Me.CouleurFond.BackColor = CouleurHp  'couleur de la ligne courante
    Me.Refresh
    End Sub

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Bonsoir Nico

    je suis en train d'essayer ce code ci qui ne fonctionne pas vraiment mieux

    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
    Private Sub Form_Load()
    Dim i
       Dim bd As Database
       Dim dt1 As Recordset, sql
       Set bd = CurrentDb()
       sql = "SELECT *FROM  hp"
       Set dt1 = bd.OpenRecordset(sql)
     
       Do While Not dt1.EOF
     
     '  i = dt1!CodeHp
     '
         If dt1!CouleurHp <> "" Or dt1!CouleurHp = vbWhite Then
     
        'dt1.FindFirst dt1!CodeHp = Me.CodeHp
          Me.CodeHp.BackColor = dt1!CouleurHp.Value
           Else
           Me.CodeHp.BackColor = vbWhite
     
          End If
     'i = i + 1
        dt1.MoveNext
       Loop
     
       dt1.Close
    End Sub
    je cherche à faire coincider la ligne de mon recordse et la ligne de mon formulaire pour changer la couleur mais c'est pas gagné

    j'ai vu un code similaire dans un tuto du forum mais la on renome chaque etiquette dynamiquement

    je ne sais pas renomer un controle non plus

    je joins la base exemple c'est sur le F_ParametrerCouleurs de l'exemple agendaV23 (le dernier)

  12. #12
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Ton instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CodeHp.BackColor = dt1!CouleurHp.Value
    concerne toutes les lignes de la table, elle doit donc prendre globalement le couleur de l'enreigstrement courant, je me trompe ?

    Dans l'exemple donné ce sont des champs indépendants et non une liste déroulante liée à une table, ce qui change tout ! C'est un peu lourd à programmer mais c'est une solution si le nombre d'enregistrements est limité à qq dizaines... Il faut alors n'afficher que le nombre de cases qui correspond au nombre de lignes effectives, et gérer la hauteur de la fenêtre

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    J'ai compris....
    En fait le problème ne vient pas du code en lui même mais tout simplement de l'évènement qui lui est associé. En effet, le code ne s'exécute qu'une seule fois (au chargement). Hors vu que ton formulaire est de type continu, tu ne pourras pas avoir des contrôles de différentes couleur. Il aurait fallu associé le code à un évènement du style formatage comme pour les états Access. D'ailleurs, avec un état ça marchera, mais par contre avec un formulaire et l'évènement chargement, tu n'auras que la couleur du dernier enregistrement de ta boucle.
    A moins de trouver le bon évènement je ne pense pas que cela soit possible..............

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    oui c'est ca nico, mais je cherchais à faire comme dans l'exemple et à créer dynamiquement un nom à la couleurFond ou à une étiquette qui correspondrait par exemple à "Etiq" & CodeHp

    il faudrait que je puisse changer le nom du controle de mon formulaire, car comme je ne sais pas (comme dans l'exemple) à combien d'employés je peux avoir à faire dans l'avenir, je ne peux pas figer ces étiquettes

    d'autant que l'utilisateur peut supprimer ou générer d'autres employés (avec les sorties et entrées de personnel)

    sais tu comment faire pour changer le nom du controle en vba

    on pourrait faire un truc du style

    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
    Private Sub Form_Load()
    Dim i
       Dim bd As Database
       Dim dt1 As Recordset, sql
       Set bd = CurrentDb()
       sql = "SELECT *FROM  hp"
       Set dt1 = bd.OpenRecordset(sql)
     
       Do While Not dt1.EOF
     
          If dt1!CouleurHp <> "" Or dt1!CouleurHp = vbWhite Then
          MonControle.name = "Etiq" & Me.codehp
          Me."Etiq" & Me.codehp.BackColor = dt1!CouleurHp.Value
           Else
           Me."Etiq" & Me.codehp.BackColor = vbWhite
     
          End If
         dt1.MoveNext
       Loop
     
       dt1.Close
    End Sub
    en admettant que MonControle.Name soit une fonction

    tu connaitrais quelque chose comme ca ?

    Merci aussi pour ta réponse Psychopathe, mais as tu regarder l'exemple que j'ai joint. Si tu as une idée aussi je suis preneuse

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Points : 470
    Points
    470
    Par défaut
    L'exemple de l'agenda est plus complexe que ce que tu désire faire. Il ne s'agit pas d'étiquettes ou de zones de texte. Les cases sont crées au chargement mais avec pleins d'api Windows. Les cases sont dessinées à partir de coordonnées. Et cela donne l'impression d'avoir plusieurs contrôles. Si tu utilise des contrôles et un formulaire continus tu ne peux pas arriver à faire ce que tu veux justement. Il faudrait pour arriver à faire ce que tu veux, reprendre tout le code de l'agenda et l'adapter.
    Sinon essaie avec l'évènement Form_Current (activé). La couleur sera mise à jour pour les contrôles quand tu change d'enregistrements. Mais il faudrait passer en mode formulaire unique, ce que je pense n'est pas intéressant pour toi...

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    c'est exactement ce que j'ai fait pour le formulaire unique et ca marche très bien. En passant d'un emplyé à l'autre, tout va bien

    l'idée m'est venue d'afficher toutes les couleurs de tous les employés au moment de la création d'un nième employé, car on ne se souvient plus de toutes les couleurs déjà affectées

    c'est pourquoi je voulais pouvoir en sous formulaire visualiser toutes les couleurs des employés déjà enregistrés

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Combien de couleurs peux-tu avoir ?

    Peut-être que mon tuto sur la mise en forme conditionnelle illimitée (voir mes articles dans ma signature) pourrait te donner une piste.

    En effet, il y a des choses que je n'arrive pas trop à saisir.

    Philippe

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Bonjour Philippe

    Merci pour cette piste

    je n'arrive pas à l'ouvrir car il me manque le Microsoft office Xp web component, il ne se trouve pas dans ma liste de références. Peut être puis je le trouver autre part

    en fait je voudrais faire comme dans l'exemple de la base agenda v23 que j'ai joint

    Je peux avoir autant de couleurs que d'employés puisque j'attribue une couleur par employés (c'est pour visualiser leur présence sur un planning)

    visualiser dans un sous formulaire toutes les couleurs déjà attribuées aux employés simultanément

    est ce que avec l'exemple que tu propose, c'est la couleur enregistrée dans la table qui se mettra à côté du nom de l'employé ou un couleur défini lors de l'envoie des données ?

    merci

  19. #19
    Invité
    Invité(e)
    Par défaut
    Re

    Le composant est à télécharger (le lien est dans le tuto).

    Ce tuto n'est pas une explication d'un planning, mais un palliatif à la mise en forme conditionnelle limitée dans Access.

    On peut tout à fait adapter cela en prenant la valeur dans une table sans soucis.

    Ce n'était qu'une piste, pour les couleurs par contre pour les plannings que tu as pris sur le forum je ne sais pas si cela peut s'adapter (il faudrait voir avec l'auteur du planning).

    Philippe

  20. #20
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Dans agendav23, il y a 12 lignes max et c'est écrit en dur...

    De plus tous les controles sur les cases sont nécessairement dupliqués 12 fois

    Par contre l'instruction suivante utilise un controle sur un champ variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Do While (Me("Ligne" & i).Value = True)
       rst.AddNew
       rst!NCouleur = i
       rst!DescriptionRdv = Me("Description" & i).Value
       rst!Couleur = Me("Couleur" & i).BackColor
       rst.Update
       i = i + 1
       If i > 12 Then Exit Do
    Loop

Discussions similaires

  1. Boucle infinie While et for
    Par achrafkaran dans le forum C
    Réponses: 11
    Dernier message: 28/09/2013, 14h12
  2. Cacher des labels avec boucle Next-For
    Par hotsauce91 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2009, 11h01
  3. Boucle while ou for utilisée avec lame pour les mp3
    Par figarojuju dans le forum Linux
    Réponses: 6
    Dernier message: 09/09/2008, 20h51
  4. Problème condition d'arrêt boucles while et for
    Par Clairette29 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/06/2008, 11h51
  5. boucle while et for
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2006, 09h48

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