Construire une base de donnees a partir d'un sous-tableau
Résolu
PohTato
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un tableau avec bien une 50aine de colonnes, et j'ai besoin de creer une base de donnees avec les colonne 2, 3 et 5.
Pour ca, je voulais extraire ces colonnes dans un nouveau tableau qui serait dans une nouvelle feuille dans un premier temps, puis, avec un macro, transformer le nouveau tableau en base de donnees.
C'est possible?
Merci de toute aide,
cordialement
P.S.: Desole, pas d'accents sur mon clavier.
j'ai un tableau avec bien une 50aine de colonnes, et j'ai besoin de creer une base de donnees avec les colonne 2, 3 et 5.
Pour ca, je voulais extraire ces colonnes dans un nouveau tableau qui serait dans une nouvelle feuille dans un premier temps, puis, avec un macro, transformer le nouveau tableau en base de donnees.
C'est possible?
Merci de toute aide,
cordialement
P.S.: Desole, pas d'accents sur mon clavier.
A voir également:
- Construire une base de donnees a partir d'un sous-tableau
- Tableau word - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
18 réponses
Bonjour,
Pour "extraire" tes 3 colonnes, tu n'a que de les copier sur une autre feuille ! quel est la difficulté ?
A+
Pour "extraire" tes 3 colonnes, tu n'a que de les copier sur une autre feuille ! quel est la difficulté ?
A+
La difficulte c'est que je voulais que ca soit dynamique: toute modif sur la colonne feuille1 affectera la colonne feuille2 :D J'aurais du mieux preciser
Mais j'ai avance de mon cote:
-J'ai 3 feuilles: Data, DatabaseCreator et Database
-Data: C'est le gros tableau
-DatabaseCreator: c'est le sous-tableau cree grace a la fonction =Data!B1 (etc...)
-Database: La ou il y aura ma BDD une fois le macro execute + un super bouton qui permet de la generer (macro assigne au bouton, donc).
Enfin, en theorie le bouton doit generer la BDD mais a l'execution de celui-ci, le programme me renvoie une erreur: 400 (et je ne comprends absolument pas la signification).
Le truc c'est que je commence le VBA aujourd'hui, donc je suis un peu paume encore. totu ce que j'ai fait c'est pomper du code. Le voici:
Mais j'ai avance de mon cote:
-J'ai 3 feuilles: Data, DatabaseCreator et Database
-Data: C'est le gros tableau
-DatabaseCreator: c'est le sous-tableau cree grace a la fonction =Data!B1 (etc...)
-Database: La ou il y aura ma BDD une fois le macro execute + un super bouton qui permet de la generer (macro assigne au bouton, donc).
Enfin, en theorie le bouton doit generer la BDD mais a l'execution de celui-ci, le programme me renvoie une erreur: 400 (et je ne comprends absolument pas la signification).
Le truc c'est que je commence le VBA aujourd'hui, donc je suis un peu paume encore. totu ce que j'ai fait c'est pomper du code. Le voici:
Sub to_table() 'Go to report and save data Sheets("Database").Select Range("B1:B3").Select Selection.Copy 'Test: where to paste previous copied data Sheets("DatabaseCreator").Select valueA2 = Range("A2").Value If valueA2 = "" Then Range("A2").Select Else Range("A1").Select Selection.End(x1Down).Select active_row = ActiveCell.Row Range("A" & active_row + 1).Select End If 'Saving the row where to insert data active_row = ActiveCell.Row 'Transpose paste Range("A" & active_row).Select Selection.PasteSpecial Pase:=x1PasteAllExceptBorders, Operation:=x1None, SkipBlanks:=False, Transpose:=True 'Delete report information Sheets("Database").Select Range("B1:B3").Select Selection.ClearContents Range("B1").Select 'Go back to report Sheets("DatabaseCreator").Select Range("A1").Select End Sub
Le plus simple...
Crée un classeur avec une 10aine de lignes sur chaque feuille (sans donnée confidentielle) et met le à disposition, sur www.Cjoint.com par exemple en donnant le lien dans un poste suivant.
A+
Crée un classeur avec une 10aine de lignes sur chaque feuille (sans donnée confidentielle) et met le à disposition, sur www.Cjoint.com par exemple en donnant le lien dans un poste suivant.
A+
De toute facon je suis en train d'avancer sur un classeur exemple histoire de pas bousiller l'original en cas de fausse manip' :)
https://www.cjoint.com/?CDmcQveRLcZ
Pour rappel, mon but est de faire une BDD avec, ici, Nombre, Couleur et Pays.
Je mettrai le doc a jour si j'avance.
https://www.cjoint.com/?CDmcQveRLcZ
Pour rappel, mon but est de faire une BDD avec, ici, Nombre, Couleur et Pays.
Je mettrai le doc a jour si j'avance.
Ok, oubliez le fichier joint ci-dessus.
J'ai 2 fichiers, un avec le tableau (https://www.cjoint.com/?CDmjyukk4Bi et un qui a le macro (https://www.cjoint.com/?CDmjDkmR3Kh
Le but est qu'en tapant le nom de n'importe quel fichier excel, en tapant le nom d'une page puis en donnant les colonnes desirees ainsi que leur taille et l'endroit ou elles commencent, je genere un nouveau tableau (option bonus: garder la meme mise en forme).
Le probleme c'est que j'arrive plus a copier les valeurs de mon fichier source alors qu'avant j'y arrivais et je ne vois pas l'erreur.
Si besoin d'infos pour les variables, n'hesitez pas.
P.S.: je sais qu' il y a une fonction pour savoir la fin d'un tableau (plutot que de la demander comme je le fais), mais je ne la connais pas et je ne sais pas m'en servir. Des infos?
J'ai 2 fichiers, un avec le tableau (https://www.cjoint.com/?CDmjyukk4Bi et un qui a le macro (https://www.cjoint.com/?CDmjDkmR3Kh
Le but est qu'en tapant le nom de n'importe quel fichier excel, en tapant le nom d'une page puis en donnant les colonnes desirees ainsi que leur taille et l'endroit ou elles commencent, je genere un nouveau tableau (option bonus: garder la meme mise en forme).
Le probleme c'est que j'arrive plus a copier les valeurs de mon fichier source alors qu'avant j'y arrivais et je ne vois pas l'erreur.
Si besoin d'infos pour les variables, n'hesitez pas.
P.S.: je sais qu' il y a une fonction pour savoir la fin d'un tableau (plutot que de la demander comme je le fais), mais je ne la connais pas et je ne sais pas m'en servir. Des infos?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tes deux liens sont "indisponibles" ?
Pour la colonne A...
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Pour la colonne A...
DerLig = Cells(Rows.Count, "A").End(xlUp).Row
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Ah, bizarre.
Je refais:
source: https://www.cjoint.com/c/CDmksa88hOq
macro: http://cjoint.com/13av/CDmksyoNbcZ.htm
J'ai reussi a corriger l'erreur (par contre je sais pas comment), je peux maintenant copier les donnees de source au classeur du macro. Sauf que la je copie betement A1 et faudrait copier le tableau entier... On peut faire un Range("" & Range("L3")) ?
Je vais tester d'incrementer ton code, merci.
(les codes sous le bouton c'est du brouillon)
Je refais:
source: https://www.cjoint.com/c/CDmksa88hOq
macro: http://cjoint.com/13av/CDmksyoNbcZ.htm
J'ai reussi a corriger l'erreur (par contre je sais pas comment), je peux maintenant copier les donnees de source au classeur du macro. Sauf que la je copie betement A1 et faudrait copier le tableau entier... On peut faire un Range("" & Range("L3")) ?
Je vais tester d'incrementer ton code, merci.
(les codes sous le bouton c'est du brouillon)
ca y est, a priori ca a marche. Un moyen de garder la mise en forme? (et non pas seulement le texte)
source (la meme): https://www.cjoint.com/c/CDmksa88hOq
macro: http://cjoint.com/13av/CDmlnAkWMEP.htm
source (la meme): https://www.cjoint.com/c/CDmksa88hOq
macro: http://cjoint.com/13av/CDmlnAkWMEP.htm
Tu a beaucoup de classeur susceptibles d'être ouvert ?
Tu a une façon bien compliquée d'entrer les coordonnées de ce que tu veux voir, connaître le Chemin et nom des classeurs, le nom des feuilles, les plages à importer...
Ceux qui vont se servir de ton appli devrons avoir une mémoire équivalente à deux éléphants... :-)
Tu a une façon bien compliquée d'entrer les coordonnées de ce que tu veux voir, connaître le Chemin et nom des classeurs, le nom des feuilles, les plages à importer...
Ceux qui vont se servir de ton appli devrons avoir une mémoire équivalente à deux éléphants... :-)
Le truc c'est que ca doit marcher pour n'importe quel classeur donne. J'essaye de faire au plus simple possible mais j'ai appris le VBA hier, donc c'est pas encore top ^^
Si tu as des propositions, n'hesite pas.
Mais je n'ai pas encore fini, il manque quelques trucs et aussi le fait de pouvoir trier les donnees avec un menu deroulant, par exemple je clic sur lettre et ca m'affiche toutes les lettres disponibles puis si je selectionne "A", ca ne m'affichera que les lignes avec des lettres A. Et ca j'ai pour l'instant aucune idee de comment je vais faire (bien que j'aie google pour m'aider !)
Enfin, je donne plus d'infos plus tard, la j'ai pas trop le temps...
Mais toujours ouvert aux propositions !
Si tu as des propositions, n'hesite pas.
Mais je n'ai pas encore fini, il manque quelques trucs et aussi le fait de pouvoir trier les donnees avec un menu deroulant, par exemple je clic sur lettre et ca m'affiche toutes les lettres disponibles puis si je selectionne "A", ca ne m'affichera que les lignes avec des lettres A. Et ca j'ai pour l'instant aucune idee de comment je vais faire (bien que j'aie google pour m'aider !)
Enfin, je donne plus d'infos plus tard, la j'ai pas trop le temps...
Mais toujours ouvert aux propositions !
Je verrais plutôt...
Sélectionner et ouvrir un classeur à partir de l'explorateur de fichier (par VBA).
Sélectionner la plage à traiter avec un inputBox pour un Range (par VBA).
pour la suite faudrait voir exactement ce que tu veux
EDIT : pour la sélection des lettres ça peu aussi se faire facilement avec un filtre automatique, que l'ont peu aussi créer par VBA.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Sélectionner et ouvrir un classeur à partir de l'explorateur de fichier (par VBA).
Sélectionner la plage à traiter avec un inputBox pour un Range (par VBA).
pour la suite faudrait voir exactement ce que tu veux
EDIT : pour la sélection des lettres ça peu aussi se faire facilement avec un filtre automatique, que l'ont peu aussi créer par VBA.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Un exemple de ce que je veux dire dans mon poste précédant.
Classeur exemple
A+
Classeur exemple
A+
Tu peux me le linker par cjoint plutot? Il semblerait que ce soit un des rares sites de partage qui marche la ou je me situe ^^
Le but ultime est de faire un tableau croise dynamique avec des donnes recoltees sur plusieurs fichiers excels et qui peuvent etre mises a jours. Par exemple si j'ai une colonne qui s'appelle 'Lettres' et que j'en ai une nouvelle, je les fusionne. Mais bon, ca a pas l'air tres dur a faire, ce qui m'embete c'est de rendre l'appli facilement utilisable ^^
Le but ultime est de faire un tableau croise dynamique avec des donnes recoltees sur plusieurs fichiers excels et qui peuvent etre mises a jours. Par exemple si j'ai une colonne qui s'appelle 'Lettres' et que j'en ai une nouvelle, je les fusionne. Mais bon, ca a pas l'air tres dur a faire, ce qui m'embete c'est de rendre l'appli facilement utilisable ^^
En suivant tes conseils, j'avance peu a peu sur l'harmonisation pour l'utilisateur.
Il y a moyen de selectionner une feuille avec un inputbox?
J'ai essaye ca mais ca marche pas... voici le nouveau doc au passage: https://www.cjoint.com/?CDpe5DKMcVX
J'avance peu a peu, je vais essayer d'enlever tous les champs a remplir.
Il y a moyen de selectionner une feuille avec un inputbox?
Set ws = Application.InputBox("Please select your Sheet with your mouse", "SPECIFY SHEET", Type:=8) On Error GoTo 0 If ws Is Nothing Then Exit Sub End If
J'ai essaye ca mais ca marche pas... voici le nouveau doc au passage: https://www.cjoint.com/?CDpe5DKMcVX
J'avance peu a peu, je vais essayer d'enlever tous les champs a remplir.
Voila, j'ai suivi tes conseils et ca rends mieux :D
J'arrive juste pas a selectionner les feuilles avec la souris...
Pour rajouter un filtre auto;atique, c'est comment?
Nouvelle version plus clean: https://www.cjoint.com/?CDpiSumAh5I
(j'espere que je flood pas trop ^^)
J'arrive juste pas a selectionner les feuilles avec la souris...
Pour rajouter un filtre auto;atique, c'est comment?
Nouvelle version plus clean: https://www.cjoint.com/?CDpiSumAh5I
(j'espere que je flood pas trop ^^)
Voila, j'ai suivi tes conseils et ca rends mieux :D
ça rends mieux ? ça ressemble plus à rien oui....
Quand tu sélectionne une plage y à pas besoin de connaître le nom de la feuille
ça rends mieux ? ça ressemble plus à rien oui....
Quand tu sélectionne une plage y à pas besoin de connaître le nom de la feuille
Hey, comment ca ca ressemble plus a rien? xD
J'ai enleve cette histoire de feuille, mais dans ce cas si j'ai envie de prendre une colonne feuill2 ca ne marche plus. Je dois m'etre plante quelque part ou oublie un truc. Une solution? https://www.cjoint.com/?CDpjY45VygO
Mais pourquoi ca ressemble a rien? Il y a 3 boutons, la premiere feuille est faite pour etre temporaire, la deuxieme va enregistrer les tableaux extraits pour toujours (en mettant a la suite des colonnes qui auraient le meme nom).
"Select Data" prends les colonnes des autres docs
"Import Data" va mettre definitivement les colonnes sur l'autre feuille en respectant mes contraintes dites ci-dessus (en construction)
"Clear" pour effacer feuill1
J'ai enleve cette histoire de feuille, mais dans ce cas si j'ai envie de prendre une colonne feuill2 ca ne marche plus. Je dois m'etre plante quelque part ou oublie un truc. Une solution? https://www.cjoint.com/?CDpjY45VygO
Mais pourquoi ca ressemble a rien? Il y a 3 boutons, la premiere feuille est faite pour etre temporaire, la deuxieme va enregistrer les tableaux extraits pour toujours (en mettant a la suite des colonnes qui auraient le meme nom).
"Select Data" prends les colonnes des autres docs
"Import Data" va mettre definitivement les colonnes sur l'autre feuille en respectant mes contraintes dites ci-dessus (en construction)
"Clear" pour effacer feuill1
reprend mon exemple et suis le code, ça ira mieux.
Laisse les fonctions séparées, c'est plus clair
Pour effacer la feuille c'est sheets("Feuil1").Cells.ClearContents, mais si tu examinais mon code tu l'aurais déjà vu.
Mon code détecte automatiquement si c'est une sélection par colonne ou par plage
Tu posais aussi la question sur autofilter !! Egalement dans mon code.
Bref, examine déjà tout ça et quand tu aura compris reviens avec quelque chose de net et concret.
A+
Laisse les fonctions séparées, c'est plus clair
Pour effacer la feuille c'est sheets("Feuil1").Cells.ClearContents, mais si tu examinais mon code tu l'aurais déjà vu.
Mon code détecte automatiquement si c'est une sélection par colonne ou par plage
Tu posais aussi la question sur autofilter !! Egalement dans mon code.
Bref, examine déjà tout ça et quand tu aura compris reviens avec quelque chose de net et concret.
A+
Je ne peux pas lire ton code, cf la premiere ligne du premier commentaire de ton post: Tu peux me le linker par cjoint plutot? Il semblerait que ce soit un des rares sites de partage qui marche la ou je me situe ^^
Je n'ai pas acces au site par lequel tu es passe.
Je n'ai pas acces au site par lequel tu es passe.
Me semblais bien que tu n'avais pas regardé mon exemple, car la réponse à tes questions y est proposée.
https://www.cjoint.com/?CDqlMMrhk2t
A+
https://www.cjoint.com/?CDqlMMrhk2t
A+
Hmm, merci, mais je ne comprends pas l'utilite de ce bloc:
J'ai l'impression qu'un simple
Bon, tu vas me taper (mais vraiment) mais voila ce que j'ai. Les 3 premiers boutons sont importants, le reste c'est du brouillon. J'avais cree le deuxieme bouton avant de voir ton code, donc le code est horriblement degueulasse (mais il marche :p). Et j'ai pas encore separe les fonctions.
https://www.cjoint.com/?CDseJln3B67
'Copie la plage sélectionnée S = Plage.Address S = Replace(S, "$", "") 'Voir si plage en colonne(s) ou en cellule(s) TB = Split(S, ":") If Len(TB(0)) = 1 Then 'par colonne Plage.Copy Wks.Columns(1) Else 'Par cellules Plage.Copy Wks.Range("A1") End If
J'ai l'impression qu'un simple
Plage.Copy Wks.Range("A1")suffit.
Bon, tu vas me taper (mais vraiment) mais voila ce que j'ai. Les 3 premiers boutons sont importants, le reste c'est du brouillon. J'avais cree le deuxieme bouton avant de voir ton code, donc le code est horriblement degueulasse (mais il marche :p). Et j'ai pas encore separe les fonctions.
https://www.cjoint.com/?CDseJln3B67
je voulais extraire ces colonnes dans un nouveau tableau qui serait dans une nouvelle feuille
Essaie un peu d'extraire ces colonnes avec ton code !! (Sélectionner les colonnes)
Essaie un peu d'extraire ces colonnes avec ton code !! (Sélectionner les colonnes)