Déplacement d'une partie de texte sous condition

Bonjour à toutes et tous,

Les jours avancent et les problèmes excel ne se ressemblent pas!

Aujourd'hui, voici mon problème : j'ai dans chaque cellule d'un fichier une valeur ( à 2 ou 3 chiffres uniquement) entourée par du texte (par exemple"<attribut_id_107>120</attribut_id_107>"), et ce que je souhaiterais c'est que si deux cellules consécutives ont le même attribut, alors les deux valeurs présentes dans chacune des cellules se retrouvent dans la première où l'attribut est présent, séparées par une virgule et que la cellule suivante soit supprimée.

Dans mon cas présent je sais que seuls les attributs 107 peuvent se trouver dans cette configuration.

Dans l'idée j'ai décidé d'utiliser les fonctions Mid, Len Right et Left, et j'étais plutôt fier de moi jusqu'à ce que je me rende compte que... la façon dont je l'ai écrit ne donne rien...

Voici donc le code et un extrait de fichier avec un exemple plus parlant :

For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    For j = 1 To 10
        If Cells(i, j).Value Like "*107*" And Cells(i, j + 1).Value Like "*107*" Then
            If Len(Cells(i, j)) = 36 Then
                If Len(Cells(i, j + 1)) = 36 Then
                    Cells(i, j).Value = Left(Cells(i, j), 19) & "," & Mid(Cells(i, j + 1), 18, 2) & Right(Cells(i, j), 17) And Cells(i, j + 1).ClearContents 'ou delete c'est égal'
                Else: Cells(i, j).Value = Left(Cells(i, j), 19) & "," & Mid(Cells(i, j + 1), 18, 3) & Right(Cells(i, j), 17) And Cells(i, j + 1).ClearContents
                End If
            End If
            If Len(Cells(i, j)) = 37 Then
                If Len(Cells(i, j + 1)) = 36 Then
                    Cells(i, j).Value = Left(Cells(i, j), 20) & "," & Mid(Cells(i, j + 1), 18, 2) & Right(Cells(i, j), 17) And Cells(i, j + 1).ClearContents
                Else: Cells(i, j).Value = Left(Cells(i, j), 20) & "," & Mid(Cells(i, j + 1), 18, 3) & Right(Cells(i, j), 17) And Cells(i, j + 1).ClearContents
                End If
            End If
        Else: Cells(i, j).Value = Cells(i, j).Value
        End If
    Next j
Next i

Bon si quelqu'un peut me pointer du doigt ma grosse erreur, ce serait vraiment sympa!

Merci à tous et toutes pour votre temps!

5test-attribut.xlsm (24.20 Ko)

Salut Scarwild,

voici ton code.

Attention, pour faire simple, j'ai utilisé 'CurrentRegion' en [A1] pour alimenter tData. Je ne sais pas si cela conviendra à ta situation réelle!

A adapter, peut-être...

La macro démarre sur un simple double-clic.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tData
'
tData = Range("A1").CurrentRegion.Value
'
For x = 1 To UBound(tData, 1)
    For y = 1 To UBound(tData, 2) - 1
        If tData(x, y) <> "" And tData(x, y + 1) <> "" Then _
            If Split(Split(tData(x, y), ">")(0), "_")(2) = Split(Split(tData(x, y + 1), ">")(0), "_")(2) Then _
                tData(x, y) = Split(tData(x, y), "</")(0) & "," & Split(tData(x, y + 1), ">")(1): _
                tData(x, y + 1) = ""
    Next
Next
Range("A1").Resize(UBound(tData, 1), UBound(tData, 2)).Value = tData
'
End Sub

A+

4test-attribut.xlsm (22.86 Ko)

Wahou...

Alors là je suis vraiment impréssionné... Je reste sans voix...

Y a pas à dire, quand on ne sait, pas, on ne sait pas.

Merci infiniment curilis57 : c'est un million de fois plus beau que mes bricolages, et en plus cela fonctionne au-delà de mes espérances!

Maintenant, un peu de travail pour comprendre ce qu'il s'est passé et pouvoir l'appliquer plus tard si besoin.

Encore merci et à une prochaine fois sans doute!

Rechercher des sujets similaires à "deplacement partie texte condition"