Concatener des cellules en fonction d'une référence

Bonjour à tous les génies d'Excel,

Etant un débutant dans VBA, j'ai une petite question qui vous semblera sûrement simple.

Voila, j'ai une liste de références qui ont des caractéristiques.

Je voudrais trouver quelles références ont les mêmes caractéristiques.

De ce fait, j'ai pensé à la fonction concatener, pour ainsi avoir une suite de caractéristiques qui seront filtrable dans un TCD.

Je joins une image de ce que ça représenterait.

Si vous arrivez à trouver une macro répondant à ce besoin sur une multitude de références ca serait un super gain de temps.

Je vous remercie d'avance,

Cordialement.

Salut Gauthier,

pas besoin de jeter des fleurs mais un fichier plutôt qu'une image... (sur cet ordi, je n'ai pas accès )

A+

Bonsoir,

Je ne comprends pas bien... :

Je voudrais trouver quelles références ont les mêmes caractéristiques.

Ce que je comprenais comme regrouper les références dont la caractéristique est identique !

Or tu concatènes les caractéristiques d'une même référence, ce qui me paraît l'inverse !

Faire l'un ou l'autre avec une macro ne pose aucun problème... Ce qu'il est bon de savoir, c'est sous quelle forme tu souhaites le résultat (simple concaténation, séparation des éléments, et mise dans une même cellule ou des cellules distinctes...) et à quel endroit (même feuille, nouvelle feuille, feuille prédéfinie et/ou préparée...).

Et confirme s'il s'agit de récupérer les caractéristiques d'une même référence ! ou des références ayant même caractéristique !

Cordialement.

Salut Curulis,

Il a parlé d'image, mais c'est bien un fichier qui est joint...

Bonjour MFerrand,

fichier ou pas, malheureusement, je n'ai pas accès!

Je te laisse donc aider notre hôte avec plaisir.

Belle journée au soleil!

Bien à toi

Je te laisse donc aider notre hôte avec plaisir.

Sais-tu que j'ai failli ajouter qu'étant en "vacances" ma disponibilité était relative, mais que Curulis se ferait un plaisir... !

Bonjour tardif...

pas certain non plus d'avoir compris mais je te propose ceci sur base de ton exemple

P.

Option Explicit
Sub regroupe()
Dim d
Dim c As Range
Set d = CreateObject("Scripting.Dictionary")
For Each c In Range("a1", [a65000].End(xlUp))
   If Not d.Exists(c.Value) Then
      d(c.Value) = c.Offset(0, 1)
   Else
      d(c.Value) = d(c.Value) & c.Offset(0, 1)
   End If
Next c
[I1].Resize(d.Count) = Application.Transpose(d.keys)
[J1].Resize(d.Count) = Application.Transpose(d.items)
End Sub

Bonjour et merci pour votre réactivité!

Je vais tester ça dans la matinée et je vous redis.

Et oui dans le meilleur des cas, j'aurais souhaité regrouper les références dont les caractéristiques sont les mêmes.

Mais du coup, j'avais trouvé la solution jointe pour ainsi filtrer sur les caractéristiques dans un TCD pour retrouver les références avec les mêmes caractéristiques.

Les 2 solutions me conviennent, je testerai celle proposée.

Passez une bonne journée

De retour après avoir testé tout ça, la macro convient tout a fait a mon besoin merci encore !

Rebonjour à tous,

J'avais testé la macro et elle marchait très bien sur des données "simples".

En revanche, lorsque j'ai tenté d'intégrer des données plus fournies, elle m'indique un message d'erreur de compatibilité de type 13 que j'ai mis en pièce jointe.

Mon but est de créer un code concatenant différentes caractéristiques ainsi je peux voir dans un TCD quelles références ont les mêmes caractéristiques. (Page concatenate)

Le fichier excel que je vous fournis est sur une référence mais lorsque j'intègre une masse de références je retrouve ce problème sur différentes références. Si j'enlève la référence et que je laisse les caractéristiques, la caractéristique concatenée s'affiche normalement sans la référence (bien sûr). C'est là que je ne comprends pas, si c'était un problème de type il ne devrait pas du tout s'afficher non ?

(Dans le cas présent, la ligne 7 pose problème)

https://www.cjoint.com/c/GIAiVXOLmHH (Fichier Excel)

Merci pour votre future réponse

messageerreur

Bonjour,

Je me permets de faire revenir ce topic d'entre les limbes au cas où quelqu'un passerait par là

Bonne journée

Bonjour,

plutôt que de passer par cjoint où le fichier disparaît un peu après, dépose le ici par l'option "choisissez un fichier" sous ce rectangle de rédaction.

Tu ne dis pas combien de lignes a ton fichier réel ...

La concaténation des data dans une cellule remplira celle-ci jusqu'à une certaine limite(celle d'excel) ; cette cellule sera particulièrement illisaible !

P.

Bonjour,

Je vous remets le fichier en pièce jointe.

Le fichier réel a potentiellement un peu plus de 400 lignes, le message d'erreur est le même pour certaines références qui suivent.

Pour la lisibilité ce n'est pas grave, avec un TCD il est facile de trier ensuite je renomme mes caractéristiques.

Merci de m'avoir répondu,

17vba-pb.xlsm (47.71 Ko)

Bonjour,

Il semble que Patrick t'ait perdu de vue... !

Puisque tu semblais satisfait, je n'avais pas poursuivi... je reprends donc, mais où j'en étais, en regroupant les références par caractéristique...

Sub RegroupRef()
    Dim Caract(), d As Object, k, n%, i%, j%, w%
    Set d = CreateObject("Scripting.Dictionary")
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            k = .Cells(i, 2)
            d(k) = d(k) & ";" & .Cells(i, 1)
        Next i
    End With
    n = d.Count: ReDim Caract(n, 0)
    For Each k In d.keys
        j = j + 1: Caract(j, 0) = k
    Next k
    For i = 1 To n - 1
        For j = i + 1 To n
            If Caract(j, 0) < Caract(i, 0) Then
                Caract(0, 0) = Caract(j, 0)
                Caract(j, 0) = Caract(i, 0)
                Caract(i, 0) = Caract(0, 0)
            End If
        Next j
    Next i
    Caract(0, 0) = "Caractéristique"
    For i = 1 To n
        k = Split(d(Caract(i, 0)), ";")
        If w < UBound(k) Then w = UBound(k): ReDim Preserve Caract(n, w)
        For j = 1 To UBound(k)
            Caract(i, j) = k(j)
        Next j
    Next i
    Caract(0, 1) = "Ref"
    With Worksheets("Feuil2")
        .UsedRange.Clear
        With .Range("A1").Resize(n + 1, w + 1)
            .Value = Caract
            .WrapText = True
            .Rows(1).HorizontalAlignment = xlCenter
            .Columns(1).ColumnWidth = 15
            .Cells(1, 2).Resize(, w).Merge
        End With
        .Activate
    End With
End Sub

Cordialement.

Bonjour,

Je m'excuse d'avance pour le temps que je vous fais perdre, je me rends compte que j'explique mal mon problème.

Je vais tenter de mieux expliquer, mon but est de créer des plans de contrôle commun à plusieurs références:

Dans la première feuille du fichier joint, je vous montre comment des utilisateurs remplissent les critères de contrôle d'une référence. Un critère de contrôle intègre une caractéristique et une fréquence de contrôle.

L'intérêt pour moi est donc de mettre en place des plans de contrôle qui vont regrouper les références ayant les mêmes critères. Cela veut dire que les références ayant exactement les mêmes caractéristiques et fréquences seront regroupées.

La première solution proposée me permettait d'avoir une suite de caractéristiques et de fréquences. Avec cela si des suites étaient similaires, les références pourraient avoir le même plan. Je triais les références par un TCD. (Exemple dans la 2eme feuille)

Cela marchait sur des caractéristiques simples mais après avoir intégrées des données plus compliquées j'ai eu un message d'erreur d'incompatibilité de type 13 . J'ai vérifié, mes cellules sont similaires en termes de format.

Malheureusement, dans la dernière solution que tu me proposes, j'ai les références en fonction d'une caractéristique, cela ne répond pas vraiment à ce que je cherche.

23vbapb.xlsm (33.94 Ko)

Autrement dit, tu veux l'inverse !

Si tu l'avais exprimé sous la forme : Regouper des caractérisques par référence, ou Regrouper des références par caractéristique, il n'y aurait pas eu d'ambiguïté au départ.

La méthode demeurant la même, passer d'un regroupement à l'autre ne pose pas en tant que tel de gros problèmes... Cependant, je constate que tu n'as pas fourni la situation exacte dans laquelle opérer ! Car tes caractéristiques sont en fait une concaténation caractéristique-fréquence. Ce qu'il faut donc ajuster. Pas de problème pour ce faire, mais il me semblerait opportun de ne pas se contenter de mettre bout à bout les deux éléments de cette caractéristique concaténée ! Un saut de ligne ou un autre caractère séparateur serait bienvenu !

De même, pour le regroupement dans une même cellule de toutes les caractéristiques liées à une référence ! Il est tout de même plus clair de les sortir dans des cellules distinctes sur la même ligne. Ce que j'ai d'ailleurs fait dans la version inversée (après avoir testé les différent cas de figure !)

Pour ton erreur 13, je ne m'y suis pas vraiment penché, mais je ne vois pas trop ce qui peut la provoquer dans la procédure que tu as appliqué, surtout à la ligne indiquée !?

Cordialement.

Bonjour,

Je tiens à vous remercier pour l'aide que vous m'avez apporté. A partir de ce que vous m'avez donné j'ai pu faire ce que je voulais, en inversant.

La mise en forme je pense pouvoir le faire donc j'arrête enfin de vous déranger !

Cordialement

Rechercher des sujets similaires à "concatener fonction reference"