Construire une base de donnees a partir d'un sous-tableau

Résolu/Fermé
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013 - Modifié par PohTato le 11/04/2013 à 09:34
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 19 avril 2013 à 03:41
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.




18 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 avril 2013 à 10:27
Bonjour,
Pour "extraire" tes 3 colonnes, tu n'a que de les copier sur une autre feuille ! quel est la difficulté ?
A+
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
11 avril 2013 à 10:41
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:

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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 avril 2013 à 13:40
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+
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 12/04/2013 à 02:51
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.
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 12/04/2013 à 10:05
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 12/04/2013 à 10:07
Tes deux liens sont "indisponibles" ?
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 .
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 12/04/2013 à 10:25
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)
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
12 avril 2013 à 11:14
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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 avril 2013 à 11:20
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... :-)
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
12 avril 2013 à 11:30
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 !
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 12/04/2013 à 12:28
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 .
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 avril 2013 à 14:01
Un exemple de ce que je veux dire dans mon poste précédant.
Classeur exemple
A+
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 15/04/2013 à 03:02
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 ^^
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 15/04/2013 à 04:59
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?

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.
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 15/04/2013 à 08:44
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 ^^)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 avril 2013 à 09:07
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
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 15/04/2013 à 09:51
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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 avril 2013 à 12:09
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+
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
16 avril 2013 à 05:09
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.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
16 avril 2013 à 11:43
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+
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
Modifié par PohTato le 18/04/2013 à 04:35
Hmm, merci, mais je ne comprends pas l'utilite de ce bloc:

    '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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 avril 2013 à 11:30
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)
0
PohTato Messages postés 40 Date d'inscription mercredi 2 mai 2012 Statut Membre Dernière intervention 3 mai 2013
19 avril 2013 à 03:24
Et il y a moyen de faire un transfert des donnees excel a SQL Server?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
19 avril 2013 à 03:41
Je ne connais pas SQL Server, crée une nouvelle question et si celle-ci est résolue clic sur le lien "résolu" en haut à gauche de ta 1ère question.
A+
0