Créer une base de données depuis plusieurs fichiers

Bonjour,

J'ai encore besoin d'aide!

J'aimerais créer une base de donnée par VBA en extrayant divers cellules d'une feuille d'un classeur.

Etape: choisir le classeur, la feuille (0 Page de garde)

dans cette feuille, copier les cellules B8, D9, B12 etc.

coller ces données dans la première ligne vide de mon classeur (Base de donnée)

Sub extraction()

    Application.ScreenUpdating = False
    Dim FileSource As String
    Dim Fichier As String

    ChDir "N:\chemin du dossier"
    FileSource = Application.GetOpenFilename("Tous les fichiers (*.*),*.*") 'c'est ici que le choix du fichier se faire

End Sub

Merci d'avance pour le coup de main

Andreas

Bonjour,

Fournir le classeur source et le classeur cible.

A+

Bonjour Galopin01, merci pour cette rapide réponse,

ci-joint, le fichier source (Données du projet) et la base de donnée (Classeur BD)

Je dois en gros, récupérer toutes les données des cellules jaune, plus quelque autres.

31classeur-bd.xlsm (18.54 Ko)

Je débute mais suis assez logique!

Un grand merci

Bonjour,

Pour moi tes cellules sont toutes blanches, j'ai beau essayer de jouer avec les thèmes, bernique essaie un mode coloration différent et joint moi un fichier lisible...

Dois-je comprendre que tu veux compléter ta BD en ouvrant tous les fichier qui seront compris dans un répertoire donné ?

J'espère que toutes tes fiches seront rigoureusement identiques !

Edit : Ou mieux mets dans la première ligne de ta BD les adresse des cellules sources.

A+

Re,

en faite, afin de comprendre aussi le code, je peux lister les cellules dont j'ai besoin:

la couleur n'est pas forcément le critère de sélection.

B7, F7, J7, B8 etc. (Elles sont en couleur)

mais: exemple B30 est en blanc et j'en ai besoin aussi.

Y a t'il la possibilité de lister ces cellules dans un ordre, et les coller a la suite dans ma base de donnée sur une seul ligne?

J'ai plusieurs fichier(une centaine ou plus) a extraire.

Merci et bon appétit vu l'heure

Oui c'est ça tu mets sur la première ligne les adresses des cellules qui t'intéressent.

A+

Re,

du coup, pour compliquer, contrôler que la nouvelle ligne dans la base de donnée n'existe pas déjà.

Tu as besoin d'autre chose?

J'ai trouvé quelque chose qui peut .... là: https://forum.excel-pratique.com/download/file.php?id=205619

Mais ça ne laisse pas choisir le fichier, et ça efface les données source.

Du coup je me suis débrouillé.. il te faudra te débrouiller avec les références manquantes ou erronnées !

29classeurbd-vg.xlsm (21.73 Ko)

A+

Il te faudra sans doute rajouter ton ChDir

Si tu ne veux pas de message pour update link

Tu modifies

   Workbooks.Open FileS, UpdateLinks:=False

A+

si j'ose abuser encore un peu,

merci de me mettre en fin de ligne ce qu'elle fait 'en commentaire

J'ai donc mis a jour mon Chdir

Je peux donc choisir mon fichier, et après ça Bug ici : Workbooks.Open FileS, UpdateLinks:=False

en choisissant un autre fichier.

Les fichiers on tous plusieurs feuilles, et j'ai besoin des infos dur la feuille "Base de donnée"

Merci d'avance

Andreas

Là je peux pas te dire c'est un problème entre toi et ton ChDir... peut-être un problème de fichier et chemin...

Fait juste un enregistrement de la manière ou tu ouvres le fichier et donne moi l'enregistrement .

A+

Re,

si le fichier est enregistré avec la feuille "0 Page de garde" ouverte en dernier, ça bug ici : [A7:K75].MergeCells = False

Mais je ne comprend pas:

b(1) = a(1, 1) ' que fais cette ligne?

b(2) = a(2, 1)

b(3) = a(1, 9)

b(4) = a(2, 9)

b(5) = a(4, 1)

b(6) = a(5, 1)

b(7) = a(7, 1)

b(8) = a(7, 2)

b(9) = a(7, 4)

b(10) = a(17, 1)

b(11) = a(18, 1)

b(12) = a(19, 1)

b(13) = "" ' pourquoi du vide?

Je suis vraiment novice!

Merci beaucoup

Andreas

Là je peux pas te dire c'est un problème entre toi et ton ChDir... peut-être un problème de fichier et chemin...

Fait juste un enregistrement de la manière ou tu ouvres le fichier et donne moi l'enregistrement .

A+

Comment je fais ça?

Ça fait beaucoup de questions et je n'ai pas de boule de cristal.

La macro marche avec le classeur que tu m'as donné. Mais une macro est une pièce d'horlogerie : Si tu me donnes un fichier bidon, je te donnes une macro bidon : TAPUKA adapter !

Donc Si ton classeur source à plusieurs feuilles il faut s'assurer que tu es sur "la bonne feuille" sinon l'activer (en espérant qu'elle s'appelle toute avec le même nom... Ensuite tu peux exécuter la suite de la macro.

a et b sont des variables Array et les variables Array c'est complexe; ça ne s'explique pas en 5 lignes sur un forum il y a de nombreux exposés sur la tecniques des Array. Ce sont des instruments puissants de manipulations des données.

Donc je pars d'un Array a qui contient les données de [B7:K75] donc c'est en quelque sorte comme un tableau Excel en 2D

mais sans quadrillage ni couleurs ni formules, il ne contient que des valeurs...

J'ai crée un Array b(25) dans les Dim...

Cet Array contient 26 éléments numérotés de 0 à 25... à la différence de l'Array a ses 26 éléments sont en ligne comme la ligne cible.

Et je charge cet Array b avec les éléments de l'Array a

b(1) se charge avec la valeur de a(1,1) (B7)

b(2) se charge avec la valeur de a(2, 1) (B8)

... et ainsi de suite et à la fin

b(0) incrémente la première colonne de ta BD (Application.Max(blabla...)

Enfin YAPUKA coller b sur la ligne qu'on ajoute à ton tableau structuré...

Les Array et le tableau structuré qui va avec sont environ 100 fois plus rapide que la copie cellule par cellule des valeurs qui t'intéressent.

EDIT : Pourquoi du vide parce que ton tableau est mal foutu et je n'ai pas su ou aller à la pêche pour récupérer certaines infos...

OK ?

Comment je fais ça?

Comment tu fais quoi ? Enregistrer une macro ?

Tu vas dans l'onglet Développeur puis tu cliques à gauche sur Enregistrer une macro.

Tu ouvres alors ton fichier source. puis quand il est ouvert tu reviens sur ton classeur BD et tu fais Arrêter l'enregistrement.

Tu fermes alors le classeur source , tu vas dans VBA et tu me donnes le contenu de la macro enregistrée dans Module1

A+

Re,

Milles merci pour ton temps et tes explications,

je dois avouer que je suis perdu dans tes explications.

Mes classeurs contiennent des données sensibles de clients, donc je ne peux les transmettre.

J'essaie au mieux de mes connaissances de te renseigner pour que l'on puisse avancer.

Je reviendrais si...

Encore un grand merci

Andreas

Ce n'est pas un reproche... juste une constatation !

T'inquiète dans ce métier comme dans la vie on n'a jamais fini d'apprendre.

Oh loin de moi l'idée que je sais tout,

seulement comme je suis autodidacte, il faut que je comprenne ce que je fais, de plus, je n'ai pas toute ma tête.

Sans y mettre d'excuses, je reviens d'un Burnout après le décès de mon fils.(Parenthèse privée)

En tous cas, vraiment merci pour ce coup de main.

Andreas

Voici la copie de la macro pour ouvrir le fichier et selectionner la bonne feuille.

Sub Macro3()

'

' Macro3 Macro

'

'

Sheets("0 Page de garde").Select

Range("J5").Select ? cette cellule contient le N+ de projet qui sera mis en colonne "A" pour référence unique

Windows("ClasseurBD VG (2).xlsm").Activate ' retour au classeur BD

End Sub

Cette macro ne m'intéresse pas ou plus exactement elle est insuffisante : Comme tu as une erreur sur Workbooks.Open c'est ce qu'il y a juste avant qui m'intéresse ; Le chemin dans N:

Rechercher des sujets similaires à "creer base donnees fichiers"