Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 04/12/2011, 23h30   #1
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Par défaut Requete Sql sur une table temporaire pour dispatcher les informations dans les tables correspondantes

Bonjour,

Je cherche à effectuer des requetes sur une table temporaire qui contiendrait l import d'un fichier csv et qui en fonction de ce qu elle trouve dans le champ 1 envoie la ligne complete dans une table définie. Ce code serai englobé dans du vba.

Voici un bout de mon code

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
Sub TransfertAllCsvInDir()
 On Error GoTo Erreur
 Dim Fic As String
 Dim Nom_Tbl As String 
 
 Dossier = "C:\Documents and Settings\"
 Fic = Dir(Dossier & "*.CSV", vbNormal)
 
 
 
 Do While (Fic = "")
 
        'j'importe le fichier csv
         DoCmd.TransferText acLinkDelim, "spec import" , Tabledest , Dossier & Fic, True
 
         'j' ajoute les données dans la table temporaire
         DoCmd.RunSQL "INSERT INTO Tabledest ( Champ1, Champ2, Champ3,Champ4 )SELECT Champ1 AS Expr1, Champ2 AS Expr2, Champ3 AS Expr3, Champ4 AS Expr4 FROM [" & Nom_Tbl1 & "];"
 
        'je libère le fichier
        DoCmd.DeleteObect acTable, Nom_Tbl
 
     Fic = Dir
 Loop
 
Exit Sub
Erreur:
 
 End Sub
Est ce que quelqu'un aurait une idée?
Merci
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 12h17   #2
Membre éclairé
 
Homme Michel
Développeur informatique
Inscription : février 2008
Messages : 263
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : février 2008
Messages : 263
Points : 309
Points : 309
J'ai pas vraiment testé, mais cela pourrait t'inspirer
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 test()
    Dim Fic As String
    Dim Dossier As String
    Dim TableDest As String
    Dim StrSql As String
    Dim rs As Recordset
 
    Dossier = "C:\Documents and Settings\"
    Fic = "Monfichier.CSV"
    TableDest = "Export"
 
    'Import du Fichier CSV dans la table Import
    DoCmd.TransferText acLinkDelim, "spec import", "Import", Dossier & Fic, True
 
    'Lecture de chaque ligne de la table import
    Set rs = New ADODB.Recordset
    StrSql = "SELECT Champ1, Champ2, Champ3, Champ4 FROM Import"
    rs.Open StrSql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    If Not rs.EOF AND Not rs.BOF Then 'il existe au moins un enregistrement
        With rs
            Do While Not .EOF AND Not .BOF
                If !Champ1 = "TOTO" Then 'Là il faut placer la condition permettant
                    'l'insertion
                    StrSql = "INSERT INTO Tabledest ( Champ1, Champ2, Champ3, Champ4 )"
                    StrSql = StrSql & " SELECT " & !Champ1 & "," & !champ2 & "," & !Champ3 & "," & !Champ4
                    StrSql = StrSql & " FROM [Import]"
                    DoCmd.RunSQL StrSql, 0
                End If
                .MoveNext
            Loop
        End With
    End If
    rs.Close
    Set rs = Nothing
End Sub
Michel
Orion34080 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 17h37   #3
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Merci de ta réponse!

J'ai adapté le code et testé mais j'ai une erreur au niveau de la ligne

Code :
Set rs = New ADODB.Recordset
L'erreur c'est : type defini par l'utilisateur non definie

J'ai rajouté ADODB à la definition du recordset car tu ne l avais pas mis, mais ca ne marche pas! Je ne sais pas si j'ai bien fait.

Code :
Dim rs As ADODB.Recordset
Mon code en intégralite :

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
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
67
Sub SearchReadImportCSV()
 
    Dim Fic As String
    Dim Dossier As String
    Dim TableDest As String
    Dim StrSql As String
    Dim rs As ADODB.Recordset
    Dim Nom_Tbl, Nom_Tbl1, Nom_Tbl2, Nom_Tbl3, Nom_Tbl4 As String
 
'obtient le premier fichier ou répertoire qui est dans "C:\"
 Dossier = "C:\Documents and Settings\"
 Fic = Dir(Dossier & "*.CSV", vbNormal)
 TableDest = "Import"
 
 On Error GoTo Erreur
 Do While (Fic = "")
'Import du Fichier CSV dans la table Import
    DoCmd.TransferText acLinkDelim, "spec", "Import", Dossier & Fic, True
 
    'Lecture de chaque ligne de la table import
    Set rs = New ADODB.Recordset
    StrSql = "SELECT Champ1, Champ2, Champ3, Champ4 FROM Import"
    rs.Open StrSql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    If Not rs.EOF And Not rs.BOF Then 'il existe au moins un enregistrement
        With rs
            Do While Not .EOF And Not .BOF
                If !Champ1 = "ALPHA" Then 'Là il faut placer la condition permettant
                    'l'insertion
                    StrSql = "INSERT INTO Tabledest ( Champ1, Champ2, Champ3, Champ4 )"
                    StrSql = StrSql & " SELECT " & !Champ1 & "," & !champ2 & "," & !Champ3 & "," & !Champ4
                    StrSql = StrSql & " FROM [Nom_Tbl1]"
                    DoCmd.RunSQL StrSql, 0
                End If
                ElseIf !Champ1 = "BETA" Then 'Là il faut placer la condition permettant
                    'l'insertion
                    StrSql = "INSERT INTO Tabledest ( Champ1, Champ2, Champ3, Champ4 )"
                    StrSql = StrSql & " SELECT " & !Champ1 & "," & !champ2 & "," & !Champ3 & "," & !Champ4
                    StrSql = StrSql & " FROM [Nom_Tbl2]"
                    DoCmd.RunSQL StrSql, 0
                End If
                ElseIf !Champ1 = "GAMMA" Then 'Là il faut placer la condition permettant
                    'l'insertion
                    StrSql = "INSERT INTO Tabledest ( Champ1, Champ2, Champ3, Champ4 )"
                    StrSql = StrSql & " SELECT " & !Champ1 & "," & !champ2 & "," & !Champ3 & "," & !Champ4
                    StrSql = StrSql & " FROM [Nom_Tbl3]"
                    DoCmd.RunSQL StrSql, 0
                End If
                If !Champ1 = "DELTA" And !Champ5 = "DZETA" Then  'Là il faut placer la condition permettant
                    'l'insertion
                    StrSql = "INSERT INTO Tabledest ( Champ1, Champ2, Champ3, Champ4 )"
                    StrSql = StrSql & " SELECT " & !Champ1 & "," & !champ2 & "," & !Champ3 & "," & !Champ4
                    StrSql = StrSql & " FROM [Nom_Tbl4]"
                    DoCmd.RunSQL StrSql, 0
                End If
                .MoveNext
            Loop
        End With
    End If
    rs.Close
    Set rs = Nothing
 
    .MoveNext
    Loop
Exit Sub
Erreur:
 
End Sub
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 18h33   #4
Membre éclairé
 
Homme Michel
Développeur informatique
Inscription : février 2008
Messages : 263
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : février 2008
Messages : 263
Points : 309
Points : 309
Je n'ai pas ce type de problème
Je crois (sans en être totalement sûr), qu'il te faut référencer "active data object x.x Library"
(Menu outils/références quand tu affiche le code VB)

Michel
Orion34080 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 19h13   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Pourrai-tu préciser exactement ce que tu cherches à faire ?

Ce que je comprends :
Tu importes un fichier csv dans une table nommée Import.
Tu dispatches les enregistrements de la table Import dans 4 tables, à l'aide requêtes ajouts, en fonction de ce que contient le premier champ (Champ1).

Pour moi, ça peut se faire avec 4 requêtes ayant chacune une clause WHERE adéquate.

Par exemple si les Champ1='ALPHA' vont dans Nom_Tbl1 et
les Champ1='BETA' vont dans Nom_Tbl2 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
    ' Insertion de tous les ALPHA de Import dans la table dont le nom est contenu dans Nom_Tbl1
    StrSql = "INSERT INTO [" & Nom_Tbl1 & "] ( Champ1, Champ2, Champ3, Champ4 )"
    StrSql = StrSql & " SELECT Champ1, Champ2, Champ3, Champ4"
    StrSql = StrSql & " FROM  Import"
    StrSql = StrSql & " WHERE Import.Champ1='ALPHA'"
    DoCmd.RunSQL StrSql, 0
 
    ' Insertion de tous les BETA de Import dans la table dont le nom est contenu dans Nom_Tbl2
    StrSql = "INSERT INTO [" & Nom_Tbl2 & "] ( Champ1, Champ2, Champ3, Champ4 )"
    StrSql = StrSql & " SELECT Champ1, Champ2, Champ3, Champ4"
    StrSql = StrSql & " FROM  Import"
    StrSql = StrSql & " WHERE Import.Champ1='BETA'"
    DoCmd.RunSQL StrSql, 0
On peut même envisager de sauver les requêtes et de les lancer avec DoCmd.OpenQuery, si les tables de destinantion sont toujours les mêmes.
Code :
1
2
DoCmd.OpenQuery "Q_Import_Alpha_Ds_TblDest1"
DoCmd.OpenQuery "Q_Import_Beta_Ds_TblDest2"
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 23h19   #6
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Merci beaucoup pour votre aide !

Effectivement j'avais oublié de rajouter la réference ( je l ai confondue avec la DAO )

LedZep, tu as bien compris ce que je cherche à faire, à la seule nuance que je voudrais qu'une serie de fichier csv d'un répertoire fixe soit importer dans une table temporaire un a un, puis dispatcher dans les 4 tables fixes ( elles ne bougeront pas)

Voici mon code pour le moment:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Sub ImportEtTraitementFichierCSV()
 
Dim Fic As String
Dim Dossier As String
Dim Tabledest As String
Dim StrSql As String
Dim Nom_Tbl1, Nom_Tbl2, Nom_Tbl3, Nom_Tbl4 As String
 
Dossier = "D:\Documents and Settings\"
Fic = Dir(Dossier & ".CSV", vbNormal)
 
Tabledest = "Import"
Nom_Tbl1 = "Alpha"
Nom_Tbl2 = "Beta"
Nom_Tbl3 = "Gamma"
Nom_Tbl4 = "Delta"
 
On Error GoTo Erreur
Do While (Fic = "")
 
    'Importation du fichier csv selectionnÈ
    DoCmd.TransferText acLinkDelim, "spec", "Tabledest", Dossier & Fic, True
 
    'Insertion de toutes les informations concernant les Alpha
    StrSql = "INSERT INTO [ " & Nom_Tbl1 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Alpha'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les Beta
    StrSql = "INSERT INTO [ " & Nom_Tbl2 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Beta'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les Gamma
    StrSql = "INSERT INTO [ " & Nom_Tbl3 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Gamma'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les Delta
    StrSql = "INSERT INTO [ " & Nom_Tbl4 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Gamma' AND Import.Champ5='Dzeta'"
    DoCmd.RunSQL StrSql, 0
 
 Loop
 
Exit Sub
Erreur:
 
End Sub
Le début de mon code ne fonctionne plus, la variable 'Fic' ne prend plus de fichier csv et je n'arrive pas à comprendre pourquoi, ça me rend folle car ça marchait auparavant!
J'aimerai bien sauver les requêtes avec la commande DoCmd.OpenQuery mais je ne sais pas comment l'integrer dans mon code!
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 23h57   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Cette déclaration n'est pas 100% correcte
Code :
Dim Nom_Tbl1, Nom_Tbl2, Nom_Tbl3, Nom_Tbl4 As String
Il faudrait
Code :
Dim Nom_Tbl1 As String, Nom_Tbl2 As String, Nom_Tbl3 As String, Nom_Tbl4 As String
pour typer les quatre variables et non pas seulement la quatrième.


Il faudrait remplacer
Code :
Fic = Dir(Dossier & ".CSV", vbNormal)
par
Code :
Fic = Dir(Dossier & "*.CSV", vbNormal)
Ensuite je verrai plutôt une boucle
Code :
1
2
3
4
5
6
7
8
Do While (Fic <> "")
 
' ... traitements
 
    ' Continuer de lister les fichier
    ' -> fichier suivant 
    Fic = Dir()
Loop
Avant d'importer le fichier CSV dans la table Import, je pense qu'il est utile de la vider
Code :
1
2
3
4
    'Vider table Import
    DoCmd.RunSQL "DELETE FROM Import"
    'Importation du fichier csv selectionné
    DoCmd.TransferText acLinkDelim, "spec", "Import", Dossier & Fic, True
Attention : dans ton code tu importes dans une table nommée Tabledest.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 14h51   #8
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
mince j'ai toujours un probleme au niveau de la ligne

Code :
Fic = Dir(Dossier & "*.CSV", vbNormal)
J'ai le message d'erreur : " Nom ou numéro de fichier incorrect"
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 19h20   #9
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Es-tu sûre de ce que contient ta variable Dossier ?

Au début de la discussion c'est :
Code :
 Dossier = "C:\Documents and Settings\"
et plus tard c'est :
Code :
 Dossier = "D:\Documents and Settings\"
Si tu n'as pas de disque D: ... ... ça marche beaucoup moins bien.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2011, 00h01   #10
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Je suis un
J'ai cherché comme une idiote alors que c'était sous mes yeux!

Du coup pour mon autre souci j'ai bien cherché avant de poster mais impossible de debogger la ligne
Code :
DoCmd.TransferText acLinkDelim, "spec", "Import", Dossier & Fic, True
Ma specification d'importation que j'ai appellée "spec" n'est pas trouvée par Access, pire lorsque j'essaie d'en recréer une j'ai un message d'erreur me disant que je n'ai plus d'assistant...
En plus la variable Fic ne marche toujours pas car lorsque je passe la souris dessus elle m'affiche Fic=""
Et lorsque je ne lance pas le mode deboggage j'ai un message d'erreur 3027 "Mise a jour impossible. La base de données ou l'objet est en lecture seule"...
Est ce que je dois ouvrir ma base avec un mode spéciale car elle n est pas en lecture seule.
Est ce que le problème de récupération des fichiers vient de la différence entre vbNormal et vbDirectory?

Merci
Bonne soirée
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 08h07   #11
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Citation:
Ma specification d'importation que j'ai appellée "spec" n'est pas trouvée par Access, pire lorsque j'essaie d'en recréer une j'ai un message d'erreur me disant que je n'ai plus d'assistant...
Je ne sais pas si c'était le cas, mais lorsque le code VBA est en mode pas à pas ou qu'il est arrêté suite à une erreur,
généralement on ne pas utiliser d'assistant Access.

Citation:
Et lorsque je ne lance pas le mode deboggage j'ai un message d'erreur 3027 "Mise a jour impossible. La base de données ou l'objet est en lecture seule"...
Est ce que je dois ouvrir ma base avec un mode spéciale car elle n est pas en lecture seule.
Non, pas à ma connaissance.

Citation:
Est ce que le problème de récupération des fichiers vient de la différence entre vbNormal et vbDirectory?
Non. J'ai fait un test rapide, vbNormal c'est très bien.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub TestDir()
Dim Fic As String
Dim Dossier As String
 
Dossier = "C:\Documents and Settings\MonNom\My Documents\"
Fic = Dir(Dossier & "*.mdb", vbNormal)
 
Do While Fic <> ""
 
   MsgBox Dossier & vbCrLf & Fic
 
   Fic = Dir()
Loop
End Sub
Par contre, ton dossier (C:\Documents and Settings\) il n'est pas un peu court ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 11h30   #12
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Milles merci pour les explications!!!
La recuperation des fichiers fonctionne tres bien.

Il me reste des questions sur la partie requete sql:

Le code passe directement en END SUB à la fin de mon premier bloc de requete, en plus il zappe completement la boucle "do while"
Je n'arrive pas à comprendre pourquoi il ne passe pas à la suite.

De plus la commande Delete du contenu de la table Import fonctionne très bien mais ensuite il m'importe mon fichier csv dans une table nommé Import.1 et je n'arrive pas à forcer le remplissage de la table Import.

voici un extrait de mon code
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
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
Sub ImportEtTraitementFichierCSV()
 
Dim Fic As String
Dim Dossier As String
Dim Nom_Tbl As String
Dim StrSql As String
Dim Nom_Tbl1 As String, Nom_Tbl2 As String, Nom_Tbl3 As String, Nom_Tbl4 As String
 
 
Dossier = "C:\Documents and Settings\chemin\"
Fic = Dir(Dossier & "*.csv", vbNormal)
 
 
Nom_Tbl = "Import"
Nom_Tbl1 = "Alpha"
Nom_Tbl2 = "Beta"
Nom_Tbl3 = "Gamma"
Nom_Tbl4 = "Delta"
 
On Error GoTo Erreur
Do While Fic <> ""
 
    'Vider table Import
    DoCmd.RunSQL "DELETE FROM Import"
 
    'Importation du fichier csv selectionné
    DoCmd.TransferText acLinkDelim, "spec", "Import", Dossier & Fic, True
 
    'Insertion de toutes les informations concernant les FS
    StrSql = "INSERT INTO [ " & Nom_Tbl1 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Alpha'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les VG
    StrSql = "INSERT INTO [ " & Nom_Tbl2 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Beta'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les PV
    StrSql = "INSERT INTO [ " & Nom_Tbl3 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Gamma'"
    DoCmd.RunSQL StrSql, 0
 
    'Insertion de toutes les informations concernant les Details San
    StrSql = "INSERT INTO [ " & Nom_Tbl4 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ1='Delta' AND Import.Champ5='Dzeta'"
    DoCmd.RunSQL StrSql, 0
 
 Loop
 
Exit Sub
Erreur:
 
End Sub
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h49   #13
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Citation:
Le code passe directement en END SUB à la fin de mon premier bloc de requete, en plus il zappe completement la boucle "do while"
Je n'arrive pas à comprendre pourquoi il ne passe pas à la suite.
Mets temporairement en commentaire la ligne On Error GoTo Erreur :
De cette manière l'erreur s'affichera et le code s'arrêtera sur la ligne fautive.


Attention, il manque une ligne pour passer au fichier suivant avant Loop.
Si tu ne fais pas ça ... boucle infinie.


Citation:
De plus la commande Delete du contenu de la table Import fonctionne très bien mais ensuite il m'importe mon fichier csv dans une table nommé Import.1 et je n'arrive pas à forcer le remplissage de la table Import.
Ha oui. Je croyai que tu importais (acImportDelim), mais en fait tu crée une table liée (acLinkDelim).
Dans ce cas, il faut détruire la table avant de la recréer (lier) avec TransferText.
Sinon on a des Import, Import1, Import2, Import3 ...
Remplacer ...
Code :
1
2
    'Vider table Import
    DoCmd.RunSQL "DELETE FROM Import"
par ...
Code :
1
2
3
4
    ' Supprimer tabe liée "Import"
    If DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import'") > 0 Then
       DoCmd.DeleteObject acTable, "Import"
    End If
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 12h27   #14
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Merci pour la suppression de la table import c est exactement ce que je recherchais.

Par contre le reste du code n est tojours pas executé :

* Les insertions ne marchent pas, le premier bloc de requete d'insertion est parcouru mais non exécuté...

* La boucle n est pas reprise et pourtant j'ai bien rajouté le Fic= Dir()

Du coup je suis coincée!
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 13h11   #15
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Est-ce que tu pourrai poster une copie de ta base et des fichiers csv (au moins un par catégorie alpha, beta, gama, delta),
le tout dans un fichier zip ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 14h30   #16
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Je n'arrive pas à ajouter des pièces jointes! A chauqe fois le site plante!
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h19   #17
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
bon j'ai essayé de rajouter une boucle if pour la prise en compte des requetes sur la table d'iimport mais comme au debut la boucle s arrete a l import, elle ne passe pas au fichier suivant, de plus aucunes de mes requetes n'est exéuté mis à part la première qui consiste supprimer la table d'import temporaire
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
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
67
68
69
70
71
72
73
74
Sub ImportEtTraitementFichierCSV()
 
Dim Fic As String
Dim Dossier As String
Dim Nom_Tbl As String
Dim StrSql As String
Dim Nom_Tbl1 As String, Nom_Tbl2 As String, Nom_Tbl3 As String, Nom_Tbl4 As String
 
 
Dossier = "C:\Documents and Settings\MyDocuments\"
Fic = Dir(Dossier & "*.csv", vbNormal)
Import = "Import"
FileSystem = "Alpha"
VolumGroup = "Beta"
PhysicalVolum = "Gamma"
DetailsSan = "Delta"
 
On Error GoTo Erreur
Do While Fic <> ""
 
   MsgBox Dossier & vbCrLf & Fic
 
    ' Supprimer tabe liée "Import"
    If DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import'") > 0 Then
       DoCmd.DeleteObject acTable, "Import"
    End If
 
    'Importation du fichier csv selectionné
    DoCmd.TransferText acLinkDelim, "spec", "Import", Dossier & Fic, True
 
    If DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import', And [Champ]='Alpha'") = True Then
 
    'Insertion de toutes les informations concernant les Alpha
    StrSql = "INSERT INTO [ " & Nom_Tbl1 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ4='Alpha'"
    DoCmd.RunSQL StrSql
 
    ElseIf DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import', And [Champ]='Beta'") = True Then
    'Insertion de toutes les informations concernant les Beta
    StrSql = "INSERT INTO [ " & Nom_Tbl2 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ4='Beta'"
    DoCmd.RunSQL StrSql
 
 
    ElseIf DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import', And [Champ]='Gamma'") = True Then
    'Insertion de toutes les informations concernant les Gamma
    StrSql = "INSERT INTO [ " & Nom_Tbl3 & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ4='Gamma'"
    DoCmd.RunSQL StrSql
 
 
    ElseIf DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import', And [Champ]='Delta'") = True Then
    'Insertion de toutes les informations concernant les Delta
    StrSql = "INSERT INTO [ " & DetailsSan & " ] (Champ1, Champ2, Champ3, Champ4, Champ5)"
    StrSql = StrSql & " SELECT champ1, Champ2, Champ3, Champ4, Champ5 "
    StrSql = StrSql & " FROM Import"
    StrSql = StrSql & " WHERE Import.Champ4='Delta' AND Import.Champ5='IS NOT NULL'"
    DoCmd.RunSQL StrSql
    End If
 
    Fic = Dir()
 
 Loop
 
 
 
Exit Sub
Erreur:
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 18h42   #18
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Je ne sais pas si tu as vu l'email que je t'ai envoyé.

Les fichiers csv sont en fait des fichiers Excel xlxs.
On ne peut pas les lier avec DoCmd.TransferText sans générer une erreur.

En admettant que les fichiers soient réellement des csv, il faut que la spécification d'importation "spec" existe.
Sinon, erreur.

Il faut avant tout régler ce problème de type de fichier.
csv ou xlxs ?

Ce test ...
Code :
1
2
    If DCount("*", "MSysObjects", "[Type] In (1,6) And [Name]='Import', And [Champ]='Alpha'") = True Then
...
est inutile, et incorrect à cause de la partie critères qui est syntaxiquement incorrecte.
La table MSysObjects n'a pas de champ nommé Champ.

Si on en revient à la création de la table liée Import, es-tu capable de la créer à la main ?
Si tu n'y arrive pas, il y a peu de chance qu'on puisse le faire en VBA.
De toutes façons, je pense que la priorité est de déterminer la nature réelle des fichiers (csv ou xlxs).

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h41   #19
Invité de passage
 
Femme
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 1
Points : 1
Merci pour toutes tes explications et ta patience, j'ai resolu mon problème grâce à ton aide!
Nestea est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h18.


 
 
 
 
Partenaires

Hébergement Web