XL 2013 Regroupement de données selon plusieurs critères..

anri0610

XLDnaute Junior
Bonjour a tous,

Mon soucis:
effectuer la somme des valeurs de la colonne E si/quand les valeurs des colonnes A B C D sont toutes identiques,
j'aurais pourtant essayer d être clair... ><

je vous joint le fichier concerne, sachant que les valeurs diffèrent toutes a chaque travail donc impossible de définir une règle pour une quelconque valeur.

ex/
maintenant:

AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-1 110 25 2100 10
AW-3 110 25 800 10

résultat souhaite:

AW-1 110 25 2100 50
AW-3 110 25 800 10

je souhaiterai effectuer ce résultat avec une macro,
et ne pas transformer la mise en forme des données pour un tableau dynamique.
est-ce seulement possible ?
 

Pièces jointes

  • TEST.xlsx
    10 KB · Affichages: 50

Dranreb

XLDnaute Barbatruc
Bon, ce sera ma dernière proposition en ce qui concerne le regroupement sur la 1ère colonne
VB:
         For Each Arg4 In Arg3.Co
            ReDim TJoin(1 To Arg4.Count): J = 0: ReDim TS1(-1 To -1)
            For Each Arg1 In Arg4.Co
               TS2 = Split(Arg1.Id, "-")
               For P = 0 To UBound(TS2) - 1: TS2(P) = TS2(P) & "-": Next P
               For P = 0 To UBound(TS1): If P >= UBound(TS2) Then Exit For
                  If TS2(P) <> TS1(P) Then Exit For
                  Next P
               Nom = "": While P <= UBound(TS2): Nom = Nom & TS2(P): P = P + 1: Wend
               J = J + 1: TJoin(J) = Nom: TS1 = TS2: Next Arg1
Quant à savoir si on saura toujours interpréter humainement le texte dans les cas les plus tordus, c'est une autre histoire…
 

Pièces jointes

  • GigogneAnri0610.xlsm
    3.5 MB · Affichages: 21

anri0610

XLDnaute Junior
Bonjour,
Merci Dranreb pour votre solution elle fonctionne parfaitement, je m'en sers tous les jours et grâce a vous je peux montrer a mes collègues que via un ordinateur on peut effectuer énormément de choses!

je souhaiterai avoir votre avis et si possible un conseil,
j'essaye actuellement d'ajouter la dernière colonne de valeurs G au regroupement,
le but serait en de garder le fonctionnement actuel avec les couleurs,
et de séparer les regroupement actuels si la valeur de la colonne G diffère et en affichant celle ci a droite de la couleur correspondante .

j'ai alors essayer d'utiliser la solution 2 que vous avez créer pour le regroupement via la colonne F,
je l'ai modifier et créé un module appelé ModuleSol3 et j'en suis arriver a un résultat qui remplace le regroupement via la colonne F par la colonne G
(je ne sais pourquoi les autres données s'en trouvent erronées mais bref),

je souhaiterai votre avis si vous voulez bien,

serait il pour le résultat souhaite que je vous joint en print screen ,
plus adéquat d'opter pour l' ajout d'un Arg supplémentaire au regroupement,
ou bien comme pour les couleurs de passer via un Dico?
Comme vous pourrez le voir si la valeur de cette colonne G diffère,
il faudrait effectuer un nouveau regroupement car c'est un autre produit,
c'est ce qui me fait penser a une structure de regroupement avec un Arg en plus tout en gardant la structure actuelle pour les couleurs.
Cependant dans ce cas la est ce possible d' afficher sa valeur correspondante comme dans l'exemple sol souhaite ?

merci !
 

Pièces jointes

  • Resultat Sol3.xlsm
    1.4 MB · Affichages: 17
  • PERSONAL.xlsm
    1.5 MB · Affichages: 15
  • Sol souhaite.xlsm
    1.4 MB · Affichages: 14
  • resultat sol3.png
    resultat sol3.png
    95.9 KB · Affichages: 16
  • sol souhaite.png
    sol souhaite.png
    58.5 KB · Affichages: 14

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne sais pas quoi vous dire. L'exemple n'est pas suffisant pour définir le résultat souhaité dans tous les cas de figures.
Dans votre essai vous n'utilisez qu'un seul Dictionary en y écrasant l'inventaire sur la colonne 6 par celui sur la colonne 7. Il en résulte que les Detail(6) ne s'y trouvent plus et que Dico(Detail(6)) donne toujours 0, et donc les C = L + Dico(Detail(6)) toujours L, de sorte que tout vient se cumuler à la valeur de la colonne 4, sur la 4ième ligne du paquet.
Si vous voulez le faire par des SsGr supplémentaires il faut deux passes parce qu'ils sont toujours contradictoires avec ceux sur Arg1, mais dans ce cas je ne vois pas comment vous allez conserver le principe des emplacements fixes verticalement.

Édition: Très étonné qu'il vous ait fallu démontrer à des collègues japonais qu'on peut effectuer énormément de choses avec un ordinateur !
 
Dernière édition:

anri0610

XLDnaute Junior
Bonjour,

je tenait a vous faire part de ma solution,
j'ai trouver une manière d'arriver au même résultat souhaite ,
la procédure peut paraître bizarre mais cela me permet de différencier les données en fonction de la colonne G, sans modifier votre MRegrouperSol2 .

Voici la premier partie utlisee avant le regroupement :

VB:
    Range("K2").Select
    ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-7],RC[-4])"
    Selection.AutoFill Destination:=Range("K2:K500"), Type:=xlFillCopy
    Range("K2:K500").Select
    Selection.End(xlUp).Select
    Range("K2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Selection.End(xlUp).Select
    Range("D2").Select
    Selection.PasteSpecial PASTE:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False


    Range("K2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp

Puis ensuite effacer les données parasites après le regroupement :

VB:
    Columns("I:I").Select
    Selection.Replace What:="縦枠", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Columns("I:I").Select
    Selection.Replace What:="上枠", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="戸当り", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="下枠 ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="中方立", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="方立", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

voici pour ma solution qui reste de la débrouille vu mes capacités : )

J'essaye seulement a présent de reporter le texte des cellules de cette colonne G,
pour chaque regroupement a droite des valeurs répétées de la colonne D,
tout comme vous l'avez fait pour les couleurs en colonne J,

mon problème je n'arrive pas du tout a comprendre votre code!
qui est beaucoup trop complexe pour moi :/
donc je n'ai même pas réussi a repérer la partie de votre code qui reporte les valeur en colonne J.

Si cette procédure est simple pour vous je souhaiterait savoir comment m'y prendre,
pour le coup même si je m'y prend d'une autre manière,
il faudrait tout de même que j'incorpore ce code dans votre solution, ce qui me bloque pour y arriver.
 

Pièces jointes

  • PERSONAL 12.5.xlsm
    1.6 MB · Affichages: 13
  • fichier test.xlsm
    129.9 KB · Affichages: 16
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous savez bien que tout est envoyé dans les cellules en une seule fois tout à la fin. C'est TRes qui est envoyé dans RngCible, défini à partir de H1.
Donc la colonne J c'est TRes(L, 3). J'y mets des 1 pour le coloriage en rouge, mais aussi les codes de couleurs à la fin, obtenus à partir de la colonne 6 dans un Dictionary au début.
 
Dernière édition:

anri0610

XLDnaute Junior
Bonjour,
merci de votre réponse,
non malheureusement je ne comprends pas beaucoup, je n'ai aucune notion de codage a la base, je fais de mon mieux pour apprendre selon mon besoin,
seulement votre aide est bien au delà de ma compréhension,
j'essaye tout de même, dans ce cas en voulant faire un autre dico juste pour la colonne G :

VB:
   Dim TTit(), TInt(), TRes(), RngCbl As Range, Arg1 As SsGr, Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg6 As SsGr, _
      TS1() As String, TJoin() As String, J As Long, TS2() As String, P As Long, Nom As String, L As Long, Dico As Dictionary, TCoul(), C As Long, Detail
   TTit = ActiveSheet.[G:G].Value
'   Set Dico = DicInvent(ActiveSheet.[A2:F2], 6, 4)
   Set Dico = DicInvent(ActiveSheet.[G2:G], 4, 3)
'   ReDim TRes(1 To 10000, 1 To 4 + Dico.Count)
   ReDim TRes(1 To 10000, 1 To 3)
   Set RngCbl = ActiveSheet.[J1].Resize(UBound(TRes, 1), UBound(TRes, 2))
'   VerserEntetes TRes, Dico
   TCoul = Dico.Keys: L = 1
   RngCbl.Font.Color = 0

'

mais je n'aboutit a rien..
serais je sur la bonne voie?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non pas du tout. Vous avez déjà essayé ça, en employant la même variable As Dictionary au lieu d'une seconde différente. Çà ne fait qu'y fusiller l'inventaire sur la colonne 6 qui y est d'abord mis.
Ce qu'il faut faire dépend toujours du résultat que vous voulez obtenir dans tous les cas de figure.
Par ailleurs ça gênerait Gigogne s'il doit reprendre les mêmes données que celles spécifiées au dernier DicInvent, ce qu'il fait si on lui spécifie Null..
D'ailleurs pour ce second DicInvent, pourquoi spécifiez vous la colonne 7 d'une plage qui ne comporte qu'une seule colonne, la G ?
Et même pour le 1er, si vous vous voulez à présent récupérer des données de la colonne G pourquoi ne faites vous aller les données d'entrée que jusqu'à la colonne F ?
Mais j'y pense: si vous aurez désormais une colonne 7, plutôt que de se battre avec un Dictionary consulté d'après les Detail(7), n'auriez vous pas meilleurs temps d'utiliser un Arg7 As SsGr ? 7 à spécifier juste après 6 à Gigogne et boucle For Each Arg7 In Arg6.Co à mettre juste à l'intérieur de la For Each Arg6 In …
Enfin si j'ai compris ce que vous voulez faire, ce qui n'est pas sûr du tout.
En fait ce serait peut être même plutôt après la 4, non ? For Each Arg7 in Arg4.Co
Quant à ce fichu regroupement tardif et contradictoire sur la Arg1, ben ma fois on verra ce qu'on verra … (il deviendrait bien évidemment For Each Arg1 In Arg7.Co du coup)
 
Dernière édition:

anri0610

XLDnaute Junior
Je souhaiterai simplement afficher dans le regroupement vertical, les valeurs de la colonne G correspondantes aux valeurs de la colonne D,
si possible a leurs droite, comme pour les valeurs de la colonne F qui sont en colonne J,
ce qui positionnerait ces valeurs voulues finalement juste au dessus de ces dites valeurs en colonne J.
J'essaye d’être clair mais rien a faire j'ai pas l'impression de l’être désolé!

J'essaye comme vous me l'avez conseiller, si j'ai bien compris,pour l'instant:

VB:
   Dim TTit(), TInt(), TRes(), RngCbl As Range, Arg1 As SsGr, Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg6 As SsGr, Arg7 As SsGr, _
      TS1() As String, TJoin() As String, J As Long, TS2() As String, P As Long, Nom As String, L As Long, Dico As Dictionary, TCoul(), C As Long, Detail
   TTit = ActiveSheet.[A1:F1].Value

le TTit = ActiveSheet.[A1:F1].Value il n'est pas nécessaire de le modifier ?
 

Dranreb

XLDnaute Barbatruc
Il faut bien évidemment le rectifier aussi pour pouvoi reproduire comme pour les autres le titre de cette colonne. Raisonnez plutôt en numéros de colonnes ce sera plus simple. D'ailleurs le temps de la mise au point vous pourriez mettre l'affichage en mode R1C1 pour mieux suivre. Laissez la colonne 4 comme elle était à l'origine. C'est complètement idiot d'y concaténer la colonne 7: il suffit de prévoir un SsGr Arg7 supplémentaire juste derrière, en demandant à la fonction Gigogne de regrouper sur la 7 juste après la 4, ça fera la même chose: comme dans votre solution provisoire: les Arg1 ne seront plus considérés toutes valeurs confondues de la colonne 7 pour l'ensemble de la combinaison des colonnes 2, 3 et 4 seulement mais bien pour chacune d'entre elles différente par sa colonne 7 aussi. Ce qui est important s'il y a des colonnes supplémentaires à produire où on devra ranger Arg4.Id et Arg7.Id ou bien Detail(7), c'est de rectifier la redéfinition du nombre de colonnes du tableau TResu. Veillez aussi à ce que la plage d'accueil RngCible soit convenablement 'Resizée' (dans ma Sub RegrouperSol1 le Resize n'employait pas UBound(TRes, 2) pour garantir cela).
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous prétendez, n'est ce pas, que vous obtenez le résultat que vous souhaitiez en concaténant préalablement la colonne 7 à la colonne 4, avec résultat remis en colonne 4. Ça revient à dire que, si on ne fait pas cette concaténation préalable, vous voulez tout un paquet complet de lignes, différent pour chaque valeur différente de la colonne 7, en plus des colonne 2, 3, 4, c'est bien ça ?
Si ça se trouve, vous avez une conception tellement imprécise des chose qu'il suffirait pour obtenir ce que vous vouliez d'ajouter dans la boucle For Each Detail une instruction TRes(C, 4) = Detail(7).
Mais avec votre concaténation préalable (ou l'organisation de la collection qui reviendrait au même) je ne comprends pas trop pourquoi vous voulez le mettre juste en face des 色仕様, vu que ce sera forcément le seul et unique même pour tout le paquet.
Du moment qu'il y aura un chiffre en face d'un 色仕様 il sera forcément toujours pour le 品名 commun du paquet.
 
Dernière édition:

anri0610

XLDnaute Junior
Bonjour Dranreb,

J'essaye comme je peux pour vous montrer que ce n'est pas du tout de la mauvaise foi,
je comprends ce que vous dites, mais c'est l'appliquer qui me bloque,
quoi modifier ou et comment,
je ne vais pas non plus vous envoyer mes essais aberrants de modifications par ci par la,
merci beaucoup c'est tres gentil de votre part d'essayer de m'expliquer mais je nage un peu dans un océan. Peut etre qu'il faudrait que je fasse chose par chose pour y arriver,
car si je modifier une chose que j'ai a peut prêt deviner, pour la suite quoi faire reste un
gros probleme..
mais pendant pas mal de temps sans vous contacter j'ai essayer plein de manières différentes dans ce genre la , en analysant le résultat pour trouver le comment du pourquoi, pour comprendre chaque chose et modifiant petit a petit..
malgré ça a chaque tentative aucune finalité toujours des erreurs que je ne résolvait pas.
voici ou j'en suis dans ce cas la sans modifier n'importe quoi,

VB:
   Dim TTit(), TInt(), TRes(), RngCbl As Range, Arg1 As SsGr, Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg6 As SsGr, Arg7 As SsGr, _
      TS1() As String, TJoin() As String, J As Long, TS2() As String, P As Long, Nom As String, L As Long, Dico As Dictionary, TCoul(), C As Long, Detail
   TTit = ActiveSheet.[A1:G1].Value
'   Set Dico = DicInvent(ActiveSheet.[A2:F2], 6, 4)
   Set Dico = DicInvent(ActiveSheet.[A2:F2], 7, 1)
'   ReDim TRes(1 To 10000, 1 To 4 + Dico.Count)
   ReDim TRes(1 To 10000, 1 To 3)
   Set RngCbl = ActiveSheet.[H1].Resize(UBound(TRes, 1), UBound(TRes, 2))
'   VerserEntetes TRes, Dico
   TCoul = Dico.Keys: L = 1
   RngCbl.Font.Color = 0
   For Each Arg2 In Gigogne(Null, -2, -3, -4, 1)
      For Each Arg3 In Arg2.Co
          For Each Arg4 In Arg3.Co
            ReDim TJoin(1 To Arg4.Count): J = 0: ReDim TS1(-1 To -1)
            For Each Arg1 In Arg4.Co
               TS2 = Split(Arg1.Id, "-")
               For P = 0 To UBound(TS2) - 1: TS2(P) = TS2(P) & "-": Next P
               For P = 0 To UBound(TS1): If P >= UBound(TS2) Then Exit For
                  If TS2(P) <> TS1(P) Then Exit For
                  Next P
               Nom = "": While P <= UBound(TS2): Nom = Nom & TS2(P): P = P + 1: Wend
               J = J + 1: TJoin(J) = Nom: TS1 = TS2: Next Arg1
             L = L + 1: TRes(L, 1) = TTit(1, 1): TRes(L, 2) = Join(TJoin, ".")
            L = L + 1: TRes(L, 1) = TTit(1, 2): TRes(L, 2) = Arg2.Id: If Arg2.Id > 200 Then TRes(L, 3) = 1
            L = L + 1: TRes(L, 1) = TTit(1, 3): TRes(L, 2) = Arg3.Id: If Arg3.Id > 25 Then TRes(L, 3) = 1
            L = L + 1: TRes(L, 1) = TTit(1, 4): TRes(L, 2) = Arg4.Id: If Arg4.Id = 2150 Then TRes(L, 3) = 1
'            TRes(L, 3) = TTit(1, 5)
            TRes(L + 1, 1) = TTit(1, 5)
            For Each Arg1 In Arg4.Co
               For Each Detail In Arg1.Co
'                  C = Dico(Detail(6)): TRes(L, C) = TRes(L, C) + Detail(5)
                  C = L + Dico(Detail(6)): TRes(C, 2) = TRes(C, 2) + Detail(5)
'                 Next Detail, Arg1, Arg4, Arg3
                  Next Detail, Arg1
            For C = LBound(TCoul) To UBound(TCoul)
               L = L + 1: TRes(L, 3) = TCoul(C)
               Next C, Arg4, Arg3
           
           
            For Each Arg7 In Arg4.Co
               For Each Detail In Arg1.Co
'                  C = Dico(Detail(6)): TRes(L, C) = TRes(L, C) + Detail(5)
                  C = L + Dico(Detail(7)): TRes(C, 2) = TRes(C, 2)
'                 Next Detail, Arg1, Arg4, Arg3
                  Next Detail, Arg1
            For C = LBound(TCoul) To UBound(TCoul)
               L = L + 1: TRes(L, 3) = TCoul(C)
               Next C, Arg4, Arg3
           
           
      L = L + 5: Next Arg2
   RngCbl.Value = TRes
   On Error Resume Next: Set RngCbl = RngCbl.Columns(3).SpecialCells(xlCellTypeConstants, 1)
   If Err = 0 Then
      RngCbl.Offset(, -1).Font.Color = &HFF&
      RngCbl.ClearContents: End If

je ne saurais quoi vous dire d'autre,

le but restant simple ce n'est pas une question d'ordre de regroupement ni rien du tout,
seulement de ne pas mélanger les regroupement effectues ,
ce qui dicte les différence a ne pas mélanger sont les données de la colonne G,
j'ai donc fais comme je pouvais pour arriver a ce résultat,
outre votre proposition d’amélioration qui me semblerait logique si bien sur j'y arrivait,

je souhaitais simplement afficher ces valeurs dans le regroupement,
peut importe la ligne tant que ça reste dans la colonne J,
tout simplement car en évoluant vers le bas de la Feuille, et bien je dois remonter pour
aller lire les donnes de la colonne G a chaque fois .

Afficher a coter de chaque regroupement les valeurs de cette colonne G,
qui en quelques sorte trie en dernier ces regroupement me permettrais de faire
la différence.

Si ça se trouve, vous avez une conception tellement imprécise des chose qu'il suffirait pour obtenir ce que vous vouliez d'ajouter dans la boucle For Each Detail une instruction TRes(C, 4) = Detail(7).
Egalement essayer de plusieurs manières différentes..

Code:
            For Each Arg1 In Arg4.Co
               For Each Detail In Arg1.Co
'                  C = Dico(Detail(6)): TRes(L, C) = TRes(L, C) + Detail(5)
                  C = L + Dico(Detail(6)): TRes(C, 2) = TRes(C, 2) + Detail(5)
                  C = L + Dico(Detail(7)) = TRes(C, 4)
'                 Next Detail, Arg1, Arg4, Arg3
                  Next Detail, Arg1
            For C = LBound(TCoul) To UBound(TCoul)
               L = L + 1: TRes(L, 3) = TCoul(C)
               Next C, Arg4, Arg3

Vraiment désoler pour tout ça je manque cruellement de connaissances..
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne pouvez toujours pas reprendre de Detail(7) puisque les donnée spécifiées à DicInvent et reprises ensuite par Gigogne (du fait qu'on lui spécifie Null comme données à prendre pour qu'il n'ait pas à refaire le travail d'acquisition en tableau déjà effectué par DicInvent) ne comportent toujours que 6 colonnes (1ère ligne spécifiée : ActiveSheet.[A2:F2] au lieu de ActiveSheet.[A2:G2]).
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Voici un code qui produit un résultat :
VB:
Sub RegrouperSol2()
   Dim TTit(), Dico6 As Dictionary, TRes(), RngCbl As Range, TCoul(), L As Long, _
      Arg2 As SsGr, Arg3 As SsGr, Arg4 As SsGr, Arg7 As SsGr, Arg1 As SsGr, Detail, _
      J As Long, TS1() As String, TS2() As String, P As Long, Nom As String, C As Long
   TTit = ActiveSheet.[A1:G1].Value
   Set Dico6 = DicInvent(ActiveSheet.[A2:G2], 6, 1)
   ReDim TRes(1 To 100000, 1 To 3)
   Set RngCbl = ActiveSheet.[H1].Resize(UBound(TRes, 1), UBound(TRes, 2))
   TCoul = Dico6.Keys: L = 1
   RngCbl.Font.Color = 0
   For Each Arg2 In Gigogne(Null, -2, -3, -4, 7, 1)
      For Each Arg3 In Arg2.Co
         For Each Arg4 In Arg3.Co
            For Each Arg7 In Arg4.Co
               ReDim TJoin(1 To Arg7.Count): J = 0: ReDim TS1(-1 To -1)
               For Each Arg1 In Arg7.Co
                  TS2 = Split(Arg1.Id, "-")
                  For P = 0 To UBound(TS2) - 1: TS2(P) = TS2(P) & "-": Next P
                  For P = 0 To UBound(TS1): If P >= UBound(TS2) Then Exit For
                     If TS2(P) <> TS1(P) Then Exit For
                     Next P
                  Nom = "": While P <= UBound(TS2): Nom = Nom & TS2(P): P = P + 1: Wend
                  J = J + 1: TJoin(J) = Nom: TS1 = TS2: Next Arg1
               L = L + 1: TRes(L, 1) = TTit(1, 1): TRes(L, 2) = Join(TJoin, ".")
               L = L + 1: TRes(L, 1) = TTit(1, 2): TRes(L, 2) = Arg2.Id: If Arg2.Id > 200 Then TRes(L, 3) = 1
               L = L + 1: TRes(L, 1) = TTit(1, 3): TRes(L, 2) = Arg3.Id: If Arg3.Id > 25 Then TRes(L, 3) = 1
               L = L + 1: TRes(L, 1) = TTit(1, 4): TRes(L, 2) = Arg4.Id: If Arg4.Id = 2150 Then TRes(L, 3) = 1
               L = L + 1: TRes(L, 1) = TTit(1, 7): TRes(L, 2) = Arg7.Id
               TRes(L + 1, 1) = TTit(1, 5)
               For Each Arg1 In Arg7.Co
                  For Each Detail In Arg1.Co
                     C = L + Dico6(Detail(6)): TRes(C, 2) = TRes(C, 2) + Detail(5)
                     Next Detail, Arg1
               For C = LBound(TCoul) To UBound(TCoul)
                  L = L + 1: TRes(L, 3) = TCoul(C)
                  Next C, Arg7, Arg4, Arg3
      L = L + 1: Next Arg2
   RngCbl.Value = TRes
   On Error Resume Next: Set RngCbl = RngCbl.Columns(3).SpecialCells(xlCellTypeConstants, 1)
   If Err = 0 Then
      RngCbl.Offset(, -1).Font.Color = &HFF&
      RngCbl.ClearContents: End If
   End Sub
Le 品名 du paquet est reproduit dans une nouvelle ligne, juste après le 長さ
 

anri0610

XLDnaute Junior
Bonjour, 
merci beaucoup! j'etait en train de tester et étudier de quelle manière il aurait fallu s'y prendre,
un petit peu compliquer a comprendre surtout dans les finitions de votre codage mais merci encore,
c'est encore loin de mes compétences d'arriver a une réflexion de la sorte !

Cependant avec cet emplacement ça ne va pas car le plus important dans ces regroupement est de garder intacte la colonne I, sans lui ajouter de valeur ou encore de ligne supplémentaire ! ( je copie les données de haut en bas tel quelles par la suite)
il serait nécessaire de basculer ce résultat sur la colonne J, dans ce cas la le ''品名'' serait
inutile.

J'essaye de trouver par moi même comment déplacer ce résultat pour l'instant ! :)
je vous joint un print screen qui je pense sera plus clair !
le remplissage en jaune indiquant l'emplacement et la forme que je souhaiterais obtenir.

PS: Je suis parvenu pour l'instant a décaler sur la droite en modifier cela ! :

VB:
               L = L + 1: TRes(L, 1) = TTit(1, 7): TRes(L, 3) = Arg7.Id



UP!!
Je pense avoir trouve !!
est ce bien comme cela ?

VB:
               L = L + 0: TRes(L, 1) = TTit(1, 6): TRes(L, 3) = Arg7.Id
 

Pièces jointes

  • emplacement necessaire.png
    emplacement necessaire.png
    218.2 KB · Affichages: 13
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
En gros oui si ça vous arrange mieux pourquoi pas, mais à quoi ça sert d'ajouter 0 à L ? Inutile si vous souhaitez rester sur la même ligne !
J'aurais même plutôt mis dans cas seulement la dernière instruction à la place de celle qui y mettait 1 s'il fallait le Font.Color = &HFF& après puisque apparemment elle ne sert plus à rien.

Mais pourquoi vous copiez ça ? Pour le coller où ? Tout en une fois ? Ou bien au final il s'avère que tout ça ne sert à rien parce qu'en fait c'est dans le presse-papier qu'il aurait plutôt été intéressant d'envoyer tout ça et non dans des cellules ?
 
Dernière édition:

Discussions similaires

Réponses
36
Affichages
1 K