Famille article

J'ai un fichier Excel qui contient les articles sur la feuille TOUTPublicDL et une autre feuille famille qui contient les familles et sous familles tout 2 sont liés par un code famille.

Je souhaiterais dans mon fichier article indique le nom de famille, sous famille et sous sous famille.

Le code famille est composé des niveaux familles.

Exple : le code famille est le suivant A.00.01.DOM.

A. correspond à la famille qui est CHAUFFAGE

A.00 correspond à la sous famille qui est CHAUDIERES

A.00.01. correspond à la sous sous famille qui est CHAUDIERE FONTE FUEL

A.00.01.DOM correspond à la sous sous sous famille qui est DOMUSA

D'avance merci

49toutpublicdl2.xlsx (297.36 Ko)

Bonjour Quirion,

Ce que tu veux faire est assez classique, sauf une information manquante, qui est la suivante : le nombre de niveaux dans l'arborescence est-il le même pour tous les articles ?

Si oui, alors on va pouvoir proposer une liste déroulante pour attribuer la classification à un produit, et récupérer toutes les caractéristiques de cette classification...

C'est cela que tu souhaites ?

A+ Daniel

Bonjour DAn42153,

Avec RECHERCHEV et l'onglet "FAMILLE" correctement renseigner (c'est à dire les données élatées), voici ce que ça peut donner.... en espérant que c'est cela que tu recherches.

Bonjour Dan42153,

Pour répondre à ta question, la séparation des niveaux sont fait par les "." (A.00.01.DOM)

A. 00. 01. DOM

Famille Sous famille Sous famille Niv2 Sous famille Niv3


Bonjour et1000lio,

Avec la formule RECHECHEV, ce n'est pas possible car dès fois y à 3 ou 2 caractères.

On le voit bien sur la première ligne (qui est un article), la sous famille est sur 3 caractères (D.D09.C.) alors que d'autre non (A.00.01.DOM).

J'en déduis que le nombre de niveaux de l'arborescence n'est pas homogène : le code "A.CO.DAN." a 3 niveaux, et le code "A.06.601.DAN." en a 4.

Mais tes exemples ne me sont pas suffisants pour pouvoir t'aider : as-tu une liste des sous-familles de chaque niveau ? Ces niveaux sont -ils dépendants ou interdépendants ? En d'autres termes, si on choisi une sous-famille 4, est-ce-que ça indique automatiquement la 3, la 2, et la 1 ?

Ou bien, au moment de la classification des articles, faut-il analyser chaque partie de son code de classification pour remonter les infos ?

Ces deux problématiques différentes supposent une organisation différentes des données, à mon avis, d'où ces questions...

A+ Daniel

19quirion.xlsx (13.13 Ko)

Une première hypothèse en PJ :

  • tous les niveaux de classification sont indépendants les uns des autres (par d'arborescence) : un article peut appartenir à n'importe lequel des 4 niveaux
  • on saisit chaque code de niveau, et on obtient en retour le code complet et le libellé de chaque niveau (ou d'autres informations des niveaux)
  • on pourra totaliser les articles pour chaque niveaux, et faire des stat tous azimuts sur toutes ces codifications...

Mais ça c'est une première hypothèse : est-ce-qu'on est loin ?

A+ Daniel


paS d'arborescence, voulais-je dire...

Désolé Dan42153, je n'ai pas pu te répondre.

Voilà ce que j'ai besoin, c'est de savoir pour l'article 12095008417 TRANSFO POUR BANDEAU LED 50 W REF:5008417 qui à le code famille D.D09.C. que sa famille c'est ELECTRICITE (D.) puis sa sous famille c'est ECLAIRAGE (D09C.) puis sa sous famille niv2 c'est CONSTRUCTEURS (C.) etc...

Le but derrière c'est pour importer cette base dans un logiciel de gestion.

A ce moment là, avant le travail que je t'ai posté, il faudrait une bonne âme sur VBA (je vais pas avoir le temps de le faire cet après-midi), qui découpe la colonne C grâce au point dans les 4 colonnes suivantes. Ces dernières contiennent des formules récupérant les caractéristiques des classifications...

23quirion.xlsx (13.13 Ko)

Bonjour Dan42153 et quirion , pour le découpage voici la macro dont tu pourras te servir qui ira chercher les noms des familles et sous familles

Sub famille()
    Dim table() As String, i%, quoi As Variant, trouve As Range
    i = 2
    With Feuil1
        While .Range("c" & i) <> ""
            table = Split(.Range("c" & i), ".")
            For j = 0 To 5
                On Error Resume Next
                If Len(table(j) & ".") > 1 Then .Cells(i, j + 4) = table(j) & "."
                quoi = table(j) & "."
                If Len(quoi) > 1 Then
                    Set trouve = Feuil2.Range("a1:a" & Range("a" & Rows.Count).End(xlUp).Row).Find(quoi, lookat:=xlPart)
                    If Not trouve Is Nothing Then .Cells(i, j + 4) = trouve.Offset(0, 2)
                End If
            Next
            i = i + 1
        Wend
    End With
End Sub

et si les résultats ne sont pas probant (je n'ai pas tout vérifié) tu peux utiliser cette marco là pour simplement récuperer les appélations (A., CO....)

Sub famille()
    Dim table() As String, i%, quoi As Variant, trouve As Range
    i = 2
    With Feuil1
        While .Range("c" & i) <> ""
            table = Split(.Range("c" & i), ".")
            For j = 0 To 5
                On Error Resume Next
                If Len(table(j) & ".") > 1 Then .Cells(i, j + 4) = table(j) & "."
            Next
            i = i + 1
        Wend
    End With
End Sub

J'sais pas pourquoi j'ai fait une fixation sur les points et je les laissé dans les recherches...C't'un bug de mon cerveau j'crois...

Bonjour,

J'ai trouvé la solution avec un script VBA.

Voici le script :

Sub Report()

Dim Chemin As String, Référence_1 As String, Référence_2 As String, Référence_3 As String, Référence_4 As String, Suite As String

Dim Point_1 As Byte, Point_2 As Byte, Point_3 As Byte

Dim Famille_1 As Integer, Famille_2 As Integer, Famille_3 As Integer, Famille_4 As Integer

Dim i As Integer, DerLig As Integer

Application.ScreenUpdating = False

Chemin = ThisWorkbook.Path

DerLig = Range("A" & Rows.Count).End(xlUp).Row

ActiveWorkbook.Sheets("Famille").Copy After:=ActiveWorkbook.Sheets("Famille")

Sheets("Famille (2)").Name = "Feuille_provisoire"

Sheets("Feuille_provisoire").Move Before:=ThisWorkbook.Sheets(1)

Application.DisplayAlerts = False

Application.DisplayAlerts = True

Sheets("TOUTPublicDL").Select

For i = 2 To DerLig

Point_1 = WorksheetFunction.Search(".", Range("C" & i))

Référence_1 = Left(Range("C" & i), Point_1)

Suite = Right(Range("C" & i), Len(Range("C" & i)) - Point_1)

Point_2 = WorksheetFunction.Search(".", Suite)

Référence_2 = Left(Range("C" & i), Point_1 + Point_2)

Suite = Right(Range("C" & i), Len(Range("C" & i)) - (Point_1 + Point_2))

Point_3 = WorksheetFunction.Search(".", Suite)

If Left(Range("C" & i), Point_1 + Point_2 + Point_3) = Référence_2 Then

Référence_3 = ""

Else

Référence_3 = Left(Range("C" & i), Point_1 + Point_2 + Point_3)

End If

If Range("C" & i) = Référence_3 Then

Référence_4 = ""

Else

Référence_4 = Range("C" & i)

End If

'Reports

On Error Resume Next

Famille_1 = WorksheetFunction.Match(Référence_1, Sheets("Feuille_provisoire").Range("A:A"), 0)

Famille_2 = WorksheetFunction.Match(Référence_2, Sheets("Feuille_provisoire").Range("A:A"), 0)

Famille_3 = WorksheetFunction.Match(Référence_3, Sheets("Feuille_provisoire").Range("A:A"), 0)

Famille_4 = WorksheetFunction.Match(Référence_4, Sheets("Feuille_provisoire").Range("A:A"), 0)

Range("E" & i) = Sheets("Feuille_provisoire").Range("C" & Famille_1)

Range("F" & i) = Sheets("Feuille_provisoire").Range("C" & Famille_2)

If Famille_3 > 0 Then Range("G" & i) = Sheets("Feuille_provisoire").Range("C" & Famille_3)

If Famille_4 > 0 Then Range("H" & i) = Sheets("Feuille_provisoire").Range("C" & Famille_4)

Famille_1 = 0

Famille_2 = 0

Famille_3 = 0

Famille_4 = 0

Next i

Application.DisplayAlerts = False

Sheets("Feuille_provisoire").Delete

Application.DisplayAlerts = True

End Sub

Merci en tout cas pour vos réponses.

Bye

Rechercher des sujets similaires à "famille article"