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 :

Faire une boucle en VBA possible? et tester la valeur des champs


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Faire une boucle en VBA possible? et tester la valeur des champs
    Bonjour,

    Pour avancer dans ma base de données j'aurai aimé savoir comment créer une boucle en VBA ? et tester la valeur de mes champs.

    Lorsque je lance la compil le script bloque à select Case (sur ligne en jaune).
    Je voudrais parcourir mes champs de C52 à C1 et envoyer une valeur dans un champs nomé variation 1 ou 2 ou 3 (voir ci-dessous) merci de votre aide



    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
    Private Sub Form_BeforeUpdate(Cancel As Integer)
     For i = 52 To 1 Step -1    
       Select Case Nz(Me("C" & CStr(i)), "")  'teste la valeur du champ C52, C51, ... Jusqu'a C1
      Case "RAS"
       Me("variation") = 1   
       Exit For                 'sortie de la boucle, les autres champs ne sont pas testés
      Case "CC"
       Me("variation") = 2
       Exit For
      Case "X"
       Me("variation") = 3
       Exit For
      End Select
     Next i
    End Sub

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Quel est le message d'erreur du compilateur ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Code VBA
    Message : Erreur d'execution 3164 le champ ne peut être mis à jour

    (Voulez-vous la pièce jointe ? )

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Non merci pour la pièce jointe.

    Peux tu confirmer que c'est sur la ligne 3 que l'erreur se produit car je ne vois pas de cause évidente à cela.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Erreur d'execution 3164 le champ ne peut être mis à jour
    Je viens de relancer actuellement quand j'inscris par exemple la valeur "CC" dans le champ C2 de mon formulaire la ligne VBA --> Me("variation") = 2 et en jaune

    Message : Erreur d'execution 3164 le champ ne peut être mis à jour

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK, cela a plus de sens.

    Peux-tu modifier le champ [variation] à la main, c-à-d sans passer par le code, dans ton formulaire ?
    Si non, peux-tu le modifier à la main dans la table ou la requête qui alliemente ton formulaire ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut faire une boucle
    Dans mon


    1-/ Peux-tu modifier le champ [variation] à la main, c-à-d sans passer par le code, dans ton formulaire ? -->J'ai essayé de le modifier on ne peut pas il reste figée




    2-/ Si non, peux-tu le modifier à la main dans la table ou la requête qui alliemente ton formulaire ? --> Dans ma table pas modifiable, par contre comme je disais ma requête est modifiable mais limité de C52 à C49 mais pas jusqu'a C1 c pour cela que je voudrais passer en VBA pour faire la boucle de C52à C1 voici ma requête limité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variation: PremVrai([C52]="RAS";"1";[C52]="CC";"2";[C52]="X";"3";[C51]="RAS";"1";[C51]="CC";"2";[C51]="X";"3";[C50]="RAS";"1";[C50]="CC";"2";[C50]="X";"3";[C49]="RAS";"1";[C49]="CC";"2";[C49]="X";"3")

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Si tu ne peux pas le modifier à la main dans la source de données à priori tu ne pourras pas le modifier par du code.

    Est-ce que Variation est dans une table quelque part ou sert-il seulement à l'affichage ?

    S'il sert seulement à l'affichage on doit pouvoir faire le travail dans la requête qui allimente le formulaire.

    Dans cette idée, as-tu une clef primaire qui te permettes d'identifier de manière unique tes enregistrements ?

    Si il est dans une table on peut essayer d'aller modifier la table mais cela n'est pas forcément possible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Comment faire j'écoute vos conseils
    OK Merci

    1-/ Variation sert seulement à l'affichage c'est le but.

    2-/ Oui c'est exactement cela sert seulement à l'affichage on doit pouvoir faire le travail dans la requête qui allimente le formulaire.

    OUI j'ai une clef primaire qui te permettes d'identifier de manière unique les enregistrements ?

    je vous écoutes comment faire ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Comment simplifier la 2 ème requête SQL ?
    Bonjour,

    Effectivement on doit pouvoir faire le travail dans la requête qui allimente le formulaire. Comment simplifier la 2 ème requête SQL pour la faire fonctionner ?

    Pour cela 2 requêtes :

    1-/ Celle qui fonctionne très bien de C52 à C49:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT Table_planification.N°, Table_planification.Etape1, Table_planification.Etape2, Table_planification.Etape3, Table_planification.Etape4, Table_planification.Etape5, Table_planification.Etape6, Table_planification.Etape7, Table_planification.Etape8,
     Table_planification.C1, Table_planification.C2, Table_planification.C3, Table_planification.C4, Table_planification.C5, Table_planification.C6, 
     Table_planification.C7, Table_planification.C8, Table_planification.C9, Table_planification.C10, Table_planification.C11, Table_planification.C12, 
     Table_planification.C13, Table_planification.C14, Table_planification.C15, Table_planification.C16, Table_planification.C17, Table_planification.C18, 
     Table_planification.C19, Table_planification.C20, Table_planification.C21, Table_planification.C22, Table_planification.C23, Table_planification.C24, 
     Table_planification.C25, Table_planification.C26, Table_planification.C27, Table_planification.C28, Table_planification.C29, Table_planification.C30, 
     Table_planification.C31, Table_planification.C32, Table_planification.C33, Table_planification.C34, Table_planification.C35, Table_planification.C36,
     Table_planification.C37, Table_planification.C38, Table_planification.C39, Table_planification.C40, Table_planification.C41, Table_planification.C42, 
     Table_planification.C43, Table_planification.C44, Table_planification.C45, Table_planification.C46, Table_planification.C47, Table_planification.C48, 
     Table_planification.C49, Table_planification.C50, Table_planification.C51, Table_planification.C52,
     
     Switch([C52]="RAS","1",[C52]="CC","2",[C52]="X","3",[C51]="RAS","1",[C51]="CC","2",[C51]="X","3",[C50]="RAS","1",[C50]="CC","2",[C50]="X","3",[C49]="RAS","1",[C49]="CC","2",[C49]="X","3") AS Variation
    FROM Table_planification;
    2-/ Celle qui bloque après C49, je voudrais que la 2 ème requête fonctionne comme la première des champs C52 à C1 (le pb c'est au niveau du switch après C49 je n'arrive pas à la simplifier)

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    SELECT Table_planification.N°, Table_planification.Etape1, Table_planification.Etape2, Table_planification.Etape3, Table_planification.Etape4, Table_planification.Etape5, Table_planification.Etape6, Table_planification.Etape7, Table_planification.Etape8,
     Table_planification.C1, Table_planification.C2, Table_planification.C3, Table_planification.C4, Table_planification.C5, Table_planification.C6, 
     Table_planification.C7, Table_planification.C8, Table_planification.C9, Table_planification.C10, Table_planification.C11, Table_planification.C12, 
     Table_planification.C13, Table_planification.C14, Table_planification.C15, Table_planification.C16, Table_planification.C17, Table_planification.C18, 
     Table_planification.C19, Table_planification.C20, Table_planification.C21, Table_planification.C22, Table_planification.C23, Table_planification.C24, 
     Table_planification.C25, Table_planification.C26, Table_planification.C27, Table_planification.C28, Table_planification.C29, Table_planification.C30, 
     Table_planification.C31, Table_planification.C32, Table_planification.C33, Table_planification.C34, Table_planification.C35, Table_planification.C36,
     Table_planification.C37, Table_planification.C38, Table_planification.C39, Table_planification.C40, Table_planification.C41, Table_planification.C42, 
     Table_planification.C43, Table_planification.C44, Table_planification.C45, Table_planification.C46, Table_planification.C47, Table_planification.C48, 
     Table_planification.C49, Table_planification.C50, Table_planification.C51, Table_planification.C52,
     
     Switch([C52]="RAS","1",[C52]="CC","2",[C52]="X","3",
    [C51]="RAS","1",[C51]="CC","2",[C51]="X","3",
    [C50]="RAS","1",[C50]="CC","2",[C50]="X","3",
    [C49]="RAS","1",[C49]="CC","2",[C49]="X","3",
    [C48]="RAS","1",[C48]="CC","2",[C48]="X","3",
    [C47]="RAS","1",[C47]="CC","2",[C47]="X","3",
    [C46]="RAS","1",[C46]="CC","2",[C46]="X","3",
    [C45]="RAS","1",[C45]="CC","2",[C45]="X","3",
    [C44]="RAS","1",[C44]="CC","2",[C44]="X","3",
    [C43]="RAS","1",[C43]="CC","2",[C43]="X","3",
    [C42]="RAS","1",[C42]="CC","2",[C42]="X","3",
    [C41]="RAS","1",[C41]="CC","2",[C51]="X","3",
    [C40]="RAS","1",[C40]="CC","2",[C40]="X","3",
    [C39]="RAS","1",[C39]="CC","2",[C39]="X","3",
    [C38]="RAS","1",[C38]="CC","2",[C38]="X","3",
    [C37]="RAS","1",[C37]="CC","2",[C37]="X","3",
    [C36]="RAS","1",[C36]="CC","2",[C36]="X","3",
    [C35]="RAS","1",[C35]="CC","2",[C35]="X","3",
    [C34]="RAS","1",[C34]="CC","2",[C34]="X","3",
    [C33]="RAS","1",[C33]="CC","2",[C33]="X","3",
    [C32]="RAS","1",[C32]="CC","2",[C32]="X","3",
    [C31]="RAS","1",[C31]="CC","2",[C31]="X","3",
    [C30]="RAS","1",[C30]="CC","2",[C30]="X","3",
    [C29]="RAS","1",[C29]="CC","2",[C29]="X","3",
    [C28]="RAS","1",[C28]="CC","2",[C28]="X","3",
    [C27]="RAS","1",[C27]="CC","2",[C27]="X","3",
    [C26]="RAS","1",[C26]="CC","2",[C26]="X","3",
    [C25]="RAS","1",[C25]="CC","2",[C25]="X","3",
    [C24]="RAS","1",[C24]="CC","2",[C24]="X","3",
    [C23]="RAS","1",[C23]="CC","2",[C23]="X","3",
    [C22]="RAS","1",[C22]="CC","2",[C22]="X","3",
    [C21]="RAS","1",[C21]="CC","2",[C21]="X","3",
    [C20]="RAS","1",[C20]="CC","2",[C20]="X","3",
    [C19]="RAS","1",[C19]="CC","2",[C19]="X","3",
    [C18]="RAS","1",[C18]="CC","2",[C18]="X","3",
    [C17]="RAS","1",[C17]="CC","2",[C17]="X","3",
    [C16]="RAS","1",[C16]="CC","2",[C16]="X","3",
    [C15]="RAS","1",[C15]="CC","2",[C15]="X","3",
    [C14]="RAS","1",[C14]="CC","2",[C14]="X","3",
    [C13]="RAS","1",[C13]="CC","2",[C13]="X","3",
    [C12]="RAS","1",[C12]="CC","2",[C12]="X","3",
    [C11]="RAS","1",[C11]="CC","2",[C11]="X","3",
    [C10]="RAS","1",[C10]="CC","2",[C10]="X","3",
    [C9]="RAS","1",[C9]="CC","2",[C9]="X","3",
    [C8]="RAS","1",[C8]="CC","2",[C8]="X","3",
    [C7]="RAS","1",[C7]="CC","2",[C7]="X","3",
    [C6]="RAS","1",[C6]="CC","2",[C6]="X","3",
    [C5]="RAS","1",[C5]="CC","2",[C5]="X","3",
    [C4]="RAS","1",[C4]="CC","2",[C4]="X","3",
    [C3]="RAS","1",[C3]="CC","2",[C3]="X","3",
    [C2]="RAS","1",[C2]="CC","2",[C2]="X","3",
    [C1]="RAS","1",[C1]="CC","2",[C1]="X","3",
    ) AS Variation
     
    FROM Table_planification;

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    La solution qui me parait la plus facile serait de créer une table temporaire et de calculer la valeur des différents champs et de Variation par VBA.

    On peut pas faire une boucle sur les champs dans du SQL il faut donner la liste exhaustive.

    Le code pourrait ressembler à cela :

    Je suppose que TaTableResultat a les mêmes champs que la tables source + Variation

    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
     
    public Sub CalculerVariation()
       dim db as dao.database:set db=currentdb
       dim rDonnees as dao.recordset:set rDonnees=db.openrecordset("NomTaSource")
       application.execute("Delete * from TaTableResultat") 'Vide la table résultat
       dim rResultat as dao.recordset:set rResultat=db.openRecordset("NomTableResultat")
     
       dim f as dao.fields
     
       do while not rDonees.eof()
          rResulat.addnew
     
          'Recopie les données dans le resultat
          for each f in rDonnees.fields
             rResultat.fields(f.name)=f
          next f
     
          'Calcule Variation
          For i = 52 To 1 Step -1    
             Select Case Nz(rDonnees.fields("C" & CStr(i)), "")  'teste la valeur du champ C52, C51, ... Jusqu'a C1
               Case "RAS"
                  rResultat![Variation]= 1   
                  Exit For                 'sortie de la boucle, les autres champs ne sont pas testés
     
              Case "CC"
                  rResultat![Variation]= 2   
                  Exit Forsont   
     
              Case "X"
                  rResultat![Variation]= 3
                  Exit For 
     
              case else 'Démontre qu'on a étudié tous les cas possibles
                  'Ne rien faire 
     
             End Select
     
          Next i
     
          rResultat.update
          rDonnees.movenext
       loop
     
       rResultat.close:set rResultat=nothing
       rDonees.close:set rDonnees=nothing
       set db=nothing 
    end sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Erreur de compilation
    Bonjour j'ai un message

    Membre de methode ou de données introuvable le compilateur bloque à .Execute


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Execute ("Delete * from TaTableResultat") 'Vide la table résultat
    Pouvez-vous tester de votre côté, car j'ai créer une table temporaire je l'ai nomé par exemple "TaTableResultat" lorsque je lance la compil sa bloque à mon avis nous sommes pas loing merci pour votre grande aide

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    "Membre de methode ou de données introuvable" Le message est clair. Execute ne fait pas parti d'Application.

    Le premier reflexe que tu dois avoir c'est de cliquer sur Aide lorsque tu as un message. C'est formateur.
    Ensuite tu fais F1 sur le mot qui pose problème, dans ce cas il s'agit de la méthode Execute (c'est en toutes lettres dans le message). L'aide t'indiquera que cette méthode ne fait pas parti d'Application mais de Database (du moins dans ton cas).

    C'est pour cela qu'un copier/coller n'est jamais formateur, il te donne souvent une ligne de conduite générale au plus une trame de départ. Il ne doit jamais être pris comme la solution toute faite. Ce forum n'a pas cette vocation.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Debutant10 Voir le message
    Bonjour j'ai un message

    Membre de methode ou de données introuvable le compilateur bloque à .Execute


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Execute ("Delete * from TaTableResultat") 'Vide la table résultat
    Désolé j'ai fait celade mémoire et j'ai du mélanger avec autre chose. Dans l'immédiat met cette ligne en commentaire et vide la table à la main. Je t'invite aussi à changer le nom de la table qui n'a rien de significatif.

    Je vais tacher de te revenir avec la bonne syntaxe au pire tu peux mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.setWarning false
    docmd.runsql("Delete * form [TaTableResultat]")
    DoCmd.setWarning true
    qui va faire la même chose.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut mettre le resultat avec VBAd ans le champ variation
    Bonjour,

    Le résultat fonctionne dans le champ variation= 1 ou 2 ou 3 de C52à C49 mais pas jusqu'à C1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Switch([C52]="RAS","1",[C52]="CC","2",[C52]="X","3",[C51]="RAS","1",[C51]="CC","2",[C51]="X","3",[C50]="RAS","1",[C50]="CC","2",[C50]="X","3",[C49]="RAS","1",[C49]="CC","2",[C49]="X","3") AS Variation
    FROM Table_planification;
    J'aurai aimé savoir comment ajouter de C49 à C1 et j'aurai aimé savoir comment intégrer la variable lignes en VBA ? et tester la valeur de mes champs.
    Comment faire pour que cela fonctionne les champs de C52 à C1

    Le script bloque à select Case (sur ligne en jaune). Je n'arrive pas à avoir le résultat dans le champ varition pour les cas de C52 à C48
    Je voudrais parcourir mes champs de C52 à C1 et envoyer une valeur dans un champs nomé variation 1 ou 2 ou 3 (voir ci-dessous) merci de votre aide
    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
    'Private Sub Form_BeforeUpdate(Cancel As Integer)
      On Error GoTo erreur
     For i = 52 To 1 Step -1
      Select Case Nz(Me("C" & CStr(i)), "")
      Case "RAS"
       Me("variation") = 1
       Exit For
      Case "CC"
       Me("variation") = 2
       Exit For
      Case "X"
       Me("variation") = 3
       Exit For
      End Select
     Next i
    Exit Sub
    erreur:
     Stop
     Resume
    End Sub

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ton dernier post ressemble furrieusement au premier, tu n'as pas essayé le code que j'ai posté ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 460
    Points : 71
    Points
    71
    Par défaut Essayé avec la pièce jointe
    Bonjour,

    J'ai essayé le code du dernier post mais cela fonctionne pas. Pouvez vous essayé de votre côté avec la pièce jointe ?

    car j 'ai suivi à la lettre mais marche pas je ne sait ou sa bloque

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Je vais jetter un oeil ce soir.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  19. #19
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK voici un code qui fonctionne avec la BD que tu as postée.

    Dans tes données, la colonne C1 ne contient ni "RAS", ni "CC", ni "X" donc il ne se passe rien. C'est peut-être pourquoi ton Switch() ne marche pas non plus.

    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
    Option Compare Database
    Option Explicit
     
    Public Sub CalculerVariation()
    Dim db As DAO.Database: Set db = CurrentDb
    Dim rDonnees As DAO.Recordset: Set rDonnees = db.OpenRecordset("Table_planification")
    Dim i As Long
     
     
    Do While Not rDonnees.EOF()
     
        rDonnees.Edit
        'Calcule Variation
        For i = 52 To 1 Step -1
     
            Select Case Nz(rDonnees.Fields("C" & CStr(i)), "")  'teste la valeur du champ C52, C51, ... Jusqu'a C1
                Case "RAS"
                    rDonnees![Variation] = 1
                    Exit For                 'sortie de la boucle, les autres champs ne sont pas testés
     
                Case "CC"
                    rDonnees![Variation] = 2
                    Exit For
     
                Case "X"
                    rDonnees![Variation] = 3
                    Exit For
     
                Case Else 'Démontre qu'on a étudié tous les cas possibles
                'Ne rien faire
     
            End Select
     
        Next i
        rDonnees.Update
     
        rDonnees.MoveNext
    Loop
     
    rDonnees.Close: Set rDonnees = Nothing
    Set db = Nothing
    End Sub
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Au fait si tes Cx représentent des semaines saches qu'il peut y avoir 53 semaines par an pas seulement 52 (365 / 7 = 52.14).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. faire une boucle sous vba avec condition
    Par ons1402 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/03/2012, 17h16
  2. [AC-2003] Faire une boucle avec VBA
    Par Sympa66 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/06/2010, 13h08
  3. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04
  4. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48
  5. [servlet][tester la valeur des champs récupérés]
    Par maya5 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 10h06

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