Question concernant l'automatisation pour "classer" des catégories

Bonjour à tous et à toutes,

Je viens vers vous suite à un problème concernant un fichier Excel.

Je travaille pour un client et j'ai pour mission d'ajouter des produits sur son site internet, via .csv

------

J'ai reçu le fichier Excel d'une marque dont il aimerait faire figurer sur son site internet, avec + ou - 1300 produits

Pour ajouter un produit via automatisation sur Wordpress, il faut que les catégories soient dans un ordre précis tel que :

Vêtements > Manche courte > Polo > Polo à motif

Le problème c'est que dans le fichier Excel, la colonne "catégorie" correspond plus ou moins à cela (appelons là : LIGNE ORIGINALE)

Vêtement > Manche courte, Vêtement > Manche courte > Polo à motif > Polo > Manche courte > Polo n°0001

En soit, aucune logique... Et le pire, c'est que cette logique change pratiquement à chaque ligne ! Impossible donc de rechercher et remplacer...

J'ai donc rentré dans une feuille annexe TOUTES les possibilités concernant chaque catégorie 1, reliée à chaque catégorie 2, et ainsi de suite s'il y avait une déclinaison possible (pour résumer) :

Catégorie 1

Catégorie 2

Catégorie 3Catégorie 4Catégorie 5
VêtementManche courtePoloPolo à motif
VêtementManche courteT-shirt-
VêtementManche courtePoloPolo uni
VêtementManche courtePoloPolo uniREF: POLO-0001

J'aimerai donc afficher (peut-être que c'est la mauvaise méthode ou logique, mais pour que vous compreniez) l'élément de la catégorie 5 SI elle est présente dans la LIGNE ORIGINALE, pareil pour la catégorie 4 afficher un élément qui est présent dans la LIGNE originale, et ainsi de suite...

J'aimerai séparer de la façon suivante :

Catégorie 1Catégorie 2Catégorie 3Catégorie 4Catégorie 5

Pour donner une piste, j'ai essayé la formule =SI dans A1 "Catégorie 1"; "Catégorie 1" et ainsi de suite...

Je n'arrive pas à expliquer mon problème j'ai l'impression...

La logique étant (plus ou moins mal résumé) : Chercher dans "feuille 2". Si dans "Ligne originale" catégorie 5 présente, rentrer l'élément correspondant

Je vous remercie d'avance et je reste disponible pour chaque question !

Bien à vous,

Bonjour,

Je pense qu'un fichier exemple avec 3 ou 4 lignes représentatives de votre tableur avec les 2 feuilles et le résultat attendu sera en effet plus parlant pour une réponse adaptée.

Par avance merci.

Cdlt,

Bonjour Ergotamine et merci pour votre réponse !

Voici un rapide fichier créé, avec en feuille 1 la ligne "catégorie" reçu par le fabricant, en feuille 2 la "base" que j'ai créer, et en feuille 3 l'affichage souhaité du résultat.

Merci !

Bonjour,

Après une heure de recherche j'arrive à quelque chose d'acceptable selon moi :

Sub CATEGORISE()
Dim L%
Dim TABLO_I()
With Worksheets("LIGNE ORIGINALE")
    L = 1
    Do
        ReDim Preserve TABLO_I(L)
        TABLO_I(L) = Split(UCase(Trim(Mid(.Cells(L, 1), InStrRev(.Cells(L, 1), ", ") + 1, Len(.Cells(L, 1))))), " > ")
        Worksheets("Feuille 3").Cells(L + 1, 1).Resize(1, UBound(TABLO_I(L)) + 1) = TABLO_I(L)
        L = L + 1
    Loop Until .Cells(L, 1) = ""
End With
End Sub

A insérer dans un module et exécuter.

Cdlt,

Bonjour Ergotamine,

Un grand merci pour le temps passé sur ma question... Wow, cela fonctionne. Encore merci !

Petite question pour adapter à mon fichier original : j'ai "juste" à remplacer "Ligne originale" et "Feuille 3" dans la formule ?

Encore merci merci merci !!!!

Bonjour,

C'est ça. Je vous commente ce qui pourrait vous intéresser :

Sub CATEGORISE()
Dim L%
Dim TABLO_I()
With Worksheets("LIGNE ORIGINALE") 'Feuille à adapter
    L = 1 'Première ligne à transformer de la feuille
    Do
        ReDim Preserve TABLO_I(L)
        TABLO_I(L) = Split(UCase(Trim(Mid(.Cells(L, 1), InStrRev(.Cells(L, 1), ", ") + 1, Len(.Cells(L, 1))))), " > ")
        Worksheets("Feuille 3").Cells(L + 1, 1).Resize(1, UBound(TABLO_I(L)) + 1) = TABLO_I(L)
        'Nom de feuille à adapter. S'assurer que L + 1 est bien égal à la ligne de renvoi, sinon modifier l'incrément.
        'Exemple si L = 2 car ligne d'en tête sur feuille 1 et première ligne feuille 3 est à la ligne 4 alors 4 = 2 + x donc X = 2 donc .Cells(L + 2, 1) à la place de .Cells(L + 1, 1)
        L = L + 1
    Loop Until .Cells(L, 1) = "" 'Boucle jusqu'à la première ligne cellule vide de la colonne A de la feuille LIGNE ORIGINALE
End With
End Sub

Cdlt,

Un énorme merci...
Sincèrement.

Bonne continuation pour la suite !

Bonjour,

Merci pour le retour.

Cdlt,

Bonjour Ergotamine,

Je reviens vers toi : visiblement la formule fonctionnait pour le test, mais lorsque j'ajoute toutes les informations, rien ne marche... "Erreur 1004"

Je te joins l'Excel complet cette fois-ci, sait-on jamais...

Désolé de réouvrir le sujet !

Bonjour,

De mon côté avec le code tel que posté dans mon autre message, aucune erreur. Sur quelle ligne cette erreur est-elle provoquée ? Est-ce sur le même fichier que joint ?

Cdlt,

Bonjour Ergotamine,

Voici le message qui apparaît lorsque je lance le macro.

capture d ecran 2021 05 11 a 17 14 08

Bien à toi,

Bonjour,

La feuille 3 existe bien correctement ? Après je suis sous WINDOWS et ne peut tester la compatibilité sous MAC ... Si quelqu'un passe par là et voit une erreur autre qu'il n'hésite pas. Avez vous moyen de la tester sous WINDOWS de votre côté ?

Cdlt,

Je suis en effet sous Mac, et ça doit sûrement coincé à ce niveau...

J'aurai la possibilité d'essayer dès demain et je vous fais un retour !

Merci et bonne soirée !

Bonjour Ergotamine,

Je reviens vers vous 1 semaine après...

Le macro ne fonctionne toujours pas, et ce même sous windows.

Certaines lignes (notamment les lignes 296, 297, 298...) ne remplissent seulement la première colonne, puis plus rien. Pourtant il me semble que je n'ai rien oublié...

Je vous met en pièce-jointe le fichier complet, peut-être qu'il y a une erreur directement dans ma ligne originale...

Bonjour,

En effet pour les lignes 295 à 297, j’extrais le texte à partir de la dernière virgule rencontrée, donc ici Dosage. Il n'y a pas de > derrière donc pas de sous niveau c'est le fonctionnement standard de la macro.

Pour la ligne 1 j’extrais Brucelles > Brucelles haute précision qui est le texte après la virgule, que je sépare alors par le délimiteur > donc niveau 1 Brucelles, niveau 2 Brucelles haute précision.

Donc pour moi pas "d'anomalie" à proprement parler la ligne aurait dû être dans ce sens : Adaptateurs, Dosage > Adaptateurs

En espérant que cela vous éclaircisse.

Cdlt,

Bonjour Ergotamine,

Tout d'abord merci de passer autant de temps sur mon cas.

Je comprends mieux avec ces explications le problème...

Pensez-vous qu'il est difficile de changer le programme ? De sorte que :

- Dans la cellule A15 (et les autres, mais celle-ci est plus parlante pour un exemple) contenant le texte suivant :

Outillages, Outillages > Pinces, Outillages > Pinces > Pinces coupantes, Outillages > Pinces > Pinces coupantes > Pinces série confort

Ma base de donnée en feuille numéro 2 (J'ai repris toutes les possibilités de catégories / sous-catégories dans celle-ci). La ligne A15 de la feuille "LIGNE ORIGINALE" correspondrait à la ligne 87 de la feuille "BASE DE DONNÉES" :

Catégorie 1Catégorie 2Catégorie 3Catégorie 4
OutillagesPincesPinces coupantesPINCES SERIE CONFORT

Est-il possible d'utiliser une formule (j'essaye de résumer au mieux mon idée) du type :

"Analyser la cellule A15. Si un terme exact est présent dans la colonne "catégorie 5" (ici, vide). Aucun terme ne correspond. Passage à la "catégorie 4" (ici pinces série confort) dans de ma base de donnée, alors écrire "catégorie 4, puis catégorie 3, puis catégorie 2 et enfin catégorie 1)."

Donc ici : Lecture de A15 : présence du terme "Pinces série confort" dans la base de données en D87. En découle les catégories 3 "Pinces coupantes", catégorie 2 "Pinces" et la catégorie 1 "Outillages".

Trouver Une correspondance avec la colonne E. Si existante, recopier le terme E et découler jusqu'à A.

Si aucun terme de correspond à la catégorie 4, chercher dans la catégorie 3.
Si aucun terme ne correspond à la catégorie 3, chercher dans la catégorie 2.

J'ai l'impression que ce que je demande est littéralement impossible, j'en demande certainement trop...

Peut-être qu'il y a une autre solution ? Partir de la catégorie 1...

Si vous passez en suisse, je vous payerai volontiers le thé !

Bonjour,

Là je sèche car ça risque de prendre beaucoup beaucoup de temps d’exécution.

De plus ça ne règle pas les lignes 295 à 297. En effet je prend quoi comme mot ? Dosage ? Adaptateur ? Dosage, Adaptateur ? Si je prend la dernière possibilité alors je ne le trouveras dans aucune catégorie. Et si je prend juste Dosage, du coup je règle le split sur les espaces ? Donc quand on a Pompes à dessouder je cherche dessouder, pour trouver la catégorie ? Du coup erreur ... Car pas de correspondance.

Il faut vraiment trouver une logique dans votre jeu de données qui s'applique quelque soit la donnée, sinon on ne pourra jamais généraliser la partie code.

Pensez exactement à quelque chose de "simple", quitte à modifier quelques valeurs par la suite. Si 99% sont faits et 1% restants à faire, si ils sont identifiables par une MEFC, vous perdrez peut être moins de temps à les retoucher manuellement qu'à envisager de couvrir tout les cas.

Et j'ai aussi, en tant qu'autodidacte et pas du domaine du dev, j'ai mes limites de connaissances, donc il faudra peut être s'adresser aux experts du forum. Mais avant tout il vous faut une logique extrapolable à toutes vos données.

J'espère que mes explications sont "claires" car je commence aussi à me retourner le cerveau.

Cdlt,

Bonjour,

En effet, s'il n'y a pas une logique pour toutes les entrées, difficile de pouvoir avancer...

Vous avez quand même largement résolu mon problème, je vais finir à la main, je gagnerai sûrement du temps.

En tout cas encore merci pour tout, pour votre aide, le temps passé sur mon problème et sûrement vos maux de têtes...

Je vous souhaite bonne continuation pour la suite, merci pour tout.

Je classe en classé !

Cdlt,

Rechercher des sujets similaires à "question concernant automatisation classer categories"