2ème problème complexe : Format tailles

Bonjour à toutes et à tous,

C'est encore moi et mes formats de taille de soutien-gorges :/

Un peu plus de challenge avec cet autre cas qui est beaucoup plus compliqué et que je dois réaliser pour lundi car on doit lancer les impressions indesign.

Transformer ce format :

75B-90B,75C-95C,75D-95D,75E-95E,70F-90F,75G-85G,75H-80H

  • > Ceci représente les tailles disponible pour 1 produit !
  • > Les lettres peuvent aller de "a" jusqu'à "i" et les chiffres de "65" jusqu'à "105"

en format comme pour le premier cas que j'ai fait hier mais en ligne cette fois-ci :

65G 70CDGH 75BCDEFGH 80BCDEFGH 85BCDEFGH 90BCDEFG 95BCDEF

Du coup les étapes sont complexes car il faut prendre en compte des valeurs non écrites comme par exemple : 80B,85B.

J'ai joint un fichier d'exemple qui j'espère sera complet et correct.

Par ailleurs, pouvez-vous détailler un peu plus que la normal les étapes du code afin que je puisse le déchiffrer pour progresser ?

Merci d'avance pour votre aide !

Bon vendredi

Thibault

10cas-nume-ro-2.xlsx (6.13 Ko)

bonjour

un essai pour le fun avec un max de col masquée

pour une ligne (à incréménter ........ si pas trop d'erreur de $$

11soustif.xlsx (11.87 Ko)

cordialement

normalement avec la fete du split ce serait mieux

Bonjour Thibault,

Titre de ton sujet : « 2ème problème complexe »

Non, non, c'est pas parce que tu as quelques complexes que tu dois essayer de mettre des soutien-gorges !

NB : ce n'est pas du tout pour me moquer de toi, mais j'ai trouvé le jeu de mots irrésistible !

j'espère que tu ne seras pas gêné, sinon, dis-le moi et je supprimerai tout ce texte.

Cordialement

tulipe_4 a écrit :

bonjour

un essai pour le fun avec un max de col masquée

pour une ligne (à incréménter ........ si pas trop d'erreur de $$

cordialement

normalement avec la fete du split ce serait mieux

Merci c'est une idée qui peut me dépanner mais je ne comprends pas comment l'appliquer aux autres lignes

dhany a écrit :

Bonjour Thibault,

Titre de ton sujet : « 2ème problème complexe »

Non, non, c'est pas parce que tu as quelques complexes que tu dois essayer de mettre des soutien-gorges !

NB : ce n'est pas du tout pour me moquer de toi, mais j'ai trouvé le jeu de mots irrésistible !

j'espère que tu ne seras pas gêné, sinon, dis-le moi et je supprimerai tout ce texte.

Cordialement

Haha pas de problème J'ai l'habitude d'avoir des blagues sur le fait que je bosse dans de la lingerie :p

re

voila la version incrementée

j'avais merdé comme pévu avec des $$ à ligne(1:255)

ça marche malgrè le "dépannage"

12soustif-2.xlsx (55.09 Ko)

cordialement

Ca fonctionne

Je vais faire en sorte de transformer tout ça en macro.

Merci beaucoup pour ton aide c'est vraiment top.

Excellente journée à toi et toutes les personnes du forum =D

re

pour la macro , ce ne sera pas moi , mais au vu du nb de téléchargement ; ça ne tardera pas

cordialement

Bonjour à toutes et à tous,

Malheureusement, je n'avais pas fait attention mais cette manière de faire ne prend en compte que les chiffres qui apparaissent.

Si j'ai par exemple 70B-80B, il ne va prendre en compte que 70 et 80 alors que je souhaiterais également qu'il prenne en compte 75.

Les tailles augmentent de 5 en 5 donc si j'ai 70B-90B, ca veut dire que la liste est 70B,75B,80B,85B,90B.

Quelqu'un peut-il me venir en aide s'il vous plait ?

Merci d'avance pour votre aide précieuse.

Excellente journée !

Thibault

bonjour,

une proposition

Sub aargh()
    Dim t(10) ' tableau des tailles trouvées
    dl = Cells(Rows.Count, 1).End(xlUp).Row 'dl dernière ligne en colonne A
    Set dico = CreateObject("scripting.dictionary") 'dictionnaire des tailles pour retrouver la taille dans t
    For i = 2 To dl 'on parcourt les lignes
        ct = -1 'ct index de la dernière taille introduite dans t
        s = Split(Cells(i, 1), ",") 's tableau des différents cups sur la ligne
        For j = LBound(s) To UBound(s) 'on prend chaque info cup
            d = Split(s(j), "-") 'd tableau taille mini et taille maxi pour ce cup
            c = Right(d(0), 1) 'cup
            For k = Val(d(0)) To Val(d(1)) Step 5 'on génère les valeurs de mini à maxi
                If dico.exists(k) Then 'taille déjà dans le tableau des tailles
                    ta = dico(k) 'oui on récupère son index
                Else
                    ct = ct + 1 'non on incrémente l'index des tailles présentes dans le tableau
                    dico.Add k, ct 'on ajoute la taille au dictionnaire avec l'index dans le tableau
                    ta = ct 'index =index de la dernière taille ajoutée dans le tableau
                    t(ta) = k 'on met la taille dans le tableau
                End If
                t(ta) = t(ta) & c 'on ajoute le cup à la taille générée
            Next k
        Next j
        Cells(i, 2).Resize(, ct + 1) = t 'on met le résultat pour cette ligne
        Cells(i, 2).Resize(, ct + 1).Sort key1:=Cells(i, 2), order1:=xlAscending, Orientation:=2, Header:=xlNo 'on trie
    Erase t 'on efface le contenu du tableau des taille
    dico.RemoveAll 'on efface le contenu du dictionnaire
Next i
End Sub
6cas-nume-ro-2.xlsm (17.69 Ko)

Bonjour Thibault,

Je te propose le fichier ci-dessous ; il y a une fonction personnalisée LTSG(), utilisée en B1 et B2 ;

Alt F11 pour voir le code VBA de la fonction, puis revenir sur Excel ; lis bien les commentaires

(qui sont en vert).

Merci de me donner ton avis.

Cordialement

8exo-tfery.xlsm (13.85 Ko)

Bonjour dhany et h2so4,

Merci beaucoup pour votre aide.

Je vais regarder vos fichiers et bien évidemment je vous ferai un retour

Cordialement,

Thibault

h2so4 a écrit :

bonjour,

une proposition

Sub aargh()
    Dim t(10) ' tableau des tailles trouvées
    dl = Cells(Rows.Count, 1).End(xlUp).Row 'dl dernière ligne en colonne A
    Set dico = CreateObject("scripting.dictionary") 'dictionnaire des tailles pour retrouver la taille dans t
    For i = 2 To dl 'on parcourt les lignes
        ct = -1 'ct index de la dernière taille introduite dans t
        s = Split(Cells(i, 1), ",") 's tableau des différents cups sur la ligne
        For j = LBound(s) To UBound(s) 'on prend chaque info cup
            d = Split(s(j), "-") 'd tableau taille mini et taille maxi pour ce cup
            c = Right(d(0), 1) 'cup
            For k = Val(d(0)) To Val(d(1)) Step 5 'on génère les valeurs de mini à maxi
                If dico.exists(k) Then 'taille déjà dans le tableau des tailles
                    ta = dico(k) 'oui on récupère son index
                Else
                    ct = ct + 1 'non on incrémente l'index des tailles présentes dans le tableau
                    dico.Add k, ct 'on ajoute la taille au dictionnaire avec l'index dans le tableau
                    ta = ct 'index =index de la dernière taille ajoutée dans le tableau
                    t(ta) = k 'on met la taille dans le tableau
                End If
                t(ta) = t(ta) & c 'on ajoute le cup à la taille générée
            Next k
        Next j
        Cells(i, 2).Resize(, ct + 1) = t 'on met le résultat pour cette ligne
        Cells(i, 2).Resize(, ct + 1).Sort key1:=Cells(i, 2), order1:=xlAscending, Orientation:=2, Header:=xlNo 'on trie
    Erase t 'on efface le contenu du tableau des taille
    dico.RemoveAll 'on efface le contenu du dictionnaire
Next i
End Sub

Merci @h2so4 pour ta proposition mais je suis malheureusement sous mac donc je ne peux pas utiliser de dico

@Thibault : et ma fonction personnalisée =LTSG(), est-ce que tu l'as essayé ? peut-elle te servir ? dhany

dhany a écrit :

@Thibault : et ma fonction personnalisée =LTSG(), est-ce que tu l'as essayé ? peut-elle te servir ? dhany

Je suis justement en train de regarder et d'essayer de la modifier pour l'utiliser car pour le moment elle ne comprend que les tailles B alors qu'elles peuvent être A, B ,C, ..., I.

Aussi, dans une cellule j'ai plusieurs "tsf" si je me base sur ton code (ex : 70B-95B, 85C-90C, 75D-95D)

Thibault a écrit :

j'ai plusieurs "tsf" ; ex : 70B-95B, 85C-90C, 75D-95D

J'ai corrigé une petite erreur, et aussi, j'ai adapté le code en conséquence ;

voir la nouvelle version du fichier ci-dessous :

10exo-tfery.xlsm (14.09 Ko)
dhany a écrit :
Thibault a écrit :

j'ai plusieurs "tsf" ; ex : 70B-95B, 85C-90C, 75D-95D

J'ai corrigé une petite erreur, et aussi, j'ai adapté le code en conséquence ;

voir la nouvelle version du fichier ci-dessous :

Je l'avais précisé dans mon premier poste et c'est ma faute car j'ai oublié de le redire mais les tailles peuvent aller de 65 à 105.

Du coup comme ton code utilise des Left, Mid et Right, ca ne peut pas fonctionner s'il y a des 70A-100A ou encore 100B-105B

Cependant, je suis content car j'arrive a comprendre la majorité de ton code

Je sais pas trop si je peux te proposer ce patch logiciel : tu demandes à tes clientes de faire de la liposuccion, ok ?

bon, c'est reparti pour une nouvelle adaptation de mon code VBA ; résultat dans le fichier joint ci-dessous ; bravo

pour tous tes efforts pour arriver à comprendre mon code VBA... y'a d'quoi faire !!!

et t'inquiètes pas, on va bien finir par y arriver !

6exo-tfery.xlsm (14.15 Ko)

bonjour,

une version sans dictionnaire

Sub aargh()
    Dim t(10), dico(10)    ' tableau des tailles trouvées
    dl = Cells(Rows.Count, 1).End(xlUp).Row    'dl dernière ligne en colonne A
    For i = 2 To dl    'on parcourt les lignes
        ct = -1    'ct index de la dernière taille introduite dans t
        s = Split(Cells(i, 1), ",")    's tableau des différents cups sur la ligne
        For j = LBound(s) To UBound(s)    'on prend chaque info cup
            d = Split(s(j), "-")    'd tableau taille mini et taille maxi pour ce cup
            c = Right(d(0), 1)    'cup
            For k = Val(d(0)) To Val(d(1)) Step 5    'on génère les valeurs de mini à maxi
                ta = -1
                For j1 = 0 To ct
                    If dico(j1) = k Then    'taille déjà dans le tableau des tailles
                        ta = j1    'oui on récupère son index
                        Exit For
                    End If
                Next j1
                If ta = -1 Then
                    ct = ct + 1    'non on incrémente l'index des tailles présentes dans le tableau
                    ta = ct    'index =index de la dernière taille ajoutée dans le tableau
                    dico(ct) = k
                    t(ta) = k    'on met la taille dans le tableau
                End If
                t(ta) = t(ta) & c    'on ajoute le cup à la taille générée
            Next k
        Next j
        Cells(i, 2).Resize(, ct + 1) = t    'on met le résultat pour cette ligne
        Cells(i, 2).Resize(, ct + 1).Sort key1:=Cells(i, 2), order1:=xlAscending, Orientation:=2, Header:=xlNo    'on trie
        Erase t    'on efface le contenu du tableau des taille
        Erase dico    'on efface le contenu du dictionnaire
    Next i
End Sub
7cas-nume-ro-2.xlsm (18.57 Ko)
h2so4 a écrit :

bonjour,

une version sans dictionnaire

Sub aargh()
    Dim t(10), dico(10)    ' tableau des tailles trouvées
    dl = Cells(Rows.Count, 1).End(xlUp).Row    'dl dernière ligne en colonne A
    For i = 2 To dl    'on parcourt les lignes
        ct = -1    'ct index de la dernière taille introduite dans t
        s = Split(Cells(i, 1), ",")    's tableau des différents cups sur la ligne
        For j = LBound(s) To UBound(s)    'on prend chaque info cup
            d = Split(s(j), "-")    'd tableau taille mini et taille maxi pour ce cup
            c = Right(d(0), 1)    'cup
            For k = Val(d(0)) To Val(d(1)) Step 5    'on génère les valeurs de mini à maxi
                ta = -1
                For j1 = 0 To ct
                    If dico(j1) = k Then    'taille déjà dans le tableau des tailles
                        ta = j1    'oui on récupère son index
                        Exit For
                    End If
                Next j1
                If ta = -1 Then
                    ct = ct + 1    'non on incrémente l'index des tailles présentes dans le tableau
                    ta = ct    'index =index de la dernière taille ajoutée dans le tableau
                    dico(ct) = k
                    t(ta) = k    'on met la taille dans le tableau
                End If
                t(ta) = t(ta) & c    'on ajoute le cup à la taille générée
            Next k
        Next j
        Cells(i, 2).Resize(, ct + 1) = t    'on met le résultat pour cette ligne
        Cells(i, 2).Resize(, ct + 1).Sort key1:=Cells(i, 2), order1:=xlAscending, Orientation:=2, Header:=xlNo    'on trie
        Erase t    'on efface le contenu du tableau des taille
        Erase dico    'on efface le contenu du dictionnaire
    Next i
End Sub

Merci mille fois h2so4 pour le code. Il fonctionne parfaitement et tous mes besoins sont dedans.

Je vais l'analyser et si je ne comprends pas certain éléments, je te demanderai directement si tu es d'accord

dhany a écrit :

Je sais pas trop si je peux te proposer ce patch logiciel : tu demandes à tes clientes de faire de la liposuccion, ok ?

bon, c'est reparti pour une nouvelle adaptation de mon code VBA ; résultat dans le fichier joint ci-dessous ; bravo

pour tous tes efforts pour arriver à comprendre mon code VBA... y'a d'quoi faire !!!

et t'inquiètes pas, on va bien finir par y arriver !

Merci beaucoup dhany pour tout ce que tu as fait. Ca va tout de même me servir pour d'autres codes et j'ai vraiment apprécié ta disponibilité

Encore merci à vous deux de prendre de votre temps pour aider des débutants comme nous <3

Excellente journée !

Rechercher des sujets similaires à "2eme probleme complexe format tailles"