gratifiant > microsoft.* > microsoft.access

Pascal (10/08/2006, 22h24)
Bonjour,
toutes les semaine je récupère un fichier texte que j'importe dans Access.
Ce fichier contient un certain nombre de champs et parmi ceux ci des clamps
numériques. Pour chaque enregistrement je souhaite faire des totaux par
groupe en fonction du nom du champ. Le nombre de champs pouvant être
variable d'une semaine sur l'autre
Pour être plus clair je vous donne un exemple.
Voici par exemple les champs de la table ainsi constituée:
Nom
Prénom
Adresse
......
AAAA1
AAAA2
.....
AAAA3
BBB1
BBB2
....
BBB9
......
Adresse mail

Je souhaite faire les additions de tout ce qui est AAAA*, BBB* (familles) de
l'enregistrement et écrire le résultat dans un champs d'une autre table (ou
de la même peu importe) dans un champ AAAAtotal, BBBtotal. Chaque famille
existe toujours d'une semaine sur l'autre mais le nombre de champs qui la
compose est variable, c'est pour cela que je cherche une procédure en VB qui
puisse me faire les additions.
Avez vous une idée de comment il faut faire car je débute en VBA.
Par avance merci
Pascal
3stone (11/08/2006, 15h04)
Salut,

"Pascal"
| toutes les semaine je récupère un fichier texte que j'importe dans Access.
| Ce fichier contient un certain nombre de champs et parmi ceux ci des clamps
| numériques. Pour chaque enregistrement je souhaite faire des totaux par
| groupe en fonction du nom du champ. Le nombre de champs pouvant être
| variable d'une semaine sur l'autre
| Pour être plus clair je vous donne un exemple.
| Voici par exemple les champs de la table ainsi constituée:
| Nom
| Prénom
| Adresse
| .....
| AAAA1
| AAAA2
| ....
| AAAA3
| BBB1
| BBB2
| ...
| BBB9
| .....
| Adresse mail
|
| Je souhaite faire les additions de tout ce qui est AAAA*, BBB* (familles) de
| l'enregistrement et écrire le résultat dans un champs d'une autre table (ou
| de la même peu importe) dans un champ AAAAtotal, BBBtotal. Chaque famille
| existe toujours d'une semaine sur l'autre mais le nombre de champs qui la
| compose est variable, c'est pour cela que je cherche une procédure en VB qui
| puisse me faire les additions.
| Avez vous une idée de comment il faut faire car je débute en VBA.

Ok, tu débute en VBA... mais en Access également, il me semble ;-)

Tu devrais commencer par te créer la table qui va bien.
Ensuite, tu importe le texte dans unetable "brute".
Une requête ajout transférera les données utiles et éventuellement
déjà partiellement traitées.

Ensuite, une simple requête peut te donner les sommes que tu souhaite.

Il n'est pas raisonnable de stocker ce résultat dans une table, a fortiori
si l'endroit peut être quelconque.
Ce "peu importe" montre à lui seul le non fondé de cette action !
Pascal (11/08/2006, 19h00)
"3stone" <home> a écrit dans le message de news:
OEqU9aUvGHA.3372...
Salut,

"Pascal"
| toutes les semaine je récupère un fichier texte que j'importe dans Access.
| Ce fichier contient un certain nombre de champs et parmi ceux ci des
clamps
| numériques. Pour chaque enregistrement je souhaite faire des totaux par
| groupe en fonction du nom du champ. Le nombre de champs pouvant être
| variable d'une semaine sur l'autre
| Pour être plus clair je vous donne un exemple.
| Voici par exemple les champs de la table ainsi constituée:
| Nom
| Prénom
| Adresse
| .....
| AAAA1
| AAAA2
| ....
| AAAA3
| BBB1
| BBB2
| ...
| BBB9
| .....
| Adresse mail
|
| Je souhaite faire les additions de tout ce qui est AAAA*, BBB* (familles)
de
| l'enregistrement et écrire le résultat dans un champs d'une autre table
(ou
| de la même peu importe) dans un champ AAAAtotal, BBBtotal. Chaque famille
| existe toujours d'une semaine sur l'autre mais le nombre de champs qui la
| compose est variable, c'est pour cela que je cherche une procédure en VB
qui
| puisse me faire les additions.
| Avez vous une idée de comment il faut faire car je débute en VBA.

Ok, tu débute en VBA... mais en Access également, il me semble ;-)

Tu devrais commencer par te créer la table qui va bien.
Ensuite, tu importe le texte dans unetable "brute".
Une requête ajout transférera les données utiles et éventuellement
déjà partiellement traitées.

Ensuite, une simple requête peut te donner les sommes que tu souhaite.

Il n'est pas raisonnable de stocker ce résultat dans une table, a fortiori
si l'endroit peut être quelconque.
Ce "peu importe" montre à lui seul le non fondé de cette action !
3stone (11/08/2006, 19h40)
Salut,

"Pascal"
| Mon pb est justement qu'access ne fait des addition dans une requête qu'à
| partir du moment ou il connais tous les nom des champs (il me semble). Or
| dans mon cas le nom des champs est variable d'une fois sur l'autre, seule
| une partie que j'appelerai racine est fixe.
| C'est pour cela que j'ai pensé qu'il fallait utiliser VBA.
| Les données d'origine peuvent ou non être conservées, c'est pour cela que
| j'ai écrit dans la même table ou une autre.

Peu importe le nom des champs...
c'est pour cela que je disais d'importer dans une table en "brut"

Et effectivement, avec du VBA on peut ne pas s'occuper des noms de champs
lorsque l'on s'adresse aux "numéro" du champ (par Field(x) )

L'important est que les données soit organisées verticalement et non
horizontalement (a plat) comme on les retrouvent souvent dans Excel.
Pascal (11/08/2006, 19h48)
"3stone" <home> a écrit dans le message de news:
OfvLw0WvGHA.4624...
Salut,

"Pascal"
| Mon pb est justement qu'access ne fait des addition dans une requête qu'à
| partir du moment ou il connais tous les nom des champs (il me semble). Or
| dans mon cas le nom des champs est variable d'une fois sur l'autre, seule
| une partie que j'appelerai racine est fixe.
| C'est pour cela que j'ai pensé qu'il fallait utiliser VBA.
| Les données d'origine peuvent ou non être conservées, c'est pour cela que
| j'ai écrit dans la même table ou une autre.

Peu importe le nom des champs...
c'est pour cela que je disais d'importer dans une table en "brut"

Et effectivement, avec du VBA on peut ne pas s'occuper des noms de champs
lorsque l'on s'adresse aux "numéro" du champ (par Field(x) )

L'important est que les données soit organisées verticalement et non
horizontalement (a plat) comme on les retrouvent souvent dans Excel.
3stone (11/08/2006, 20h10)
re,

"Pascal"
| Et c'est bien la qu'est mon pb, les données sont présentées à plat.
| Est'il possible d'imaginer du code qui lise la table et qu'elle fasse la
| somme groupe par goupe ?
| J'ai vu qqch comme cela dans les états qui présentent le résultat d'une
| requete analyse croisée. Mais je ne sais pas le faire pour des tables et qui
| plus est avec plusieurs groupes.

Tout est possible... mais là cela devient nettement plus difficile.

Si la "place" des champs reste identique - pas de problème
si par contre le nombre et la place change... :-(
Pascal (11/08/2006, 20h32)
"3stone" <home> a écrit dans le message de news:
uIDJ5FXvGHA.4444...
re,

"Pascal"
| Et c'est bien la qu'est mon pb, les données sont présentées à plat.
| Est'il possible d'imaginer du code qui lise la table et qu'elle fasse la
| somme groupe par goupe ?
| J'ai vu qqch comme cela dans les états qui présentent le résultat d'une
| requete analyse croisée. Mais je ne sais pas le faire pour des tables et
qui
| plus est avec plusieurs groupes.

Tout est possible... mais là cela devient nettement plus difficile.

Si la "place" des champs reste identique - pas de problème
si par contre le nombre et la place change... :-(
3stone (12/08/2006, 13h30)
Salut,

"Pascal"
| malheureusement leur nombre change, donc leur place aussi.

on aurait pu ajouter à la fin... ;-)

| J'imagine bien le principe :
| Répertorier la liste des champs de la table,
| Alimenter ensuite une variable par groupe de champs en fonction de la
| lecture des enregistrements
| Ecrire le résultat dans un champs de la table courante.
| mais, gros pb, comment le réaliser (dur dur)....

Tu peux donner quelques lignes d'exemples pour voir ce que cela donne ?

Il faut bien se rendre compte que sans aucune structure, sans "nom de champ"
que l'on va retrouver de fichier en fichier ce sera coton !

Une structure répétitive serait le minimum... du style :
champ-textX... champ-textN, puis 3 champs numérique, puis 2 numérique, champX...
et s'il peut y avoir des champs Null cela deviens quasiment impossible !

Quoi qu'il en soit, la structure, c'est en amont qu'il faut essayer de l'imposer.
Pascal (12/08/2006, 14h39)
"3stone" <home> a écrit dans le message de news:
eyF1wKgvGHA.1284...
Salut,

"Pascal"
| malheureusement leur nombre change, donc leur place aussi.

on aurait pu ajouter à la fin... ;-)

| J'imagine bien le principe :
| Répertorier la liste des champs de la table,
| Alimenter ensuite une variable par groupe de champs en fonction de la
| lecture des enregistrements
| Ecrire le résultat dans un champs de la table courante.
| mais, gros pb, comment le réaliser (dur dur)....

Tu peux donner quelques lignes d'exemples pour voir ce que cela donne ?

Il faut bien se rendre compte que sans aucune structure, sans "nom de champ"
que l'on va retrouver de fichier en fichier ce sera coton !

Une structure répétitive serait le minimum... du style :
champ-textX... champ-textN, puis 3 champs numérique, puis 2 numérique,
champX...
et s'il peut y avoir des champs Null cela deviens quasiment impossible !

Quoi qu'il en soit, la structure, c'est en amont qu'il faut essayer de
l'imposer.
Pascal (12/08/2006, 15h43)
"Pascal" <zz2001top> a écrit dans le message de news:
enEVoxgvGHA.1512...

"3stone" <home> a écrit dans le message de news:
eyF1wKgvGHA.1284...
Salut,

"Pascal"
| malheureusement leur nombre change, donc leur place aussi.

on aurait pu ajouter à la fin... ;-)

| J'imagine bien le principe :
| Répertorier la liste des champs de la table,
| Alimenter ensuite une variable par groupe de champs en fonction de la
| lecture des enregistrements
| Ecrire le résultat dans un champs de la table courante.
| mais, gros pb, comment le réaliser (dur dur)....

Tu peux donner quelques lignes d'exemples pour voir ce que cela donne ?

Il faut bien se rendre compte que sans aucune structure, sans "nom de champ"
que l'on va retrouver de fichier en fichier ce sera coton !

Une structure répétitive serait le minimum... du style :
champ-textX... champ-textN, puis 3 champs numérique, puis 2 numérique,
champX...
et s'il peut y avoir des champs Null cela deviens quasiment impossible !

Quoi qu'il en soit, la structure, c'est en amont qu'il faut essayer de
l'imposer.
3stone (12/08/2006, 20h25)
re,

"Pascal"
[...]
| Pour ce qui est de la structure du fichier, je ne peux malheureusement pas
| le changer. En voici un petit échantillon pour illustrer le propos..
|
| Materiel Option1 Option2 Reseau1 Reseau2 Reseau3
| Carrte HD 1 25 6 5 2
| Carte BD 150 279 10 75 200
|
| ........
|
|
|
| Ce que je souhaite obtenir en résultat dans une table :
| Materiel Optionx Reseaux
| Carrte HD 26 13
| Carte BD 429 285
| ...
|
|
| Le nb d'options d'une fois sur l'autre change ainsi que le nb de réseaux
| (cela peut aller à une dizaine), mais existent dans toujours. Ma table
| source ne se limite bien sur pas à 2 familles mais à une dizaine.
| J'espère être assez clair.
| Par avance merci
| Pascal
|
|
| En travaillant sur le pb, ne peut on imaginer un code VB qui écrive une
| requête pour écrire dans une table et qui adapte les noms des champs sources
| (ceux qui varient) ?

Encore quelques questions et précisions... ;-)

- Ton fichier texte possède des "en-têtes" de champ ?
- Ces en-têtes ont toujours le format nnnnnX où les 'n' représente le nom et le 'X' le chiffre ?
- et... pour les variations, ce sont le nombre des options et reseaux qui
change d'une fois à l'autre ou bien également les colonnes "matériel" ?

Et tu souhaite ajouter cela dans une table (toujours la même) ou bien
créer un nouvelle table à chaque fois ?

Si tu répond oui aux 3 premières, il y à de l'espoir ;-)
Pascal (12/08/2006, 20h56)
"3stone" <home> a écrit dans le message de news:
u52YmyjvGHA.3392...
re,

"Pascal"
[...]
| Pour ce qui est de la structure du fichier, je ne peux malheureusement pas
| le changer. En voici un petit échantillon pour illustrer le propos..
|
| Materiel Option1 Option2 Reseau1 Reseau2 Reseau3
| Carrte HD 1 25 6 5 2
| Carte BD 150 279 10 75 200
|
| ........
|
|
|
| Ce que je souhaite obtenir en résultat dans une table :
| Materiel Optionx Reseaux
| Carrte HD 26 13
| Carte BD 429 285
| ...
|
|
| Le nb d'options d'une fois sur l'autre change ainsi que le nb de réseaux
| (cela peut aller à une dizaine), mais existent dans toujours. Ma table
| source ne se limite bien sur pas à 2 familles mais à une dizaine.
| J'espère être assez clair.
| Par avance merci
| Pascal
|
|
| En travaillant sur le pb, ne peut on imaginer un code VB qui écrive une
| requête pour écrire dans une table et qui adapte les noms des champs
sources
| (ceux qui varient) ?

Encore quelques questions et précisions... ;-)

- Ton fichier texte possède des "en-têtes" de champ ?
- Ces en-têtes ont toujours le format nnnnnX où les 'n' représente le nom et
le 'X' le chiffre ?
- et... pour les variations, ce sont le nombre des options et reseaux qui
change d'une fois à l'autre ou bien également les colonnes "matériel" ?

Et tu souhaite ajouter cela dans une table (toujours la même) ou bien
créer un nouvelle table à chaque fois ?

Si tu répond oui aux 3 premières, il y à de l'espoir ;-)
3stone (17/08/2006, 01h21)
Salut,

"Pascal"
[...]
| A tes 3 questions, la réponse est OUI.
| Pour X, une petite précision, x peut représenter 1 chiffre ou plusieurs
| caractères alphanumériques mais la racine est toujours la même.
| La colonne matériel est fixe.

La réponse est donc 'non' ;-)

Puisque la fin n'est pas numérique, comment savoir (deviner ;-)
ce qui fait partie de la racine ?
Puisque la racine n'a pas non plus de longueur fixe...
comment être sûr que 2 ou 3 caractères communs indiquent
bien une racine commune ?

Le résultat me semble tellement alléatoire, que je me demande
si dans de telles conditions il est vraiment souhaitable de vouloir
automatiser cela... une requête de sélection est tellement facile
et rapide à construire ;)
Pascal (17/08/2006, 07h09)
"3stone" <home> a écrit dans le message de news:
e3rJvqYwGHA.3420...
Salut,

"Pascal"
[...]
| A tes 3 questions, la réponse est OUI.
| Pour X, une petite précision, x peut représenter 1 chiffre ou plusieurs
| caractères alphanumériques mais la racine est toujours la même.
| La colonne matériel est fixe.

La réponse est donc 'non' ;-)

Puisque la fin n'est pas numérique, comment savoir (deviner ;-)
ce qui fait partie de la racine ?
Puisque la racine n'a pas non plus de longueur fixe...
comment être sûr que 2 ou 3 caractères communs indiquent
bien une racine commune ?

Le résultat me semble tellement alléatoire, que je me demande
si dans de telles conditions il est vraiment souhaitable de vouloir
automatiser cela... une requête de sélection est tellement facile
et rapide à construire ;)
3stone (17/08/2006, 13h51)
Salut,

"Pascal"
| En ce qui concerne les racines comme je le disais elle sont connues et en
| nombre limités et ne changent jamais. Elle font entre 5 et 8 caractères mais
| on peut en utiliser que les 5 premier cela est suffisant pour garantir leur
| unicité.

Dans ce cas, c'est faisable !

Quel est le séparateur dans le fichier de départ ?
l'espace, une tabulation ou point-virgule ?

Discussions similaires