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
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
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
re
voila la version incrementée
j'avais merdé comme pévu avec des $$ à ligne(1:255)
ça marche malgrè le "dépannage"
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
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
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 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 :
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 !
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
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 !