|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Bonjour,
Je souhaiterais concaténer les cellules d'une table access afin d'exporter celles ci dans une fichier .csv Je m'explique: Le résultat de cette concaténation va permette d'établir une clé commune qui sera utilisée dans plusieurs autres application. A/ Un formulaire est remplie afin de formater l'information B/ Une macro/requête ou autre, est exécutée pour concaténer ces cellules et sortir une clé primaire, et l'exporter en .csv J'ai donc ma table avec les champs, A,B,C et D. Je souhaiterai concaténer ceux ci de manière à ce qu'ils sortent en minuscule, sans espace, avec un underscore comme séparation, tel que: a_b_c_d Seuls les champs pleins doivent être formaté de telle sorte que s'il en manque un, cela donne par exemple : a_c_d ou a_d, mais jamais d'underscore à la fin ou de doublé. L'ensemble de chaque ligne est ensuite enregistré en .csv dans un dossier, avec pour nom la date_le numéro de clé primaire auto (c'est le premier champ de la table).csv Info subsidiaire: Est il possible qu'une fois la macro exécuté, les infos saisie dans le formulaire ne soit plus visible. C'est à dire que le formulaire est vierge à chaque ouverture. Les données ne sont accessible que via la table. Je vous remercie d'avoir pris le temps de lire ce message, et vous remercie par avance pour votre aide. |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
Pour concatner des rubriques dans un requête tu peux employer la méthode suivante. Supposons une table qui comprte 2 rubrques : NOM et PRENOM
Pour faire une requête qui te donnerait par exemple NOM------ PRENOM -------- IDENTITE COMPLETE Tu pourrais par exemple (sous l'éditeur de requête) mettre la rubrique NOM dans la première colonne, la rubrique PRENOM dans la deuxième colonne et enfin mettre : NOM & " " & PRENOM dans la troisième colonne Tu obtiendrais : NOM------ PRENOM -------- IDENTITE COMPLETE Dupont----Alain------------ Dupont Alain Et si tu veux un Underscore entre NOM et PRENOM tu le mets entre les deux guillemets. Il ne te resterait qu'à exporter la dite requête Michel |
|
|
00
|
|
|
#3 | ||
|
Membre actif
![]() Dominique Gestion parc machine, assistance informatique, développement Access, Excel... Inscription : février 2007 Messages : 130 ![]() |
Bonsoir.
Pour ma part, je traiterai le résultat d'une requête, éventuellement paramétrée par code, par appel à une fonction comme ceci Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
Oui, c'est une autre manière de faire...
Mais ne penses-tu pas que c'est tout de même beaucoup de code pour quelque chose de relativement simple à traiter dans la requête elle-même ? Cordialement Michel |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Merci pour vos réponses,
je vais regarder ça et vous tiens au courant. |
|
|
00
|
|
|
#6 | |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Le problème qui se pose dans cette requête est qu'elle ne prends pas en compte les règles de formatage. Si un champ est vide, elle va tout de même allé afficher l'underscore. On obtient ainsi des doublé, et des underscore en fin.
A moins de faire un code qui aille supprimer les double underscore, et les _ seulement s'il sont en dernier caractère. Citation:
|
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
Suffit sans doute d'intégrer un "IIF" (sous ACCESS un "VraiFaux") dans la rubrique concaténée... permetttant de tester et de donner un résultat correct, avec ou sans l'underscore.
Dans le style : Code :
Identité : Nom & iif(PRENOM="";"";"_" & PRENOM) Mais l'essentiel est d'arriver au but... et sur ce point toutes les méthodes sont acceptables, si elles atteignent ce but. Amicalement Michel |
|
|
00
|
|
|
#8 | ||||
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Quels données doit-je remplacer dans tout cela ?
J'ai changé toute cette partie: Citation:
oMyDtb.QueryDefs![reqSelection].SQL = strSql Peux tu me préciser les éléments à adapter? Comme tu l'as surement remarqué, je suis novice en à la matière. Merci Citation:
|
||||
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Dominique Gestion parc machine, assistance informatique, développement Access, Excel... Inscription : février 2007 Messages : 130 ![]() |
Bonjour.
Orion34080 =>J'avais vu le problème de l'underscore avec l'extration par requête simple et comme je ne suis pas trop adepte de requêtes avancées car pas très spécialiste, j'utilise souvent ma réserve de fonctions toutes prêtes que j'adapte au cas par cas. Ta dernière suggestion peut-elle traiter le cas où le 1er champ est inexistant? Louaf=>As-tu créé et enregistré la requête reqSelection? As-tu testé le contenu de la variable strSql dans une requête? Eventuellement, indique le code de ta requête. Cordialement, Dominique |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
La requête a été enregistrée et affiche simplement les champs à prendre en compte.
Oui, j'ai fait ce test, mais cela n'a pas fonctionné. J'ai pensé que ceci n'était valable que dans un module... Mais peut être que je n'ai pas la bonne méthode. Est ce bien dans un module (qui est ensuite appelé par un bouton dans un form) que le code doit être entré? |
|
|
00
|
|
|
#11 | |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
J'ai testé dans une requête:
SELECT iif(reqconca.Référence="";"";reqconca.Référence) & iif(reqconca.Couleur="";"";"_" & reqconca.Couleur) & iif(reqconca.Taille="";"";"_" & reqconca.Taille) FROM reqconca; Mais il y a une erreur de syntaxe... Citation:
|
|
|
|
00
|
|
|
#12 | |
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
===>PAPOUDOMI
Citation:
Faudrait en faire un peu plus ... par exemple : Code :
Identité : VraiFaux([NOM]="" Ou EstNull([NOM]);VraiFaux([PRENOM]="" Ou EstNull([PRENOM]);"";[PRENOM]);VraiFaux([PRENOM]="" Ou EstNull([PRENOM]);[NOM];[NOM] & "_" & [PRENOM])) Code :
Identité: VraiFaux([NOM]="" Ou EstNull([NOM]);"";[NOM]) & VraiFaux([PRENOM]="" Ou EstNull([PRENOM]);"";VraiFaux([NOM]="" Ou EstNull([NOM]);[PRENOM];"_" & [PRENOM])) Je viens de le tester et cela couvre les cas suivants : NOM OK et PRENOM OK --> Dupont_Louis NOM KO et PRENOM KO --> NOM OK et PRENOM KO --> Dupont NOM KO et PRENOM OK --> Louis Amicalement Michel |
|
|
|
00
|
|
|
#13 | |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Dominique,
Pourrais tu me préciser, ce que je dois à faire, et ce que je dois changer par rapport à ton code? J'ai bien créé reqSelection, mais peut être l'ai je mal fait... Pareil, pour le contenu de strSql, où dois l'intégrer? J'ai tenté avec la méthode d'Orion, mais je me perds dans les iff. Pourrais tu encore m'aider? Merci Citation:
|
|
|
|
00
|
|
|
#14 |
|
Membre actif
![]() Dominique Gestion parc machine, assistance informatique, développement Access, Excel... Inscription : février 2007 Messages : 130 ![]() |
Ci-joint un exemple concret qui, je l'espère t'éclairera, contenant une table avec quatre champs à concaténer, la requête sélection et un formulaire de test avec un bouton pour appeler le code.
N'hésite pas à me contacter pour de plus amples explications. Au besoin, fait moi passer ta base en précisant si tu doit créer un fichier csv par enregistrement ou pour une série d'enregistrement et selon quels critères. Je n'ai pas tout compris mais tes données ne sont-elles pas saisies dans un formulaire, alors ne serait-il pas aussi simple de faire la concaténation directement dans ce formulaire? Cordialement, Dominique |
|
|
00
|
|
|
#15 | |
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Dominique,
En pièce jointe, la base que tu m'as fait passé avec le type d'info dont j'ai besoin. Je te remercie vraiment pour ton aide. Les personnes qui vont entrer ces données doivent en faire le minimum. Il entre quatre informations par ligne (marque,ref, couleur, taille) dans un formulaire, et quand toutes les lignes sont faites cliquent sur un bouton qui va : concatener 3 informations(tous sauf marque), formater (minuscule, pas d'espace, et underscore entre cellule), et permettre d'enregistrer le résultat dans un fichier csv. De mon côté, je peux accéder à ces info dans une table où j'ai du coup: numéro (clé primaire), marque, réf,couleur, taille, et le résultat de l'action précédente. Qu'en penses tu? Merci encore pour l'aide Citation:
|
|
|
|
00
|
|
|
#16 | ||
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
Tu peux aussi essayer ce petit code en le copiant/collant dans un de tes modules et en l'exécutant (après bien sûr avoir crée une table (Table1) contenant au moins les 4 champs A,B,C,D)
Code :
|
||
|
|
00
|
|
|
#17 | |||
|
Invité de passage
![]() Webmaster Inscription : août 2011 Messages : 9 ![]() |
Citation:
J'ai adapté cela, mais le débogeur prompte sur New ADODB.Recordset en me disant : Type défini par l’utilisateur non défini Ca te parle? |
|||
|
|
00
|
|
|
#18 |
|
Membre éclairé
![]() Michel Développeur informatique Inscription : février 2008 Messages : 261 ![]() |
il doit te manquer une référence style :
Microsoft ActiveX Data Objects 2.X Library si c'est bien le cas, Tu ouvres un module (n'importe lequel), tu vas dans "Outils / Référence" et tu coches la référence manquante. Michel |
|
|
00
|
|
|
#19 |
|
Membre actif
![]() Dominique Gestion parc machine, assistance informatique, développement Access, Excel... Inscription : février 2007 Messages : 130 ![]() |
Bonsoir.
Je vais essayer de résumer tes besoins: -Saisir et enregistrer les caractéristiques de chaque produit + la concaténation des champs décrivant ce produit dans la table SkuGen -Envoyer dans un fichier csv le champ concaténation de tous les enregistrements de la table SkuGen lors d'un clic sur le bouton Envoyer de ton formulaire. Pour cela, j"effectuerai directement la concaténation lors de la saisie. Ci-joint une base qui exécute ce 1er point. Je te laisse le soin de rajouter dans chaque évènement "AfterUpdate" le formatage en majuscules, suppression des espaces... des données saisies. Si cela te convient, je te passerai le code d'exportation. J'ai dans un coin la procédure qui exporte des données dans un fichier xlsx que l'on pourra adapter. Bonne nuit, Dominique |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com