Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Boucle imbriquée dans une boucle Tableau

11 réponses
Avatar
Chevrot
Merci d'avance de m'aider à résoudre le problème suivant.

Je dispose d'une table "Doublet" comportant trois champs et 720 lignes,; je
souhaite effectuer dans une boucle des requêtes actions sur chacune de ces
720 lignes.

L'ue de ces requ^tes action est elle-même une boucle, sur laquelle Ze Titi
et Jessy Sempere m'ont déja bien aidé, mais je cale sur la boucle effectuée à
partir de la table "Doublet " et sur l'imbrication des deux boucles.

Merci par avance de m'aider. Pour info voila ce que j'ai concocté, mais cela
ne marche pas.

Sub Création_Ident_003_A()
Dim rs As DAO.Recordset
‘La table « Doublet » comporte 720 enregistrements et 3 colonnes : « Numéro
», « Prix 1 » et « Prix 2 »
Set rs = CurrentDb.OpenRecordset("[Doublet]", dbOpenDynaset)
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef
Set db = CurrentDb()
rs.MoveLast
rs.MoveFirst
While Not rs.EOF

‘Première Boucle pour la valeur de [Doublet].(Numéro] de 1 à 720
‘Création à partir de la requête action « Ident B1 » de la requête
création « Ident A2 » qui crée la: Table Batch 12 ADC : Table Batch 12 avec
tous les enregistrements pour lesquels le « Prix C 1 » de « Batch
12 » est égal au « Prix 1 » de « Doublet » pour l’enregistrement
[Doublet].[Numéro]=1 puis après MoveNext, l’enregistrement
[Doublet].[Numéro]=2, jusqu’à 720.
SQL = Left(db.QueryDefs("Ident B1").SQL, InStrRev(db.QueryDefs("Ident
B1").SQL, ";") - 1)
SQL = SQL & "WHERE([Batch 12].[Prix C 1] =" & [Doublet].[Prix 1]
Set rq = db.CreateQueryDef("Ident A1", SQL)

‘Création à partir de la requête action « Ident B2 » de la requête
création « Ident A2 » qui crée la Table Batch 12 ADA : Table Batch 12 avec
tous les enregistrements pour lesquels le « Prix C 2 de « Batch 12 » est égal
au « Prix 2 » de « Doublet » pour l’enregistrement [Doublet].[Numéro]=1 puis
après MoveNext, l’enregistrement [Doublet].[Numéro]=2, jusqu’à 720
SQL = Left(db.QueryDefs("Ident B2").SQL, InStrRev(db.QueryDefs("Ident
B2").SQL, ";") - 1)
SQL = SQL & "WHERE([Batch 12].[Prix C 2] =" & [Doublet].[Prix 2]
Set rq = db.CreateQueryDef("Ident A2", SQL)

'Exécution de la Requête Création “Ident A1 » : Création de
Batch120003AADC
DoCmd.OpenQuery "Ident A1", acViewNormal, acEdit
‘Diverses requêtes action de type DoCmd Open Query ……

‘Seconde Boucle
Dim db As DAO.Database
Dim SQL As String
Dim K As Integer
Dim rq As DAO.QueryDef
Set db = CurrentDb()
Dim KMax As Integer
KMax = DMax("[Numéro]", "[Batch 12 ADC]")
If KMax <> 0 Then
For K = 1 To DMax("[Numéro]", "[Batch 12 ADC]")
'Création de la requête de sélection dans Batch 12 ADC pour
Numéro = 1 à K
SQL = Left(db.QueryDefs("Ident 003 A 09").SQL,
InStrRev(db.QueryDefs("Ident 003 A 09").SQL, ";") - 1)
SQL = SQL & "WHERE[Batch 12 ADC].[Numéro] =" & K
Set rq = db.CreateQueryDef("Ident 003 A 09 A", SQL)
'Exécution de la requête création de Table
DoCmd.OpenQuery "Ident 003 A 09 A", acViewNormal, acEdit
'Exécution de la Requête Création “Ident A2 » : Création de
Batch120003AADA
DoCmd.OpenQuery "Ident A2", acViewNormal, acEdit
'Création de Batch12ADAX: 1 ou plusieurs enregistrements de
Batch 12 ADA avec CodeRegr identique
DoCmd.OpenQuery "Ident 003 A 12", acViewNormal, acEdit
‘Diverses requêtes action de type DoCmd Open Query ……
‘Suppression de la requête « Ident 003 A 09 A »
DoCmd.DeleteObject acQuery, "IdentActe 003 A 09 A"
Next K
Set rq = Nothing
Set db = Nothing
End If

rs.MoveNext
'Suppression des requêtes prix sur Batch 12
DoCmd.DeleteObject acQuery, " Ident A1"
DoCmd.DeleteObject acQuery, " Ident A2"

Wend
Set rq = Nothing
Set db = Nothing
rs.Close
Set rs = Nothing
End Sub


Chevrot

10 réponses

1 2
Avatar
ze Titi
Qu'est ce qui ne "marche" pas ? Messages ?
Il faut un espace avant les WHERE et après. D'autre part, dans les
WHERE, tu ouvres de parenthèses que tu ne fermes pas.

--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Chevrot
Bien noté et corrigé pour les parenthèses

Il apparaît un message:

Microsoft Visual Basic
Erreur de compilation
Nom externe non défini

Par ailleurs, dans la procédure le nom [Doublet] est Colorié en Bleu dans
l'instruction SQL = SQL & "WHERE [Batch 12].[Prix C 1] =" & [Doublet].[Prix
1]

Merci par avance

Chevrot


Qu'est ce qui ne "marche" pas ? Messages ?
Il faut un espace avant les WHERE et après. D'autre part, dans les
WHERE, tu ouvres de parenthèses que tu ne fermes pas.

--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info





Avatar
ze Titi
SQL=SQL & " WHERE [Batch 12].[Prix C 1]=" & rs![prix 1]

Ceci est valable à chaquer fois que ce type de code apparaît. Tu dois
faire référence au recordset ouvert sur la table Doublet, non à la
table directement.

Dans ton message
Bien noté et corrigé pour les parenthèses

Il apparaît un message:

Microsoft Visual Basic
Erreur de compilation
Nom externe non défini

Par ailleurs, dans la procédure le nom [Doublet] est Colorié en Bleu dans
l'instruction SQL = SQL & "WHERE [Batch 12].[Prix C 1] =" & [Doublet].[Prix
1]

Merci par avance

Chevrot


Qu'est ce qui ne "marche" pas ? Messages ?
Il faut un espace avant les WHERE et après. D'autre part, dans les
WHERE, tu ouvres de parenthèses que tu ne fermes pas.

--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info


Avatar
Chevrot
Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot


SQL=SQL & " WHERE [Batch 12].[Prix C 1]=" & rs![prix 1]

Ceci est valable à chaquer fois que ce type de code apparaît. Tu dois
faire référence au recordset ouvert sur la table Doublet, non à la
table directement.

Dans ton message
Bien noté et corrigé pour les parenthèses

Il apparaît un message:

Microsoft Visual Basic
Erreur de compilation
Nom externe non défini

Par ailleurs, dans la procédure le nom [Doublet] est Colorié en Bleu dans
l'instruction SQL = SQL & "WHERE [Batch 12].[Prix C 1] =" & [Doublet].[Prix
1]

Merci par avance

Chevrot


Qu'est ce qui ne "marche" pas ? Messages ?
Il faut un espace avant les WHERE et après. D'autre part, dans les
WHERE, tu ouvres de parenthèses que tu ne fermes pas.

--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info







Avatar
ze Titi
Ca signifie tout simplement que tu as déjà déclaré ces variables soit
dans le module soit dans la procédure en cours (ce qui est d'ailleurs
le cas si tu regardes bien ton code). Les variables se déclarent une
seule fois.

En ce jour exceptionnel du mercredi 04/04/2007, tu nous as très
généreusement gratifié du message suivant:

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde
boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot


SQL=SQL & " WHERE [Batch 12].[Prix C 1]=" & rs![prix 1]

Ceci est valable à chaquer fois que ce type de code apparaît. Tu dois
faire référence au recordset ouvert sur la table Doublet, non à la
table directement.

Dans ton message
Bien noté et corrigé pour les parenthèses

Il apparaît un message:

Microsoft Visual Basic
Erreur de compilation
Nom externe non défini

Par ailleurs, dans la procédure le nom [Doublet] est Colorié en Bleu dans
l'instruction SQL = SQL & "WHERE [Batch 12].[Prix C 1] =" & [Doublet].[Prix
1]

Merci par avance

Chevrot


Qu'est ce qui ne "marche" pas ? Messages ?
Il faut un espace avant les WHERE et après. D'autre part, dans les
WHERE, tu ouvres de parenthèses que tu ne fermes pas.

--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info






--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info




Avatar
Eric
Bonjour,

Enlèves toutes les déclarations en double dans la 2eme boucle:
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef

et le
Set db = CurrentDb()

voire les
Set rq = Nothing
Set db = Nothing
inscrits après le next k et avant le end if
sous réserve de n'avoir rien oublié.

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Chevrot
OK c'est fait et cela semble fonctionner. Merci

Le problème suivant est que lorsque je lance la procédure, elle butte sur la
valeur de Prix 1 dans le tableau "Doublet", avec le message suivant:

Erreur de syntaxe 'virgule' dans l'expression '[Batch 12].[Prix 1]'1,7'.

271,7 (format Euro) est la première valeur de [Prix 1] dans "Doublet"

Que faire?

Chevrot


Bonjour,

Enlèves toutes les déclarations en double dans la 2eme boucle:
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef

et le
Set db = CurrentDb()

voire les
Set rq = Nothing
Set db = Nothing
inscrits après le next k et avant le end if
sous réserve de n'avoir rien oublié.

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Pierre CFI [mvp]
.../...
en code, il faut un point pour les décimales pas une virgule

--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"Chevrot" a écrit dans le message de
news:
OK c'est fait et cela semble fonctionner. Merci

Le problème suivant est que lorsque je lance la procédure, elle butte sur
la
valeur de Prix 1 dans le tableau "Doublet", avec le message suivant:

Erreur de syntaxe 'virgule' dans l'expression '[Batch 12].[Prix 1]'1,7'.

271,7 (format Euro) est la première valeur de [Prix 1] dans "Doublet"

Que faire?

Chevrot


Bonjour,

Enlèves toutes les déclarations en double dans la 2eme boucle:
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef

et le
Set db = CurrentDb()

voire les
Set rq = Nothing
Set db = Nothing
inscrits après le next k et avant le end if
sous réserve de n'avoir rien oublié.

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde
boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la
ligne
suivante.

Que faire?

Chevrot




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Eric
re,

faire:
SQL=SQL & " WHERE [Batch 12].[Prix C 1]=" & Replace(rs![prix 1]",",".")

OK c'est fait et cela semble fonctionner. Merci

Le problème suivant est que lorsque je lance la procédure, elle butte sur la
valeur de Prix 1 dans le tableau "Doublet", avec le message suivant:

Erreur de syntaxe 'virgule' dans l'expression '[Batch 12].[Prix 1]'1,7'.

271,7 (format Euro) est la première valeur de [Prix 1] dans "Doublet"

Que faire?

Chevrot


Bonjour,

Enlèves toutes les déclarations en double dans la 2eme boucle:
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef

et le
Set db = CurrentDb()

voire les
Set rq = Nothing
Set db = Nothing
inscrits après le next k et avant le end if
sous réserve de n'avoir rien oublié.

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Chevrot
Un grand merci à tous; je suis triste de sabler le champagne tout seul, mais
vous êtes là virtuellement! il est très bon

Chevrot


re,

faire:
SQL=SQL & " WHERE [Batch 12].[Prix C 1]=" & Replace(rs![prix 1]",",".")

OK c'est fait et cela semble fonctionner. Merci

Le problème suivant est que lorsque je lance la procédure, elle butte sur la
valeur de Prix 1 dans le tableau "Doublet", avec le message suivant:

Erreur de syntaxe 'virgule' dans l'expression '[Batch 12].[Prix 1]'1,7'.

271,7 (format Euro) est la première valeur de [Prix 1] dans "Doublet"

Que faire?

Chevrot


Bonjour,

Enlèves toutes les déclarations en double dans la 2eme boucle:
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef

et le
Set db = CurrentDb()

voire les
Set rq = Nothing
Set db = Nothing
inscrits après le next k et avant le end if
sous réserve de n'avoir rien oublié.

Bien corrigé, merci.

Maintenant, je coince à la ligne suivante située en dessous de 'Seconde boucle

Dim db As DAO.Database

avec le même message:
Microsoft Visual Basic
Erreur de compilation
déclaration existante dans la portée en cours

Si je supprime cette ligne, il coince avec le même message dans la ligne
suivante.

Que faire?

Chevrot



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






1 2