Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2011, 13h10   #1
Invité de passage
 
Homme Thierry Bataille
Chargé d'affaire
Inscription : juin 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Thierry Bataille
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 : 1
Points : 1
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 :
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 :
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 :
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
tibat31520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h31   #2
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
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 : 150
Points : 231
Points : 231
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 :
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
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 17h26   #3
Invité de passage
 
Homme Thierry Bataille
Chargé d'affaire
Inscription : juin 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Thierry Bataille
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 : 1
Points : 1
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 :
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 :
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
:.
tibat31520 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 09h20   #4
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
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 : 150
Points : 231
Points : 231
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 :
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
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h01.


 
 
 
 
Partenaires

Hébergement Web