Bonjour,
J'ai retrouvé une macro que j'avais sous la main et dont l'objectif était assez proche: il s'agissait de séparer des réponses initialement présentes dans une seule colonne et séparées par une virgule.
La macro crée autant de colonnes que de réponses différentes, et place toutes les réponses identiques dans une même colonne.
Tu peux donc l'utiliser telle quelle si tu concatènes d'abord tes réponses dans une unique colonne avec un séparateur ",", ou elle peut servir de base pour adapter quelque chose à ton cas.
Le code :
Sub SéparerRéponses()
On Error Resume Next
Dim LigMax As Integer, Lig As Integer, ColD As Integer, ColF As Integer, Col As Integer, ColRep As Range, Separer() As String, i As Byte
'Sélection de la plage à transformer
Set ColRep = Application.InputBox("Selectionner la plage de réponses à traiter (1 colonne à la fois)", Type:=8)
'Désactive l'affichage le temps d'exécuter la macro
Application.ScreenUpdating = False
'Insertion d'une colonne à droite
Columns(ColRep.Column + 1).Insert Shift:=xlToRight
'Indices de la premiere et de la dernière colonne contenant les réponses traitées
ColD = ColRep.Column + 1
ColF = ColD
'Parcourir les cellules
For Each Cell In ColRep
'Sépare les réponses en fonction de la virgule
Separer = Split(Cell, ", ")
For i = LBound(Separer) To UBound(Separer)
For Col = ColD To ColF
'Ajout de la première modalité de réponse
If IsEmpty(Cells(1, Col)) Then Cells(1, Col) = Separer(i)
'Recherche de correspondance avec une modalité existante
If Separer(i) = Cells(1, Col) Then
Cells(Cell.Row, Col) = Separer(i)
Exit For
End If
'Ajout d'une colonne si nouvelle modalité
If Col = ColF Then
ColF = ColF + 1
Columns(Col + 1).Insert Shift:=xlToRight
Cells(1, Col + 1) = Separer(i)
Cells(Cell.Row, Col + 1) = Separer(i)
End If
Next Col
Next i
Next
End Sub