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

Access Discussion :

Boucle If pour tester la valeur d'un champ


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Boucle If pour tester la valeur d'un champ
    Bonjour à Tous,
    Résumé de la situation :
    Dans un précédent fil, j'ai sollicité le forum pour m'aider à réaliser un code qui permettait de créer une table d'indices stats qui est une extraction d'une table générale "INSEE".

    Le code consiste à opérer un choix des indices composants l'extraction qui s'effectue via une table "Nomenclature" : catalogue des toutes les indices composants la table "INSSE" ;

    - de concatener les "IdBank" (Id des indices) dont le champ "Choix" de la table "Nomenclature" est égal à 1 (indices retenus).
    la concaténation s'opère dans le code sur la variable Choix1X comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], "
    - de rédiger le corps de la requête en vue la création de la nouvelle table et

    - créer l'extraction

    Modification du code recherchée :

    Tous les indices ne sont pas définitifs lors de leur parution.
    Pour signaler les indices provisoires, la table "Nomenclature" contient le champ "DélaisMaj" portant la mention "prov" et vide sinon.
    L'extraction doit être augmentée des champs portant la mention "PROV" et dont le nom de champ se compose de l'"IdBank" et terminé par la lettre "Q" (IdBankQ).
    Dans ce cas, la variable de concaténation s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], " & "[" & res.Fields(0).Value & "Q], "
    Ci-dessous le code complet qui stope à la ligne :

    If Nomenclature.DélaisMaj.Value = "PROV" Then

    Par avance merci à Tous de votre colaboration


    Thierry

    Bd dans le lien : http://www.developpez.net/forums/d11...tionnes-table/

    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
    Sub xutil()
     
    Dim Choix1X As String 'recoit la concaténation des indices choisis
    Dim res As Recordset
    Dim SQL As String
    Dim QRY As String 'rédaction de la requête complète finale
    Dim NTA As String 'Input box
     
    'Selectionne et concatène les 1X choisis
    SQL = "SELECT Nomenclature.IdBANK FROM Nomenclature WHERE (((Nomenclature.Choix)=1));"
    'Concatene les différents enregistrement
    Set res = CurrentDb.OpenRecordset(SQL)
    While Not res.EOF
    If Nomenclature.DélaisMaj.Value = "PROV" Then
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], " & "[" & res.Fields(0).Value & "Q], "
    Else
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], "
    End If
    res.MoveNext
    Wend
    'Enleve la dernière ","
    Choix1X = Left(Choix1X, Len(Choix1X) - 2)
    'rédaction de la requête complète finale à destination d'une nouvelle table Test
     
    NTA = InputBox("Saisie du nom de la table", "Création Table")
     
    If NTA <> "" Then
    QRY = "SELECT AnnéeMois, " & Choix1X & " INTO " & NTA & " FROM INSEE;"
    End If
    'Exécution de la requête
    DoCmd.RunSQL QRY
    'libere la mémoire
    Set res = Nothing
     
    End Sub

  2. #2
    Membre actif
    Homme Profil pro
    Chercheur
    Inscrit en
    Juin 2011
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 162
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Je vois que vous planchez tjrs sur le même code !

    En première lecture il manque l'appel au recordset, à savoir indiquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If res.Nomenclature.DélaisMaj.Value = "PROV" Then
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], " & "[" & res.Fields(0).Value & "Q], "
    Else
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], "
    End If
    Bcdt

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Oui fbtsra,
    je planche encore mais ma religion c'est le travail et je ne me fixe aucune limite dans la quête "du code parfait"...

    Ta solution n'a pas fonctionné.
    J'ai utilisé une autre voie.

    J'ai créé la requête "ChoixIn10" :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IIf([DélaisMaj] Like "prov","[" & [IdBANK] & "], [" & [IdBANK] & "Q]","[" & [IdBANK] & "]") AS Id_BANK, Nomenclature.Choix
    FROM Nomenclature
    WHERE (((Nomenclature.Choix)=1));
    (que j'ai tenté d'intégrer directement dans le code VBA mais sans succès) et

    j'ai donc adapté mon code en conséquence :

    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
    Sub xutil()
     
    Dim Choix1X As String 'recoit la concaténation des indices choisis
    Dim res As Recordset
    Dim SQL As String
    Dim QRY As String 'rédaction de la requête complète finale
    Dim NTA As String 'Input box
     
    'Selectionne et concatène les 1X choisis
    SQL = "SELECT ChoixIn10.Id_BANK FROM ChoixIn10;"
    'Concatene les différents enregistrements
    Set res = CurrentDb.OpenRecordset(SQL)
    While Not res.EOF
    Choix1X = Choix1X & res.Fields(0).Value & ", "
    res.MoveNext
    Wend
    'Enleve la dernière ","
    Choix1X = Left(Choix1X, Len(Choix1X) - 2)
    'rédaction de la requête complète finale à destination d'une nouvelle table nommée via l'InputBox (NTA) ci-après :
     
    NTA = InputBox("Saisie du nom de la table", "Création Table")
     
    If NTA <> "" Then
    QRY = "SELECT AnnéeMois, " & Choix1X & " INTO " & NTA & " FROM INSEE;"
    End If
    'Exécution de la requête
    DoCmd.RunSQL QRY
    'libere la mémoire
    Set res = Nothing
     
    End Sub
    Merci
    :.

  4. #4
    Membre actif
    Homme Profil pro
    Chercheur
    Inscrit en
    Juin 2011
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2011
    Messages : 162
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    En effet à la relecture ma proposition ne pouvait pas fonctionner : la requête SQL ne récupère pas le champ DélaisMaj. Il faudrait donc l'ajouter à la requête et modifier mon code selon suivant pour que cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If res.DélaisMaj.Value = "PROV" Then
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], " & "[" & res.Fields(0).Value & "Q], "
    Else
    Choix1X = Choix1X & "[" & res.Fields(0).Value & "], "
    End If
    Mais enfin, si ca fonctionne autrement ...

    Bcdt

Discussions similaires

  1. [MooTools] Boucle while pour tester existence element
    Par Soundboy39 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 11/10/2013, 10h01
  2. Fonction find pour tester les valeurs de 2 fichiers
    Par Luiza dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/12/2012, 22h09
  3. commande unix pour tester 2 valeurs
    Par adiloos98 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 30/05/2008, 10h20
  4. Tester la valeur d'un champ pour éviter options "has no properties"
    Par lodan dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 27/03/2007, 08h47

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