Extraction de données en VBA

guibout

XLDnaute Nouveau
Bonjour

Un collègue cherche à faire une base de données de la documentation du bureau d'études.
Je lui propose un fichier Excel.
J'ai bati un formulaire avec les différentes données à recueillir (n°, lot, marque, désignation de la documentation,...). Ces données sont conservées dans une autre feuille en colonnes.
Sur une autre feuille, j'ai mis en place des cellules de recherche en fonction des données.
Je cherche les fonctions (ou mieux un code) à mettre dans une macro pour faire une recheche dans une base de données et afficher le résultat des lignes ayant tous les critères recherchés dessous. Je voudrais si possible dans mon exemple, trouver toutes les lignes dont la marque CONTIENT Weber (Marque enregistrée dans la base de données : Weber et Broutin) et ayant un numéro 204.

Je joins mon tableau pour une meilleure compréhénsion.

Merci de votre aide.
 

Pièces jointes

  • Base de données documentaires.zip
    43.7 KB · Affichages: 97
  • Base de données documentaires.zip
    43.7 KB · Affichages: 99
  • Base de données documentaires.zip
    43.7 KB · Affichages: 102

guibout

XLDnaute Nouveau
Re : Extraction de données en VBA

Boujour Kobaya
J'ai essayé avec un filtre élaboré et la réponse n'est pas sastisfaisante pour moi car il me redonne l'ensemble de ma base de données.
Je cherche en ce moment une solution du type 'je rentre les critères à trouver et j'appuie sur un bouton pour afficher le résultat'.
Je pense que la fonction AUOTFILTER devrait m'apporter une solution mais je n'ai pas encore trouvé d'exemple explicite à adapter à mon projet.
@+
guibout
 

chris

XLDnaute Barbatruc
Re : Extraction de données en VBA

Bonjour
On peut faire sur la base d'un filtre auto personnalisés ou d'un filtre élaboré automatisé par macro.
Quelle que soit la solution, la vrai question est sur quels champs se fera le filtrage ?
Tu les as tous mis mais cela paraît bizzare de chercher sur le nom du site par exemple.
Par ailleurs il faudrait différencier = à de contient : sur certains champs on peut imaginer contient comme le champ marque qui contient Weber.
Pour les dates, si c'est un critère, comment se fera la recherche ? sur une fouchette de dates, année + mois, ...
Construire un requêteur est assez compliqué : il faut déjà voir quels sont les champs servant à la recherche et pour chaque champ, les modalités. Reste aussi a définir si on introduit la notion de OU entre les champs de recherche.
Donc une bonne analyse en perspective. :eek:
 

guibout

XLDnaute Nouveau
Re : Extraction de données en VBA

Bonjour,
Merci de votre aide
Pour répondre à Chris :
On peut faire sur la base d'un filtre auto personnalisés ou d'un filtre élaboré automatisé par macro. --> c'est une solution que je vais essayer

Tu les as tous mis mais cela paraît bizzare de chercher sur le nom du site par exemple --> Pourquoi ne pas chercher des chaines de caracteres dans les adresses web. Ok pas forcément utile mais pourqoi pas!!!

Par ailleurs il faudrait différencier = à de contient : sur certains champs on peut imaginer contient comme le champ marque qui contient Weber.je cherche plutot la fonction Contient

Pour les dates, si c'est un critère, comment se fera la recherche ? sur une fouchette de dates, année + mois, ...Pas d'interet dans le cadre de mon projet

Construire un requêteur est assez compliqué : il faut déjà voir quels sont les champs servant à la recherche et pour chaque champ, les modalités. Reste aussi a définir si on introduit la notion de OU entre les champs de recherche.Le choix entre ET et OU serait idéal.

Pour répondre à Bébere, j'ai un bug au niveau de UserForm1.Show.
Lorsque j'appuie sur Recherche, j'ai un écran avec:
Erreur d'execution '-2147352571 (80020005)':
Le type ne correspond pas.
Pourrais-tu me dire ce qu'il faut faire pour voir ta proposition avec la USERFORM1.
Je souhaite réutiliser ton code dan l'affichage si celui ci m'intéresse.

Encore merci pour votre aide
guibout
 

chris

XLDnaute Barbatruc
Re : Extraction de données en VBA

Bonjour

La solution de Bebere est basée sur le filtre auto automatisé.
Sans trop la modifier, on peut passer de = à contient.

Par contre si on veut des OU entre champs il faut compliquer le formulaire (identifier les combinatoires logiques et les agencer de façon claire) et passer au filitre élaboré.

J'ai d'abord essayé le contient en filtre élaboré sans formulaire en me basant sur la zone critère que tu as créée (j'ai du renommer les champs N° et site web de la base afin d'enlever les espaces et caractères spéciaux).
J'ai nommé la plage de données BD, ma zone de critères (à masquer) criteresBD et la zone d'extraction result. La macro qui exécute le filtre est lié au bouton vert.

J'ai refait la même chose sur une autre feuille en abordant le OU de la façon suivante :
  • j'ai ajouté des lignes dans ta zone de criitères (et la mienne ) avec un OU marqué en bout de ligne un peu comme dans le requêteur Access.
  • j'ai nommé la zone de critères criteresBDOU mais elle est dynamique : sa hauteur varie en fonction du nombre de lignes remplies dans ta zone de critères.
  • j'ai nommé la zone d'extraction resultOU
  • fait une seconde macro pour cette feuille.
Ce n'est pas d'une ergonomie folle mais ça marche et c'est simple à mettre en place.
 

Pièces jointes

  • Base de données documentaires.zip
    44.5 KB · Affichages: 144
  • Base de données documentaires.zip
    44.5 KB · Affichages: 123
  • Base de données documentaires.zip
    44.5 KB · Affichages: 108
Dernière édition:

guibout

XLDnaute Nouveau
Re : Extraction de données en VBA

Boujour et merci de votre aide.

Malgré tout et une paire d'heures plus tard, je narrive toujours pas à faire ce que je voudrais.
Dans mon tableau, j'ai une ligne ou dedans, suivant mes besoins, je remplis un mot dans la colonne Désignation et un lot par exemple. En fonction du remplissage de ces cases, je dois avoir un tableau qui se forme avec toutes les réponses ayant à la fois ces 2 critères.
Apparemment, la fonction AUTOFILTER ne permet que 2 criteres maxi !!!
Pour la fonction filtre élaboré, j'ai réalisé une macro qui fonctionne comme si j'utilisais directement la fonction à partir du menu Données/Filtres/Filtre élaboré. Alors que je croyais ma macro loupée, en utilisant le filtre élaboré depuis le menu, je me suis rendu compte que la zone de critères ne servait à rien. Du coup, je ne suis pas sûr que ce soit la bonne méthode.
N'ayant pas ACCESS au travail, je vais regarder chez moi, si je peux faire ce fichu tableau sous ACCESS à moins que vous ayez une idée.
Merci

Je vous joins pour exemple mon travail.

Dans l'onglet recherche, je ne devrais trouver en réponse qu'une seule ligne...
Où est l'erreur ?
 

Pièces jointes

  • Essais Base de données documentaires.zip
    23 KB · Affichages: 69

chris

XLDnaute Barbatruc
Re : Extraction de données en VBA

Bonjour
Je me suis décarcassée :eek: pour te fournir un classeur en état de marche.
Si je rentre tes valeurs de recherche ce classeur fonctionne parfaitement.
Alors pourquoi tout casser :confused: ?

La zone de critères est essentielle dans un filtre élaboré.
Comme tu cherches, non pas des valeurs exactes mais des valeurs contenues dans les autres, il faut des formules (je les ai créées dans le classeur que j'avais joint) : tu ne peux pas utiliser directement les valeurs saisies.

Par ailleurs ta macro oublie les références exactes, ce qui est primordial dans un filtre travaillant sur plusieurs feuilles.
 

guibout

XLDnaute Nouveau
Re : Extraction de données en VBA

Bonjour,

Tout d'abord, merci a toi Chris de t'être décarcassé. :eek:
Il est vrai que je n'ai pas regarder à fond ton fichier mais il m'a semblé un peu usine à gaz (beaucoup plus facile à dire maintenant que j'ai trouvé ma solution qui fonctionne comme je l'ai révé:cool: ).
J'ai donc utilisé un filtre élaboré. Là où j'ai buté toute la journée d'hier est sur le fait que je ne mettais pas les lignes d'entetes dans la plage des critères (ligne des entetes + lignes des critères dessous) et dans la plage de la base de données (ligne des entetes et ligneS des données dessous). Une fois intégrée, cela fonctionne de façon impeccable. (Je ne fais pas de recherche sur les dates ni les numéros de téléphones car aucun intérêt pour l'application souhaitée).

Ci joint mon ultime fichier pour l'exemple.
Cordialement

guibout
 

Pièces jointes

  • Base de données documentaires.zip
    24.1 KB · Affichages: 121
  • Base de données documentaires.zip
    24.1 KB · Affichages: 121
  • Base de données documentaires.zip
    24.1 KB · Affichages: 136

chris

XLDnaute Barbatruc
Re : Extraction de données en VBA

Bonjour

Tu disais vouloir une solution traitant l'aspect "Contient" : ta solution traite égal à ou commence par mais pas contient : la recherche sur Miroiterie ou Broutin ne marche pas.
Tu disais aussi vouloir chercher sur une partie du nom du site web : ne marche pas non plus.

Mais le principal est que tu sois content.

Bonne journée
 

guibout

XLDnaute Nouveau
Re : Extraction de données en VBA

Boujour Chris

Effectivement, j'ai évolué. Je ne cherche pas dans les numéros de téléphones et les dates.
Pour contourner le problème des chaines de caractères se trouvant au milieu de la chaine "d'information" complete, j'utilise la fonction *.

Pour rechercher M. DELUC dans les contacts, je fais la recherche suivante : *luc et j'ai mon résultat.
En fait j'ai dupliquer dans des lignes cacher mes 2 lignes de recherche (ligne des entetes + lignes de recherches) et j'ai rempli mais cellules avec ="*"&Cellule de recherche
Du coup j'ai toujours *luc meme si je tape luc recherche M. LUC ua lieu de M. LEDUC.
Petit écueil toutefois, dans ma feuille de saisie des données, les champs n'ayant pas d'information (pas de contact par exemple) sont remplis automatiquement par un char ESPACE.

Voila pour moi.

@+
guibout
 

Discussions similaires

Réponses
45
Affichages
1 K

Statistiques des forums

Discussions
312 520
Messages
2 089 276
Membres
104 083
dernier inscrit
hecko