Extraction de colonnes + colonne avec INDEX/EQUIV

Bonjour tout le monde,

Alors j'ai une problématique assez particulière, en effet, j'ai réalisé un fichier que je demande à être rempli par des externes (le fichier joint correspond à ce fichier) dessus normalement il y a plus d'onglets, de formule et de code VBA mais j'ai simplifié car pas utile pour ma demande

Dans ce fichier, je veux en extraire des colonnes afin de les importer dans un autre fichier (qui sera exploité par une autre équipe), j'ai réussis à faire en sorte de pouvoir extraire les colonnes que je souhaite :

Sub Extraction()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim wb As Workbook, Chemin As String
Dim ws4 As Worksheet
Dim ws5 As Worksheet
Dim ws6 As Worksheet
Dim ws10 As Worksheet

    'Création des variables pour le fichier de destination
    Set wb = ThisWorkbook
    Set ws4 = wb.Worksheets("Prix")
    Chemin = wb.Path & "\"
    Workbooks.Open Filename:=Chemin & Dir(Chemin & "HELP*.xlsm"), Local:=True
    With ActiveWorkbook
    'Création des variables pour le fichier source des DATA

    Set ws5 = Sheets.Add
    Set ws6 = Sheets("Modele BOIS")
    Set ws10 = Sheets("Generalites")

    'Importation des prix
    dl = ws6.Cells(Rows.Count, 1).End(xlUp).Row
    ws5.Range("B1").Resize(dl, 10).Value = ws6.Range("A1").Resize(dl, 10).Value
    ws5.Range("A1:A" & dl).Value = ws10.Range("C2").Value
    ws5.Range("C:C,G:G,J:J").Delete shift:=xlToLeft
    dl = ws5.Cells(Rows.Count, 1).End(xlUp).Row
    ws5.Range("A2").Resize(dl - 1, 8).Copy ws4.Range("A2")
    ws5.Delete

        .Close False
    End With
   Application.DisplayAlerts = True
   Application.ScreenUpdating = True

MsgBox "Extraction des DATA terminée"

End Sub

Par contre, j'ai besoin d'une donnée qui n'est pas dans l'onglet où j'extrait toutes mes données mais dans un autre ("Nom descriptif BOIS") j'ai besoin de la colonne "Modèle" j'aimerais donc réussir à associer cette colonne "Modèle" aux données que j'ai de la façon suivante :

Similitude de colonne entre les deux onglets :

- Essence

- Epaisseur

- Teinte

- Finition

(Sur le fichier joint j'ai mit en colonne k de l'onglet "Modele BOIS" l'attendu, bien-sûr il doit se retrouver sur mon autre fichier pas sur celui-ci mais au moins il est plus simple de comprendre l'attente)

N'hésitez pas à revenir vers moi si c'est pas très clair

Merci d'avance à vous !

5vba.xlsm (78.67 Ko)

Bonjour tout le monde,

Je vois que le sujet à l'air un peu complexe

Au besoin voici le fichier de destination

Bonjour

Il manque des colonnes dans ton classeur source ou les noms sont différents

Une solution PowerQuery sans vba : il suffit de supprimer les requêtes en fin de traitement.

Modifier le chemin dans la cellule en jaune puis Données, Actualiser Tout

Hello !

Merci de ta réponse

C'est à dire il manque des colonnes ?

En fait :

- La matière il va rechercher directement sur un autre onglet mais ça je sais comment le faire pas de soucis, car ce n'est qu'une donnée ("BOIS").

- L'épaisseur est bien présente sur l'onglet modele

- Le Modèle : la donnée qui me pose problème doit être recherché sur l'onglet "Nom descriptif BOIS" puis associer au ligne de l'onglet Modele BOIS (mais tout ça sur un autre onglet ou mieux encore sur le fichier de destination) : c'est ici mon gros problème, je ne sais pas comment faire cette jointure car en gros pour trouver cette donnée je dois faire comme une rechercheV (ou index/equiv) avec quatres paramètres (colonnes A/B/D/E onglet "Modele BOIS") qui se retrouvent aussi sur l'onglet "Nom descriptif BOIS" (colonnes C/D/E/F j'ai même une concat de E et F en colonne J).

- Profondeur min et max sont bien sur l'onglet modele bois

- De même pour les prix et le minimum de facturation

Je maitrise pas du tout PowerQuery ... et j'ai déjà du code qui doit tourner pour faire d'autres extractions et qui fonctionne très bien du coup un mélange des deux pas sûr que ce soit le top ... Pour toi une solution VBA n'est pas possible ?

Cordialement :)

RE

Longueur min et max (même sans faute de frappe) n’existent pas dans le classeur BDD et les colonne prix ne sont pas titrées de même (Prix au m2 recto, Prix au m2 recto-verso ne sont pas dans BDD).

Si tu as regardé le fichier tu as pu voir dans chaque onglet qu'hormis ces colonnes, le résultat est correct, non ?

PowerQuery est bien plus simple pour extraire et croiser des tables, ce qui n'est pas une fonctionnalité native d'un tableur.

Ce pourquoi il remplace de plus en plus VBA.

Mais si tu tiens à VBA, il faut attendre un VBiste...

Re,

Alors au niveau des données ça m'a l'air de très bien y répondre effectivement

Effectivement c'est ma faute j'ai repris la même méthode que pour l'extraction sur une autre matière qui possède ces colonnes de m2 recto et recto-verso. Ici il ne s'agit de prendre que le m2 actuel.

Par contre, en allant sur la requête j'ai une erreur présente sur "Dimensions" et "Prix"

image

Je ne sais pas le régler ... J'ai réussis à faire les modifications pour ce dont j'ai besoin sur les trois précédents car j'avais des noms de colonnes pas vraiment semblables mais sur cette erreur je sèche

Bon je ne connais pas PowerQuery je ne sais pas si je serais le reproduire moi même mais effectivement c'est propre

Je peux prendre la solution je suis pas réfractaire mais j'aurais bien voulu savoir si en VBA c'était possible car je gère un peu mieux je verrais si un VBiste répond à un moment (j'aimerais ne pas mourir bête ) mais ta solution m'intéresse beaucoup aussi

EDIT : Je suis en train de mettre les mains dedans j'ai réglé mes erreurs, et pour la longueur max et min effectivement c'est un onglet qui n'est pas présent sur le fichier que j'ai joins ... Je vais voir si je sais faire la chose moi même de mon côté avec ce que tu as fais mais franchement je suis pas sûr d'y arriver je veux bien savoir comment tu as fais pour "décortiquer" ta requête : je vois que tu fais souvent plusieurs étapes

RE

Cela parait bizarre car cette ligne change l'ordre des colonnes Modèle, Epaisseur, Profondeur min (mm), Profondeur max (mm) et le message d'erreur concerne la colonne Essence qui n'est pas invoquée dans cette étape car supprimée à l'étape précédente (les étapes sont listées à droite : il suffit de cliquer sur une étape pour voir dans la barre de formule et en cliquant sur le petit rouage, le détail de l'étape.

PowerQuery est basé sur le principe des base de données, comme les tableaux structurés et les TCD : les titres de colonnes sont importants et PowerQuery est sensible à la casse contrairement à Excel.

J'ai réussis à résoudre ce problème c'est simplement que je n'avais pas les mêmes noms de colonnes du coup normal que ça saute ;)

Par contre comme je dois aller rechercher un nouvel onglet pour l'onglet dimensions comment je procède pour créer une nouvelle requête ? qui ressemble à Descriptif() et Modèle() qui sont les tables de références de mon fichier DATA j'imagine ?

Merci à toi

EDIT : Comment tu passes ta requête en "Connexion uniquement" ? j'aimerais le faire pour une nouvelle requête mais je sais pas du tout comment on fait

EDIT 2 : Il n'est possible de faire en sorte que PowerQuerry aille chercher le fichier de lui même dans un dossier qui sera toujours le même ? (le fichier commencera toujours par DATA mais n'aura pas le même nom ensuite)

RE

Par contre comme je dois aller rechercher un nouvel onglet pour l'onglet dimensions comment je procède pour créer une nouvelle requête ? qui ressemble à Descriptif() et Modèle() qui sont les tables de références de mon fichier DATA j'imagine ?

Comme tu peux le voir les requêtes avec le 0 vont chercher les données de l'onglet puis les autres requêtes exploites cette partie

Tu peux dupliquer une de ces requêtes et modifier le nom de l'onglet

EDIT : Comment tu passes ta requête en "Connexion uniquement" ? j'aimerais le faire pour une nouvelle requête mais je sais pas du tout comment on fait

Sortir par Fermer et charger dans, Connexion seulement
Si tu dupliques une requête qui s'affichait et que cette option est grisée, il faut dans Excel afficher le volet des requêtes (Données, Requêtes et connexions) et clic droit sur la requête concernée, Charger dans, Connexion seulement

EDIT 2 : Il n'est possible de faire en sorte que PowerQuerry aille chercher le fichier de lui même dans un dossier qui sera toujours le même ? (le fichier commencera toujours par DATA mais n'aura pas le même nom ensuite)

On peut lier un dossier et filtrer le nom de fichier qui commence par DATA

Exemple : dans la requête DATA, j'ai cherché le nom qui commence par DATA puis utilisé DATA pour Modèle0 et Descriptif0

Hello,

Du coup en me plongeant dedans je vois que niveau apprentissage c'est pas si compliqué que ça pour des choses simples en soit et ça répond parfaitement à mon attente, j'ai réussis à faire ce que j'attendais au final via du VBA je mets en cellule A1 le chemin de mon fichier qui peut être changeant d'une machine à une autre.

Et ensuite je lance l'actualisation des données PowerQuery où il vient chercher en source ma cellule A1

Un grand merci à toi pour le temps passé et cette solution assez magique je dois l'admettre

Je n'attendrais pas de VBA vue qu'au final ça répond très bien à la demande, de manière très rapide et facile à modifier/mettre en place.

Par contre je vois qu'il y a souvent un message m'indiquant que ça peut ne pas correspondre à ma version d'Excel il existe vraiment des énormes changements entre des versions excel antérieur et actuel sur PowerQuery ? Est-ce qu'il y a des risques avec ce que tu m'as envoyé actuellement ?

Et deuxième question :

Une solution PowerQuery sans vba : il suffit de supprimer les requêtes en fin de traitement

Pourquoi supprimer les requêtes en fin de traitement ?

Bonne journée à toi et encore merci !

Cordialement,

Bonjour

Il y a très peu de différence si ta version 2019 est à jour

Même avec le vieil add on pour 2010 et 2013, peu de différences

Supprimer les requêtes c'est au cas où tu veux figer le résultat : tu enregistres Sous, tu supprimes les requêtes de cette copie et tu as des tableaux classiques sans liens ou liaisons.

Ok super

En soit je vais enregistrer les onglets en csv je n'ai pas testé ce que ça donne mais j'imagines qu'en enregistrant de cette façon la donnée est figée automatiquement (je vais faire le test )

Encore merci à toi pour cette découverte et cette aide !

Bonne journée et bonne continuation (à bientôt peut être !)

Rechercher des sujets similaires à "extraction colonnes colonne index equiv"