Macro pour classer rapidement un document dans un garabit

Bonjour,

Je viens ici pour exposer mon petit soucis qui me cause énormément de temps perdu.

Je reçois quotidiennement des tableaux excel de fournisseurs qui ont presque le même contenu. Je dois extraire certaines colonnes de ces tableaux pour les remettre dans le bon ordre sur "un gabarit de travail". En gros un tableau avec les intitulés correctes.

J'ai cherché énormément sur internet, mais aucun moyen de trouver quelqu'un qui s'est intéressé à un système de classement sur base de similitudes entre les intitulés de deux documents. Ce que je cherche concrètement à faire, c'est de renommer les colonnes dans les documents de mes fournisseurs avec des balises simples (X1, Y1, ... par exemple) et qu'en activant la macro, les colonnes avec ces balises se rangent toute seule dans mon document gabarit, avec l'intitulé correcte et dans le bon ordre.

Je vous envois en annexe un exemple simplifié de mon gabarit et d'un exemple de ce que je pourrai recevoir. J'espère avoir été clair, je ne suis pas du tout quelqu'un de qualifié en VBA mais ce petit outil me ferai gagner des heures...

D'avance merci! La communauté ici m'a déjà aidé plus d'une fois à travers des réponses dans des postes d'utilisateurs,

Passez une agréable journée, cordialement,

Robin

Bonjour,

sur base de similitudes entre les intitulés de deux documents.

Si on doit comprendre que les libellés peuvent être légèrement différents en plus d'être à la mauvaise place il faudrait que tu livres la listes des équivalences qu'on voit ce qui est faisable.

eric

Merci pour la réponse expresse

Voici la liste complète des noms (ligne 1:1) et les libellés (nombre de 1 à X) dans le ligne 2:2.

Si ce n'est pas faisable de mettre simplement des nombre de 1 à X dans la première ligne du document import, je veux bien essayer de produire d'autres libellés Il est juste nécessaire qu'ils soient facile à écrire.

Si vous voyez, avec vos yeux experts, un autre système plus rapide / plus simple, je suis preneur également! (je pense qu'il y a moyen d'avoir des menus déroulants en haut des colonnes, c'est peut-être une alternative (?)

Encore merci pour votre attention! C'est très très attentionné et agréable.

39liste.xlsx (9.11 Ko)

Ce n'était pas ma question.

Je te demandais si (par exemple) le libellé S_DPA s'appelle bien ainsi dans tous tes imports ou si le libellé peut varier.

Il faut donc que tu fournisses les champs qui t'intéressent dans l'ordre où tu les veux, et en-dessous les éventuels synonymes.

eric

Excusez moi pour l'attente,

"S_DPA s'appelle bien ainsi dans tous tes imports ou si le libellé peut varier."

En fait c'est bien le souci, c'est que chaque document a des nom de colonne différent, il est donc soit nécessaire de compléter sois-même le libellé pour que le fichier de classement puisse le détecter et ainsi le ranger.

Sinon faire une liste intelligente qu'il est possible de compléter, mais ça risque d'être compliqué non?

Encore merci

Bon, puisque tu ne veux pas faire d'effort et dire sous quelles forme on peut le retrouver malgré 3 demandes attend le suivant...

eric

On a vraiment du mal se comprendre Eric, mais je ne cerne pas ta question et ce n'est pas faute d'effort.. Navré si cela te vexe, mais je ne le fais pas exprès.

Je vais tenter de reformuler, mais pour moi ta question est "Est-ce que dans les documents que tu reçois, les colonnes contenant la réduction (c'est la colonne S_DPA) ont toujours l'intitulé S_DPA. La réponse est non. Ma colonne contenant le libellé du produit s'appelle code dans mon tableau, mais dans le tableau des fournisseurs elle peut s'appeler "id", "ref", "code", "identité", ... Il y a autant de possibilités que de fournisseurs.

Donc pour moi le plus simple, c'est de coller le tableau du fournisseur dans MON tableau et de renommer les entêtes. Ainsi si je remplace "ID" dans le tableau par "code", excel comprend que la colonne avec l'intitulé "code" correspond à ma première colonne, la colonne code.

Donc moi mon objectif c'est de faire une farde excel dans laquelle je mets le tableau fournisseur, je renomme les entêtes (avec des noms de code, par exemple x1, x2, x3, ...) à l'aide d'un tour de passe passe, excel détecte que la première colonne de mon tableau a l'intitulé prix_sg par exemple, il va alors le replacer dans la colonne prix_sg.

Donc je réponds à ta question comme je la comprend "OUI les libellés changent, pour TOUS les fournisseurs et l'ordre aussi". Donc établir une liste des possibilités de libellés, lorsqu'il y a des centaines de fournisseurs, ce n'est pas possible actuellement.

J'espère que vous comprendrez ma réponse, merci pour votre attention

Bon, te trie dans l'ordre des champs déclarés dans le Array (tu peux y mettre les libellés définitifs) et te propose de supprimer les autres colonnes.

A mettre dans un module standard, travaille sur la feuille active de n'importe quel classeur actif :

Option Explicit

Sub TriCol()
    Dim c As Range, titres, i As Long
    titres = Array("Code", "2", "3", "4", "5")
    Application.ScreenUpdating = False
    For i = UBound(titres) To 0 Step -1
        Set c = Rows(1).Find(titres(i), LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
            MsgBox "Champ " & titres(i) & " non trouvé"
            Exit Sub
        Else
            Columns(c.Column).Cut
            Columns(1).Insert Shift:=xlToRight
        End If
    Next i
    If MsgBox("Supprimer les colonnes supplémentaires ?", vbQuestion + vbYesNo, "Suppression") = vbYes Then
        Columns(UBound(titres) + 2).Resize(, Cells(1, Columns.Count).End(xlToLeft).Column - UBound(titres) - 1).Delete
    End If
End Sub

eric

Je viens d'essayer, ça me paraît tellement magique! Merci Eric!

Je regarde le code, j'ai juste un petit soucis. Lorsqu'une colonne n'existe pas (par exemple la colonne 2), ça ne veut pas faire l'action en laissant la colonne 2 vide.

L'objectif de la macro étant de replacer les colonnes dans un gabarit, est-ce que c'est possible de tout de même exécuter la macro lorsque certaines colonnes sont vides et de tout simplement les laisser vides?

Faire 1 | | 3 | 4 | 5 dans ce cas ci?

mille mercis pour votre attention!

Bonjour,

Tu as dit que tu mettais les en-têtes, mets-les tous y compris les vides.

eric

Rechercher des sujets similaires à "macro classer rapidement document garabit"