Microsoft 365 VBA débutante problème boucle

mhp

XLDnaute Nouveau
Hello,

Je débute sur VBA et j'ai une question concernant le fichier exemple ci-joint. Lorsque je clique une première fois sur le bouton, tout fonctionne comme je le souhaite. Cependant, quand je clique une nouvelle fois, les valeurs (Couleurs) se répètent, ce que je ne veux pas. Comment empêcher cela ?

Par la suite, j'aimerai ajouter aux colonnes A et B de nouveaux noms et couleurs. Il faudrait donc que quand je clique une nouvelle fois sur le bouton, les données rajoutées s'inscrivent à la suite sans dupliquer les valeurs déjà traitées. (Colonne F)

J'espère avoir été assez claire 😅

Merci d'avance :)
 

Pièces jointes

  • Test.xls
    43.5 KB · Affichages: 14
Solution
Bonjour @mhp, le forum

Une piste ....

VB:
Sub concatenerdoublons()
Dim i As Long
Dim chaine As Variant
Range("E:F").ClearContents
For i = 1 To Range("A1").End(xlDown).Row
    If WorksheetFunction.CountIf(Range("E:F"), "=" & Cells(i, 1).Value) = 1 Then
    chaine = Range("E:E").Find(What:=Cells(i, 1).Value, After:=Range("E1"), LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 1) & " / " & Cells(i, 2)
    Range("E:E").Find(What:=Cells(i, 1).Value, After:=Range("E1"), LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 1) =...

Phil69970

XLDnaute Barbatruc
Bonjour @mhp, le forum

Une piste ....

VB:
Sub concatenerdoublons()
Dim i As Long
Dim chaine As Variant
Range("E:F").ClearContents
For i = 1 To Range("A1").End(xlDown).Row
    If WorksheetFunction.CountIf(Range("E:F"), "=" & Cells(i, 1).Value) = 1 Then
    chaine = Range("E:E").Find(What:=Cells(i, 1).Value, After:=Range("E1"), LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 1) & " / " & Cells(i, 2)
    Range("E:E").Find(What:=Cells(i, 1).Value, After:=Range("E1"), LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 1) = chaine
    Else
    If IsEmpty(Range("E1")) Then
        Range("e65536").End(xlUp) = Cells(i, 1)
        Range("f65536").End(xlUp) = Cells(i, 2)
    Else
        Range("e65536").End(xlUp).Offset(1, 0).Value = Cells(i, 1)
        Range("f65536").End(xlUp).Offset(1, 0).Value = Cells(i, 2)
    End If
    End If
Next i
End Sub

En fait tu effaces la liste et tu la reconstruis ;) comme ça ta liste est toujours juste et à jpur.

*Merci de ton retour

@Phil69970
 

Discussions similaires

Réponses
8
Affichages
382
Réponses
7
Affichages
347
Réponses
21
Affichages
807

Statistiques des forums

Discussions
315 096
Messages
2 116 173
Membres
112 677
dernier inscrit
Justine11