Extraction de données via VBA

Bonjour,

J'ai souvent utilisé ce forum pour résoudre nombre de mes problèmes sur excel .. Mais cette fois je fais directement appel à vous, étant totalement novice sur VBA, me contentant de copier coller en essayant vaguement de comprendre ..

Je travaille sur plusieurs centaines de fichiers qui servent à qualifier différentes caractéristiques de produits et j'ai besoin de récupérer certaines valeurs de chacun de ces fichiers pour en faire une sortes de fichier récap.

Les fichiers d'origines sont remplis selon un modèle défini, mais le problème est qu'il y a parfois eu des créations de colonne et/ou de ligne : ces valeurs ne sont donc pas toujours placées au même endroit dans le fichier initial.

Aujourd'hui j'ai réussi à récupérer les valeurs voulus par le biais de la fonction indirect() (pour aller sur le fichier voulu), associé avec Index() et Equiv() qui me permettent de récupérer les valeurs. Je fais cette formule une dizaine de fois pour compenser les éventuelles lignes et colonnes crées en plus .. [toutes les formules qui sont à côté de "ligne" et "colonne" dans le "Exemple fichier recap"]

Je ne suis pas sûr d'être clair, je joins un fichier exemple, qui sera plus clair. J'ai supprimer toutes mes valeurs confidentielles, et remplacer les intitulés de mes valeurs à récupérer !

Les valeurs qui sont dans les colonnes H I J auraient pu être en J K L ou en G H I par exemple .. Idem elles auraient pu être décalées d'une ou plusieurs lignes.

En revanche, les intitulés "Chat" "Chien"... eux sont toujours les mêmes.

Question 1 : serait-il possible de faire cette recherche via une macro qui le ferait en boucle sur plusieurs colonnes / lignes pour récupérer ces valeurs ?

Question 2 : comment faire pour par exemple automatiser cela sur tous les fichiers contenus dans un dossier ? (sachant que l'onglet concerné n'a pas un nom fixe)

Si tout n'est pas clair, j'essaierai de répondre au mieux à vos questions !

Merci !

Bonjour Bastienni et

Je ne comprends pas

Ou est ta récap ?

Dans ton fichier "Récap" tu n'as qu'un seule tableau avec 1 seule cellule par espèce, je n'apelle pas ça une récap

@+

Bonjour, merci

Au temps pour moi, je me suis mal exprimé.

J'ai en fait besoin de créer un document sur le modèle de l'onglet Modèle du Fichier Récap, qui viendrait chercher les valeurs nécessaire dans un fichier du type du Fichier Base.

Et je dois faire ça pour plusieurs centaines de Fichier Base.

Aujourd'hui j'ouvre mon récap, j'ouvre ma base234 admettons, je rentre le nom du fichier et le nom de l'onglet dans mon onglet Liste sur Fichier recap, et j'obtiens donc toutes mes valeurs. Je n'ai plus qu'à exporter tout ça en PDF.

C'est peut être plus clair ?

Bonsoir Bastien

Voici le fichier avec du code

Tu as une feuille [Params] dans laquelle tu dois mettre le chemin d'accès de tes fichiers "base"

Ensuite en cliquant sur le bouton "MàJ FICHE", le code va t'ouvrir les fichiers du répertoire un par un

Trouver les termes "Chien", "Cheval", etc.. et importer les valeurs

Ensuite un fichier PDF est créé à l'endroit du fichier joint

@+

Re,

Merci beaucoup !! Je vais tester tout ça dès que j'ai un peu de temps !

Bruno, lorsque je lance la Macro, la fenêtre Visual Basic s'ouvre et m'affiche "Erreur de compilation : Variable non définie"

Cela fonctionnait chez toi ?

Re,

Désolé, j'ai fait 2 modifs de dernière minute et je n'ai pas re-testé

Tu peux télécharger le fichier que j'ai modifié

@+

Ca m'a l'air parfait ! Je vais tenter de l'adapter maintenant avec mon fichier originel ! Merci beaucoup, je placerai en résolu le sujet dès que j'aurai validé sur mon fichier !

Encore merci !

Bonjour Bruno,

Après avoir essayé de l'adapter à mes fichiers pro tout fonctionne à merveille à priori ! Merci encore !

Mais j'ai plusieurs questions :

> Que se passe-t-il si le mot qui est recherché est présent à plusieurs endroits dans la feuille ?

> J'ai modifié l'enregistrement pour que ça enregistre le fichier en .xlsx, j'aimerai juste qu'au moment de lancer la macro, je puisse choisir le dossier où vont s'enregistrer les différents fichiers, peux-tu m'expliquer comment faire ? (Tous les fichiers seront enregistrés dans le dossier choisi, mais je souhaite pouvoir choisir à chaque lancement de la macro)

   ' Définir le nom du fichier
    sFic = "FT Process -" & Wbk.Name

    ' Lancer l'enregistrement de la feuille modèle

    ShtM.SaveAs Filename:=sPath & sFic, FileFormat:=xlWorkbookDefault
    

Merci d'avance !

Bon ween end !

Bonsoir Bastien

Après avoir essayé de l'adapter à mes fichiers pro tout fonctionne à merveille à priori !

Mais j'ai plusieurs questions :

> Que se passe-t-il si le mot qui est recherché est présent à plusieurs endroits dans la feuille ?

Qu-'est ce que tu entends par là, que tu peux avoir plusieurs fois "Chien", "Cheval" ou autre

> J'ai modifié l'enregistrement pour que ça enregistre le fichier en .xlsx, j'aimerai juste qu'au moment de lancer la macro, je puisse choisir le dossier où vont s'enregistrer les différents fichiers, peux-tu m'expliquer comment faire ? (Tous les fichiers seront enregistrés dans le dossier choisi, mais je souhaite pouvoir choisir à chaque lancement de la macro)

Ajout d'une petite fonction pour le choix du dossier au démarrage

A+

C'est Bastien, comme l'indique mon pseudo ;p

Oui c'est bien ce que j'entend, je ne suis pas celui qui a crée tous les fichiers à traiter, peut être que je n'aurai ce problème nulle part, mais j'aurai juste voulu savoir ce qu'il se passerait

Concernant le choix du dossier, ou bien j'ai loupé quelque chose, ou bien y a une erreur ? J'ai recopié la fonction et ajouter les lignes que tu as ajoutées au début du code, j'ai bien une fenêtre qui me demande un dossier, mais tout s'enregistre toujours au dossier de base et non celui choisi ?

EDIT : tu avais nommé la variable du chemin du dossier de la même façon que le chemin renseigné pour la recherche des données, donc le choix du dossier s'annulait automatiquement ! J'ai choisi un autre nom et tout fonctionne merci

Re,

Pour répondre à ta première question

[quote=bastienni post_id=862694 time=1587763276 user_id=70340]

> Que se passe-t-il si le mot qui est recherché est présent à plusieurs endroits dans la feuille ? [/Quote]

Mon code s'arrête au premier critère trouvé

Merci pour ta réponse, je pense que je peux mettre le sujet en résolu, je ne pense pas qu'il y ait d'erreurs !

Merci pour tout !

Hello Bruno,

Tout fonctionne correctement, j'ai encore quelques questions :

> Est-il possible, quand la macro passe en erreur (par exemple si elle ne trouve pas le terme recherché), que le code continue à se dérouler et affiche les erreurs à la fin ? Cela permettrait de remplir toutes les autres cellules où il n'y a pas d'erreur ! et de n'avoir à recopier à la main seulement celles en erreur.

> Est-il possible d'ignorer la première valeur trouvée (ou les deux premières, ou les trois premières ..) ? Je m'explique : si j'ai en B5 "Chien" et que je veux récupérer C5 dans un premier temps, mais que j'ai également "Chien" en B48 et que je veux récupérer C48.

Merci à toi,

Peut être qu'on peut lui dire de chercher à partir d'une certaine cellule ? cela pourrait contrer mon soucis !

Salut Bastien,

Tout fonctionne correctement, j'ai encore quelques questions :

> Est-il possible, quand la macro passe en erreur (par exemple si elle ne trouve pas le terme recherché), que le code continue à se dérouler et affiche les erreurs à la fin ? Cela permettrait de remplir toutes les autres cellules où il n'y a pas d'erreur ! et de n'avoir à recopier à la main seulement celles en erreur.

Quand tu dis "à la fin" de quelle fin tu parles ?

> Est-il possible d'ignorer la première valeur trouvée (ou les deux premières, ou les trois premières ..) ? Je m'explique : si j'ai en B5 "Chien" et que je veux récupérer C5 dans un premier temps, mais que j'ai également "Chien" en B48 et que je veux récupérer C48

Arff... on y arrive aux problématiques

Ne serait-il pas intéressant de mettre plusieurs lignes sur le modèle, qui se remplieraient pour de multiple cas

Si oui, combien ?

@+

Quand tu dis "à la fin" de quelle fin tu parles ?

En gros aujourd'hui je lance la macro, admettons qu'elle ne trouve pas le mot "Chien", dans ce cas la macro s'arrête avec une alerte Erreur. J'aimerai que même si elle ne trouve pas le mot chien, elle continue pour remplir tout le reste et seulement alors elle m'annonce qu'y a eu une erreur durant le code. C'est plus clair ?

Arff... on y arrive aux problématiques

Tout fonctionne sur les cas généraux qui n'ont pas de spécificités chelou oui ^^'

Ne serait-il pas intéressant de mettre plusieurs lignes sur le modèle, qui se remplieraient pour de multiple cas

Si oui, combien ?

Ce cas là serait pour un autre fichier modèle sensiblement identique. Par exemple :

Je cherche le premier "Chien", je récupère la valeur à sa droite et je la met en C3

Je cherche le second "Chien", je récupère la valeur à sa droite et je la met en C34

idem et je met en C54

idem et je met en C67

Max 4 fois normalement ! C'est possible ça ?

Re,

[quote=bastienni post_id=863745 time=1588006481 user_id=70340]

Quand tu dis "à la fin" de quelle fin tu parles ?

En gros aujourd'hui je lance la macro, admettons qu'elle ne trouve pas le mot "Chien", dans ce cas la macro s'arrête avec une alerte Erreur. J'aimerai que même si elle ne trouve pas le mot chien, elle continue pour remplir tout le reste et seulement alors elle m'annonce qu'y a eu une erreur durant le code. C'est plus clair ? [/Quote]

Donc, il faut que je code ça différemment

En effet, dans l'état actuel, si j'arrête la macro (obligé) pour remplir manuellement ce qui manque

Lors du redémarrage on recommence depuis le début

@+

S'il existe une fonction similaire à =SIERREUR, tu peux le faire seulement sur un endroit je me débrouillerai pour tout recopier ensuite !

Rechercher des sujets similaires à "extraction donnees via vba"