Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transformer une cellule multi ligne en plusieurs lignes de tableau

2 réponses
Avatar
Colasmar
Bonjour,
J'ai besoin de faire une macro un peu compliquée qui réaliserait le travail
suivant :

Dans une base de données Excel, pour un enregistrement donnée, l'une des
cellules peut contenir plusieurs lignes d'information (en fait, il y a une
liste de personne dans la cellule).
Je voudrais donc que la macro
1) identifie combien il y a de personnes saisies dans la cellule
(actuellement elles sont saisie avec un retour chariot (chr(13)) après chaque
nom)
2) Qu'elle recopie l'enregistrement autant de fois qu'il y a de personnes
3) Et naturellement, que pour chaque enregistrement il ne reste qu'une
personne différente dans la cellule

Comme vous pouvez vous en douter, il s'agit d'une base qui permettra ensuite
par fusion avec Word de convoquer chaque personne à la réunion. Evidement
certain pourrait penser qu'il vaudrait mieux tout de suite créer un
enregistrement par personne mais cela ferait alors une base beaucoup trop
lourde et pour ceux qui préfererait me conseiller Access et bien nous n'y
avons pas droit dans la sociéte.

Voilà, je ne suis pas un as en Visual Basic et donc j'ai beau chercher je ne
m'y retrouve pas. Peut être est-ce trop compliqué, mais si quelqu'un a été
confronté à ce problème et qu'il a la soilution et bien cela me ferait bien
gagner du temps.
Merci à tous.

2 réponses

Avatar
anonymousA
Bonjour,

Dans ce qui suit, on supose que tes valeurs sont en colonne A et on
démarre à la ligne 1. On suppose de plus que la séquence des valeurs
ne possède pas de cellules vides car le critère de boucle se fait sur
la non vacuité des cellules

J = 1
Do While Not IsEmpty(Cells(J, 1))
A = Cells(J, 1).Row
If UBound(Split(Cells(J, 1).Value, Chr(13))) > 0 Then
Range(Cells(A + 1, 2), Cells(A + UBound(Split(Cells(J,
1).Value, Chr(13))), 2)).EntireRow.Insert Shift:=xlDown
For I = LBound(Split(Cells(J, 1).Value, Chr(13))) + 1 To
UBound(Split(Cells(J, 1).Value, Chr(13)))
Cells(A + I, 1) = Split(Cells(J, 1).Value, Chr(13))(I)
Next
B = J + UBound(Split(Cells(J, 1).Value, Chr(13))) + 1
Cells(A, 1) = Split(Cells(J, 1).Value, Chr(13))(0)
J = B
Else
J = J + 1
End If
Loop

A+
Avatar
Colasmar
Eh ben j'aurais pas trouvé tout seul....
Merci beaucoup pour l'aide.



Bonjour,

Dans ce qui suit, on supose que tes valeurs sont en colonne A et on
démarre à la ligne 1. On suppose de plus que la séquence des valeurs
ne possède pas de cellules vides car le critère de boucle se fait sur
la non vacuité des cellules

J = 1
Do While Not IsEmpty(Cells(J, 1))
A = Cells(J, 1).Row
If UBound(Split(Cells(J, 1).Value, Chr(13))) > 0 Then
Range(Cells(A + 1, 2), Cells(A + UBound(Split(Cells(J,
1).Value, Chr(13))), 2)).EntireRow.Insert Shift:=xlDown
For I = LBound(Split(Cells(J, 1).Value, Chr(13))) + 1 To
UBound(Split(Cells(J, 1).Value, Chr(13)))
Cells(A + I, 1) = Split(Cells(J, 1).Value, Chr(13))(I)
Next
B = J + UBound(Split(Cells(J, 1).Value, Chr(13))) + 1
Cells(A, 1) = Split(Cells(J, 1).Value, Chr(13))(0)
J = B
Else
J = J + 1
End If
Loop

A+