Affecter plusieurs valeur si doublons

Bonsoir,

Je suis actuellement en stage dans une entreprise qui me demande de refaire une base de donnée.

Mon problème est le suivant sur mon excel chaque ligne correspond à un outillage et les informations de celui-ci sont sur les différentes colonnes.

Dans la colonne A il y a la référence de l'outillage et dans la colonne C il y a des informations spécifique.

Etant débutant en VBA, je sais pas si ce que je vais vous demandez est possible.

J'aimerai que pour chaque outillage(ligne), s'affecte dans leurs colonne D que je nommerai 'Autre références' les références de la colonne A si il y a les même informations spécifique dans leurs colonne C.

Je n'ai pas accés à excel sur ce PC je vous fait un petit exemple :

A B C D

155 aléso 10 cm

120 aléso 10 cm

130 aléso 5 cm

141 aléso 1 cm

162 aléso 5 cm

159 aléso 10 cm

Et j'aimerai que la colonne D se remplisse de cette manière :

A B C D

155 aléso 10 cm 155/120/159

120 aléso 10 cm 155/120/159

130 aléso 5 cm 130/162

141 aléso 1 cm 141

162 aléso 5 cm 130/162

159 aléso 10 cm 155/120/159

je voudrais en faite que l'outillage cherche automatiquement les références des outillages qui pourrait être équivalent par rapport aux informations de la colonne C et les afficher sur la colonne D.

L'ordre des références en colonne D n'a pas d'importance.

Je vous remercie d'avance pour l'aide que vous pourriez m'apporter !

Cordialement

Snakiss

J'ai remarqué que les espaces pour simuler mon tableau ne s'afficher pas, je précises donc que les 155,120,,etc sont dans la colonne A ,aléso, etc dans la C et les autres références que je veux afficher en D

Snakiss a écrit :

J'ai remarqué que les espaces pour simuler mon tableau ne s'afficher pas, je précises donc que les 155,120,,etc sont dans la colonne A ,aléso, etc dans la C et les autres références que je veux afficher en D

il eut mieux valu pour toi comme pour nous avoir le tableau dans un fichier excel joint ...

Bonjour,

Salut Michel ...

Michel a raison ... devoir reconstruire le fichier Excel n'est pas une tâche très engageante ....

Sans compter qu'il faut plus clairement expliquer le mécanisme de sélection pour la Colonne D ...

Peux-tu, dans un premier temps, valider la logique de ton fichier test joint ...???

Bonjour,

voilà un exemple des première colonne de ma base de donnée.

J'ai fait le tableau que j'ai actuellement et celui que j'aimerais en dessous.

Ma base de donnée comprend une dizaine de colonne et plus de 300 lignes.

Merci d'avance !

13test-snakiss.xlsx (8.25 Ko)

Salut James,

je me doutais bien qu'il fallait concaténer dans la même colonne aléso 10 cm

maintenant c'est clair ... yapuka !

au passage, dans autres références, tu répètes quand même la référence testée ?


Alésometre 10-20 mm n'est pas toujours écrit de la même façon !!! il y a des blancs qui se baladent.

Du coup je n'en ai que 2 et pas 3.

J'ai corrigé !

Bonjour,

Oui dans ma colonne D je mets toute les références des outillage qui sont équivalent (doublons colonne C) y compris la référence de la ligne tester.

En formules matricielles ...

=SIERREUR(INDEX($A$1:$A$9;PETITE.VALEUR(SI($C$1:$C$9=$C2;LIGNE($C$1:$C$9));F$1));"")

il faut ensuite concaténer

Je me suis limité aux 5 premières occurences

Bonsoir,

je n'ai pas accés à excel où je suis, je testerai ça demain.

Mais que veux dire concaténer ?

Merci pour ton aide !

En plus condensé

ou enfin ...

Bonsoir à tous,

Une solution VBA

Restitution à côté du tableau original dans la feuille "Test"

Option Explicit

Sub Références()
Dim a, i As Long, j As Long, n As Long
    Application.ScreenUpdating = False
    With Sheets("Test").Range("a1").CurrentRegion
        a = .Value: a(1, 1) = "Références"
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 1 To UBound(a, 1)
                If Not .exists(a(i, 3)) Then
                    n = n + 1
                    For j = 1 To UBound(a, 2) 
                        a(n, j) = a(i, j)
                    Next
                    .Item(a(i, 3)) = n
                Else
                    a(.Item(a(i, 3)), 1) = a(.Item(a(i, 3)), 1) & _
                                           "/" & a(i, 1)
                End If
            Next
        End With
        With .Offset(, .Columns.Count + 1)
            .CurrentRegion.Clear
            .Resize(n, 3).Value = a
            With .CurrentRegion
                .Font.Name = "calibri"
                .Font.Size = 10
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Borders(xlInsideVertical).Weight = xlThin
                .BorderAround Weight:=xlThin
                With .Rows(1)
                    .Font.Size = 11
                    .Interior.ColorIndex = 42
                    .BorderAround Weight:=xlThin
                End With
                .Columns.AutoFit
            End With
        End With
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Bonjour Steelson,

j'ai tester ta formule sur ma base de donnée en modifiant en fonction de mes colonnes et lignes mais j'ai pas l'impression que ça marche.

Je met l'extrait de ma base de donnée, on peut voir que pour les bagues d'étalonnage en C ils y en a qui sont identiques pourtant il n'y a que leurs références.

Je ne te suis plus ... où sont les formules dans ton fichier ?

Attention si tu les recopies, il faut les valider par Ctrl+Maj+Entrée (formules matricielles)

La formule est à mettre dans la premiere cellule de autres références et a étirer jusqu'en bas non ?

Bonjour Klin89,

pourrais-tu me dire les modifications à faire pour le nouveau tableau ? Et je sais pas trop où recopier ce code, dans workbook ou dans un nouveau module ?

Merci d'avance


J'ai tester votre méthode Steelson, et j'ai confirmé avec ctrl+maj+entrée, ça a l'air bon mais toutes les références sont décalé vers le haut de deux cases, j'ai l'impression.

Snakiss a écrit :

La formule est à mettre dans la premiere cellule de autres références et a étirer jusqu'en bas non ?

en E1 sur feuille scrap

=SIERREUR(INDEX($B$1:$B$250;PETITE.VALEUR(SI($D$1:$D$250=$D1;LIGNE($D$1:$D$250));1));"")&" "&SIERREUR(INDEX($B$1:$B$250;PETITE.VALEUR(SI($D$1:$D$250=$D1;LIGNE($D$1:$D$250));2));"")&" "&SIERREUR(INDEX($B$1:$B$250;PETITE.VALEUR(SI($D$1:$D$250=$D1;LIGNE($D$1:$D$250));3));"")&" "&SIERREUR(INDEX($B$1:$B$250;PETITE.VALEUR(SI($D$1:$D$250=$D1;LIGNE($D$1:$D$250));4));"")&" "&SIERREUR(INDEX($B$1:$B$250;PETITE.VALEUR(SI($D$1:$D$250=$D1;LIGNE($D$1:$D$250));5));"")

à valider par Ctrl+Maj+Entrée


Snakiss a écrit :

J'ai tester votre méthode Steelson, et j'ai confirmé avec ctrl+maj+entrée, ça a l'air bon mais toutes les références sont décalé vers le haut de deux cases, j'ai l'impression.

en E2 sur feuille outillages

=SIERREUR(INDEX($B$1:$B$500;PETITE.VALEUR(SI($D$1:$D$500=$D2;LIGNE($D$1:$D$500));1));"")&" "&SIERREUR(INDEX($B$1:$B$500;PETITE.VALEUR(SI($D$1:$D$500=$D2;LIGNE($D$1:$D$500));2));"")&" "&SIERREUR(INDEX($B$1:$B$500;PETITE.VALEUR(SI($D$1:$D$500=$D2;LIGNE($D$1:$D$500));3));"")&" "&SIERREUR(INDEX($B$1:$B$500;PETITE.VALEUR(SI($D$1:$D$500=$D2;LIGNE($D$1:$D$500));4));"")&" "&SIERREUR(INDEX($B$1:$B$500;PETITE.VALEUR(SI($D$1:$D$500=$D2;LIGNE($D$1:$D$500));5));"")

Merci beaucoup sa marche niquel !

Je voulais aussi poursuivre l'idée de Klin89 mais sous forme de fonction ...

Au final, c'est mieux avec une fonction

Option Explicit

Function equivalences(description As Range, plage As Range, reference As Range) As String
    equivalences = ""
    Dim cel As Range
    For Each cel In plage
        If cel.Value = description.Value Then
            If equivalences <> "" Then equivalences = equivalences & " / "
            equivalences = equivalences & reference.Item(cel.Row)
        End If
    Next
End Function

J'ai pas réussis à faire marcher la fonction sur ma grosse base de donnée y'a un #NOM sur ma cellule.

Mais la première méthode marche, merci quand même pour l'alternative !

Rechercher des sujets similaires à "affecter valeur doublons"