Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 regrouper sur une ligne en fonction de critère

cjay974

XLDnaute Nouveau
Bonjour à tous

J'ai besoin de rassembler plusieurs lignes en une seule mais en regroupant dans un champs les informations d'une colonne séparées par un |
Des images valent mieux que des mots

pour l'instant j'ai ce genre de tableau (extrait de mon fichier) on voit bien les lots en différentes couleurs

le résultat attendu :


Vous remerciant par avance de vos retours

Bonne soirée
 
Solution
Bonjour Cjay, bonjour le forum,

Une proposition avec le code ci-dessous :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
'Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim VS As String 'déclare la variable VS (ValeurS)
Dim DEST...

cjay974

XLDnaute Nouveau
Bonsoir Cjay, bonsoir le forum,



Je dirais plutôt : un fichier vaut mieux que des images...
Bonjour Robert

merci de t'intéresser à ma demande
Ci-joint le fichier
(bien évidemment il n'y a pas de couleurs dans mon tableau, c'est juste pour le visuel dans la discussion)

@+
 

Pièces jointes

  • REQ_Z10-03_PrepaModules_BaseMaint.xlsx
    10.9 KB · Affichages: 10

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Cjay, bonjour le forum,

Une proposition avec le code ci-dessous :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
'Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim VS As String 'déclare la variable VS (ValeurS)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Worksheets("mon tableau") 'définit l'onglet OS
Set OD = Worksheets("resultat attendu") 'définit l'onglet OD
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface les ancienne données de l'onglet OD
TV = OS.Range("A1").CurrentRegion 'définit la tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la première colonne du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP les valeurs du dictionnaire D sans doublon (les Clés)
For J = 0 To UBound(TMP, 1) 'boucle 1 : sur toutes les valeurs du tableau temporaire TMP
    VS = "" 'réinitialise les valeurs VS
    K = K + 1 'incrémente K
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TMP(J) = OS.Cells(I, "A").Value Then 'condition : si les deux valeurs sont égales
            VS = IIf(VS = "", OS.Cells(I, "D").Value, VS & "|" & OS.Cells(I, "D").Value) 'définit la variable VS
            ReDim Preserve TL(1 To 4, 1 To K) 'redimensionne le tableau des lignes TL
            TL(1, K) = TV(I, 1) 'récupère dans la ligne 1 colonne K de TL la donnée en ligne I colonne 1 de TV (=> Transposition)
            TL(2, K) = TV(I, 2) 'récupère dans la ligne 2 colonne K de TL la donnée en ligne I colonne 2 de TV (=> Transposition)
            TL(3, K) = TV(I, 3) 'récupère dans la ligne 3 colonne K de TL la donnée en ligne I colonne 3 de TV (=> Transposition)
            TL(4, K) = VS 'récupère dans la ligne 4 colonne K de TL la variable VS
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
Next J 'prochaine valeur de la boucle 1
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
DEST.Resize(K, 4).Value = Application.Transpose(TL) 'renvoie dans DEST redimensionnée le tableau TL transposé
End Sub

Attention ton résultat attendu est erronée car tu as 21CE1902 en A15 puis dans la plage A17:A26 !
 

Pièces jointes

  • Cjay_ED_v01.xlsm
    25.9 KB · Affichages: 6

cjay974

XLDnaute Nouveau
Salut Robert

Merci c'est nickel...effectivement j'avais pas trié du coup cela fonctionne a la perfection car pas besoin de filtrer les données avant

je suis nouveau sur ce forum et je crois que je vais y passer du temps

Merci pour l'accueil et les réponses

Bonne journée a tous
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…