Envoyé par
jouana
Faire du VBA quand ce n'est pas nécessaire c'est un peu dommage après c'est au choix de chacun
Entièrement d'accord !
Mais ta formule ne donnant rien sur ma version et comme Daniel C n'a pas non plus proposé de formule,
au moins mon code répondait exactement à la problématique exposée, du moins le croyais-je …
En effet, je n'ai pas vu qu'il fallait conserver la colonne d'origine d'un nom unique.
Voici donc ma version en tenant compte :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Sub ArrangeListe()
Dim Liste As New Dictionary, Cel As Range
R& = Cells(Rows.Count, 1).End(xlUp).Row
B& = Cells(Rows.Count, 2).End(xlUp).Row
C = "A1:B" & IIf(B > R, B, R)
For Each Cel In Range(C)
If Cel.Value > "" Then _
Liste.Item(Cel.Value) = IIf(Liste.Item(Cel.Value) > "", 2, "1:" & Cel.Column)
Next
Application.ScreenUpdating = False
Range(C).ClearContents
For R = 1 To Liste.Count
C = Split(Liste.Items(R - 1), ":")
If UBound(C) Then
Cells(R, Val(C(1))) = Liste.Keys(R - 1)
Else
Cells(R, 1) = Liste.Keys(R - 1)
Cells(R, 2) = Liste.Keys(R - 1)
End If
Next
Liste.RemoveAll
Application.ScreenUpdating = True
End Sub |
Rappel : ce code ne fonctionne uniquement si
Microsoft Scripting Runtime est bien coché dans les
Références du menu
Outils,
depuis la feuille active, source & résultat à partir de la cellule A1.
Nb : le résultat doit être identique si la procédure est lancée une deuxième fois avec la liste corrigée …
_______________________________________________________________________________
Merci de cliquer sur
pour chaque message ayant aidé puis sur
pour clore cette discussion …
__________________________________________________________________
Les bourses ne témoignent pas l'état des économies, mais de la psychologie des investisseurs ! (Françoise Giroud)
Partager