Copier coller via un vlookup

Bonjour

Je souhaite extraire (copier) des données, issu de plusieurs fichiers contenus dans un même répertoire, via une recherche de type vlookup (fonction recherchev), pour les coller, en ligne, dans le fichier contenant la macro.

Je souhaite extraire donc, les poids suivant les calibres (cf fichier joint) en sachant que les fichiers sont tous différents d’où la recherche vlookup.

en fichier joint vous avez un fichier de donnée type nommé 1 et le fichier d'extraction avec la macro (encore vide) nommé code.

merci d'avance pour vos réponse et votre temps.

j’ai déjà codé un truc énorme mais en utilisant un/des codages existants mais la tout écrire depuis la base je n'y arrive pas j'ai tout le temps des erreurs...

211.xlsx (31.81 Ko)
18code.xlsm (13.35 Ko)

Bonjour,

Des présentations exotiques plutôt qu'une présentation normalisée et directement exploitables... c'est sûrement pour pouvoir faire travailler des intervenants !

Cordialement.

Non c'est juste qu'il n'y a pas tout le temps tout les calibres à la fois. du coup les lignes bougent fonctions du nombre de calibre.

Un tableau doit pouvoir être identifié à partir d'un point de départ qu'on sait où trouver et ne pas laisser de ligne vide...

Si j'ai bien compris ta phrase :

cellule B21 nommée calibre

Sinon je ne sais pas de quel tableau tu parles !

C'est vrai qu'il n'y a pas de tableau en fait, juste des données dispersées... et tu illustres bien la difficulté de fournir un repère ou un référence : en B21 il n'y a rien !

On va trouver Calibres (et non calibre) en E21. Et tu ne dis même pas que cette cellule serait toujours fixe !

Ni que les poids sont toujours en colonne R !?

Et après ? Il faudra chercher Total calibré : (avec une espace finale, bravo pour les concepteurs !!! ) qui se trouve en colonne N... avec ledit Total en Y, mais Dechet en Z et Total général en X.

Et tout ça va peut-être changer sur la fiche suivante...

Et tu veux utiliser VBA pour pallier une incapacité à fournir des données fiables sous une forme utilisables ! Ce n'est pas vraiment fait pour ça. Commence par mettre de l'ordre où il en faut. Le reste suivra.

Cordialement.

Les colonnes ne bougeront pas juste le nombre de ligne.

bonjour

salut MFerrand

il est vrai que le fichier 1 est mal organisé, on dirait du AS400

d'où vient-il ?

si tous les fichiers sont de même structure, on peut les lire et en extraire les données intéressantes avec Power Query

c'est un ETL

Extract on comprend

Transform : on peut transformer, éliminer les lignes inutiles, réorganiser les utiles. C'est étonnant

Load : on charge le résultat (ici dans Excel) un tableau simple

https://www.youtube.com/watch?v=gwW2CDdvUUs

(il est fourni avec les Excel plus récents)

attention, il me faut 2 à 4 heures pour le Transform de fichiers comme le tien. Un très bon spécialiste le fera en 30 minutes, je le serai dans 1 ou 2 ans

note : peux-tu espérer avoir un accès à la base de données d'origine de tes fichiers ????????

j'ai essayé avec Power Query déjà et j'ai des erreurs quand je crée les tables avec les fonctions....

je peux évidemment récupérer les données via SQL mais je ne sais pas du tt comment ffonctionne un sql...!!

Le fait est que fichier par fichier avec un recherchev bien fait j'ai es données que je souhaites en ligne comme il faut. Je souhaites juste automatiser ca sur des centaines de fichiers...

re

si tu y parviens sur 1 fichier avec des RECHERCHEV, c'est qu'il est organisé (malgré les apparences)

dès lors Power Query ira lire tes 500 fichiers

ne te laisse pas bloquer par les menus de PQuery, explore-les, notamment "transformer" plein de trucs magiques et parfois étranges.

note : les cellules fusionnées que tu as ne m'inspirent rien de bon...

note 2 : peux-tu récupérer sous forme xls ou txt ou csv ou autre les tables originales du logiciel de départ ? il a certainement une fonction d'exportation. Non ?

j’ai du xls, rpt, txt.

j'ai aussi du xls data only qui est justement tout simple et sans mise en page foireuse (mise en page destiné à l'impression en fait) mais les en têtes n'apparaissent pas et j'en ai besoin pour trier mes données.

Les fichiers sources ne sont pas si chaotiques, c'est juste qu'il y a des fois plus ou moins de ligne fct du nombre calibre présent.

je vous met en fichiers joint plusieurs fichiers.

Ensuite, il est tt a fait possible de de fusionner toute les cellules en vba et arranger les fichiers sources pour une meilleur lecture. Dans m

on précédent code j'autofit déjà toutes les cellules et je fait une sauvegarde des fichiers sources avant l'extraction de donnée.

je vais retenter avec power query.

merci pour votre aide !!

9274.zip (28.08 Ko)
8252.zip (28.17 Ko)

Bonjour,

J'ai entrepris d'écrire une procédure... (eh oui ! pour me mettre en forme au 2e café ! ) mais je découvre une anomalie dans ton premier fichier, qui ne figure pas dans les 2 autres : un 1 parasite en M23.

De quoi s'agit-il ? Est-ce que tu aurais tapé ce 1 par inadvertance dans un fichier reçu ? Auquel cas je n'en tiens pas compte. Par contre si on trouve ce type d'anomalie dans tes fichiers, je dois revoir ma procédure d'épuration !

L'objectif est d'obtenir les étiquettes de données en A et les données correspondantes en B, tout ce qui peut l'empêcher constitue une anomalie à éliminer, il faut donc que toutes les anomalies de ce type susceptibles de survenir soient recensées.

Cordialement.

Ha oui ce 1 c'est moi qui l'ai ajouté...

Je peux faire ce travail depuration avec power query mais la recherche et l'extraction de donnée s'avère nettement plus complexe voir impossible par la suite !!!

Merci tres sincerement dans votre aide !!

Tant mieux si c'est toi qui l'a ajouté, un souci en moins !

Pas de remerciements anticipés, pour le moment l'épuration bloque sur la ligne 94, et colonne AK, je ne vois pas pourquoi. Je vais y réfléchir en reposant une étagère...

@+

Bonjour,

On peut commencer par supprimer tout ce qui est superflu (cases vides et cellules fusionnées)

edit : fichier corrigé et complété plus loin

Bonjour,

J'avais confondu ma gauche et ma droite ! Et ensuite pour arranger, lignes et colonnes ! Mais voilà le bébé.

Je suis parti de tes indications procédurales : chemins et noms de fichiers à traiter en colonne A., on détermine donc ceux à traiter dans la liste (là où pas encore de données sur la ligne) et on traite donc les nouveaux fichiers en boucle.

J'ai également modifié un petit peu ton tableau, de façon que les en-têtes de colonnes soient sur la même ligne !

Sub RécupDonnées()
    Dim ET, PlgD, Fich(), f%, n%, dln%, i%, k%, itm$, wsR As Worksheet
    'Récollement fichiers à traiter
    With ActiveSheet
        n = .Range("B" & .Rows.Count).End(xlUp).Row + 1
        If .Cells(n, 1) <> "" Then
            dln = .Range("A" & .Rows.Count).End(xlUp).Row
            ReDim Fich(n To dln)
            For i = n To dln
                Fich(i) = Cells(i, 1)
            Next i
        Else
            MsgBox "Pas d'indication de nouveau fichier à traiter en colonne A !", _
             vbInformation, "Erreur"
            Exit Sub
        End If
    End With
    'Traitement des fichiers (en boucle)
    Set wsR = ActiveSheet
    Application.ScreenUpdating = False
    For f = LBound(Fich) To UBound(Fich)
        With Workbooks.Open(Fich(f))
            'Préparation fichier à traiter
            With .Worksheets(1)
                .UsedRange.MergeCells = False
                dln = .Cells.SpecialCells(xlCellTypeLastCell).Row
                For i = dln To 1 Step -1
                    k = .Cells(i, .Columns.Count).End(xlToLeft).Column
                    If k = 1 Then
                        If .Cells(i, 1) = "" Then .Rows(i).Delete
                    Else
                        For n = k - 1 To 1 Step -1
                            If .Cells(i, n) = "" Then .Cells(i, n).Delete xlShiftToLeft
                        Next n
                    End If
                Next i
                'Récupération des données
                ET = wsR.Range("A2:X2").Value
                ET(1, 1) = Fich(f)
                PlgD = .Range("A1").CurrentRegion.Value
                For n = 2 To UBound(ET, 2)
                    If IsNumeric(ET(1, n)) Then
                        For i = 1 To UBound(PlgD)
                            If PlgD(i, 1) = ET(1, n) Then
                                ET(1, n) = PlgD(i, 2): Exit For
                            End If
                        Next i
                    Else
                        itm = "*" & ET(1, n) & "*"
                        For i = 1 To UBound(PlgD)
                            If PlgD(i, 1) Like itm Then
                                ET(1, n) = PlgD(i, 2): Exit For
                            End If
                        Next i
                    End If
                    If i > UBound(PlgD) Then ET(1, n) = Empty
                Next n
                'Affectation ligne de données
                With wsR.Range("A" & f).Resize(, 24)
                    .Value = ET: .NumberFormat = "0.00"
                End With
            End With
            'Fermeture classeur traité (et passage au suivant si...)
            .Close False
        End With
    Next f
End Sub

A toi de tester pour voir si cela répond aux spécifications.

Je n'en suis pas véritablement satisfait : 1,257 seconde. C'est donc lent ! On a le temps de percevoir une durée. J'aurais aimé descendre en-dessous de la demi-seconde mais, compte tenu de l'épuration, cela me paraît difficile, et cela peut toutefois rester acceptable.

Cordialement.

Je vois une correction inachevée. Je la termine (éliminer des fragments invalidés) et je remets le fichier.

edit : voilà qui est fait !

C'est clairement un super boulot mais le code me dépasse un peu !!

Il y a eu une petite mésentente sur la colonne A. Je souhaitais extraire au moins le nom du fichier extrait (voir le chemin mais c'est pas important) et pas que se soit une colonne d'instruction. Tous mes fichiers seront dans un seul répertoire donc il suffit de boucler dedans.

Ensuite je sais pas si ca le fait chez vous (steelson et MFerrand) mais moi, j'ai une erreur dans mes fichiers sources dans la colonne E (qui est fusionnée de E à L) à partir de la ligne 25. Ça me dit que les nombres sont au format texte et que je dois les convertir. (il y aurait une appostrophe ou un espace !!) je suis sur le forum en train de tenter de résoudre ce problème. Du coup je n'ai aucune valeur pour mes calibres...vu que les nombres sources ont une erreur.

Pas de soucis dans mon cas, une fois les fichiers ré-enregistrés après compactage on pourra traiter ce point.

Mais d'aucuns peuvent aussi tester maintenant PowerQ.

Salutations à MFerrand dont les codes avoisinent de l'art absolu !

MFerrand, j'ai oublié une colonne pour l'extraction... la colonne commentaires est importantes aussi.

Rechercher des sujets similaires à "copier coller via vlookup"