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 17/12/2010, 17h26   #1
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Par défaut Modèle d'importation + requêtes Update

Bonsoir à tous,

Un petit point à vous soumettre.

Situation actuelle : j'ai des fichiers Excel, j'ai une base Access, je les importe, jusque là pas de souci particulier. Mes fichiers Excel font à peu près 200K lignes. Mes tables marchent bien, etc. L'inconvénient est que mes fichiers Excel contiennent des données que je dois modifier via des requêtes Update une fois dans Access. Ces requêtes sont toutes bêtes mais elles prennent quand même du temps. Etant donné que les fichiers que j'intégreraient ensuite seront beaucoup plus volumineux, ces requêtes vont être trop longues, voire vont planter.

Ma question est simple : est ce que je peux modifier directement à l'importation des champs de mon fichier Excel ? (mes requêtes Update sont donc évitées par la suite)

PS : je ne veux pas toucher aux fichiers Excel au départ.

PS2 : si la réponse à ma question n'est pas faisable, quelles sont les solutions qui s'offrent à moi ?

De tout coeur je vous remercie

Guillaume.
guiguikawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 16h59   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bonjour,

Citation:
je ne veux pas toucher aux fichiers Excel au départ
.

Tu peux
1° copier le fichier
2° torturer la copie
3° ensuite l'importer
4° et supprimer la copie.

Citation:
données que je dois modifier via des requêtes Upda
modifier quoi, par exemple ?
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 14h47   #3
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Premièrement, merci pour ta réponse..

Citation:
Envoyé par ClaudeLELOUP Voir le message
Bonjour,

.

Tu peux
1° copier le fichier
2° torturer la copie
3° ensuite l'importer
4° et supprimer la copie.

Le truc c'est que j'aimerai ne pas toucher aux fichiers Excel, que ce soit manuellement ou automatiquement, avant leur intégration dans Access...



modifier quoi, par exemple ?
Par exemple, j'ai sur chaque ligne un champ, qui dans le fichier Excel est soit "A", "P", "M", et que je modifie en "MN", "PP", "MDD" dans ma base access. Du coup je suis obligé de faire 3 requêtes update pour la modification de ces champs....
Et cela prend du temps comme j'ai pas mal de ligne. De plus, il arrive que la requête plante ou m'affiche un message comme quoi le moteur de BDD n'a pas assez d'espace blablabla.
guiguikawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h04   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bonjour,

si c'est la même table, une seule requête devrait suffire.
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h14   #5
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Citation:
Envoyé par ClaudeLELOUP Voir le message
Bonjour,

si c'est la même table, une seule requête devrait suffire.
J'ai essayé de le faire mais je n'ai pas réussi...
Faire ceci ne fonctionne pas :

Code sql :
1
2
UPDATE Retraitement SET Retraitement.Marque = "MDD", Retraitement.Marque = "MN", Retraitement.Marque = "PP"
WHERE (((Retraitement.Marque)="M") AND ((Retraitement.Marque)="A") AND ((Retraitement.Marque)="P"));
guiguikawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h30   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 936
Points : 7 936
Bjr,

Citation:
Envoyé par guiguikawa Voir le message
J'ai essayé de le faire mais je n'ai pas réussi...
Faire ceci ne fonctionne pas :

Code sql :
1
2
UPDATE Retraitement SET Retraitement.Marque = "MDD", Retraitement.Marque = "MN", Retraitement.Marque = "PP"
WHERE (((Retraitement.Marque)="M") AND ((Retraitement.Marque)="A") AND ((Retraitement.Marque)="P"));
Impossible comme cela que le moteur SQL comprenne quel valeur il doit mettre.
D'ailleurs ça ne doit sûrement même pas s'exécuter.

On peut éventuellement essayer switch :
Code sql :
UPDATE Retraitement  SET Retraitement.Marque = Switch([marque]="M","MDD",[marque]="A","MN",[marque]="P","PP",True,[marque]);
Mais ça va mettre à jour toutes les lignes, y compris celles qui ne contiennent ni M, ni P, ni A (il n'y en a peut-être pas?)

Pour la rapidité, faut essayer pour voir...
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h41   #7
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Dans un module, cette fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Retraite(Original As String) As String
Select Case Original
  Case "M"
    Retraite = "MDD"
  Case "A"
    Retraite = "MN"
  Case "P"
    Retraite = "PP"
  Case Else
    Retraite = Original
End Select
End Function
Ta requête update :

Code sql :
UPDATE Retraitement SET Retraitement.Marque = retraite([marque]);
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h43   #8
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 037
Points : 11 037
Bjr Arkham46,

Tu as tiré pendant que j'ajustais !
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h46   #9
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Citation:
Envoyé par ClaudeLELOUP Voir le message
Dans un module, cette fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Retraite(Original As String) As String
Select Case Original
  Case "M"
    Retraite = "MDD"
  Case "A"
    Retraite = "MN"
  Case "P"
    Retraite = "PP"
  Case Else
    Retraite = Original
End Select
End Function
Ta requête update :

Code sql :
UPDATE Retraitement SET Retraitement.Marque = retraite([marque]);
Bien joué et merci Claude ça va beaucoup plus vite...
guiguikawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h50   #10
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Citation:
Envoyé par guiguikawa Voir le message
Bien joué et merci Claude ça va beaucoup plus vite...
Oui en fait ça ne va pas si vite que ça... lol..

Je vais essayer ce que tu as dit avec le SWITCH. Par contre tu dis que ca va remplacer également les cellules, qu'est ce que ça va mettre dedans ?

Merci.
guiguikawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h54   #11
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 936
Points : 7 936
Citation:
Envoyé par ClaudeLELOUP Voir le message
Bjr Arkham46,

Tu as tiré pendant que j'ajustais !
Je crois que en fait tu as reprogrammé le Switch (=PremVrai)

Citation:
Envoyé par guiguikawa Voir le message
Je vais essayer ce que tu as dit avec le SWITCH. Par contre tu dis que ca va remplacer également les cellules, qu'est ce que ça va mettre dedans ?
Pas les cellules d'Excel, les champs dans Access.
Je voulais juste dire qu'il n'y a pas de filtre avec une clause Where.
On passe sur l'ensemble des lignes quelle que soit la valeur de Marque.
S'il n'y a ni A, ni P, ni M, on remet la même valeur.
Une modif pour rien mais ça ne perd pas d'info.

Pour la rapidité je ne suis pas sûr que ce soit au top pour des milliers de lignes, mais que faire d'autres?
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h59   #12
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 936
Points : 7 936
Une autre possibilité.

Tu fais une petite table de correspondance :

M MDD
A MN
P PP

et dans une requête tu joins (Left join) ta table Retraitement avec cette table de correspondance pour obtenir le code voulu

plus besoin de mettre à jour les tables après import, mais les traitements futurs seront plus long à cause de la jointure

tout dépend de ce que tu fais ensuite avec les données
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 16h00   #13
Futur Membre du Club
 
Inscription : février 2006
Messages : 160
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 160
Points : 17
Points : 17
Le SWITCH est pas mal...
guiguikawa 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 04h01.


 
 
 
 
Partenaires

Hébergement Web