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

Deconcatener cellule en fonction de retour a la ligne dans cellule à la verticale

13 réponses
Avatar
Alex
Bonjour =E0 tous,
Je rencontre des difficult=E9s pour effetuer une boucle pour une
d=E9concatenation =E0 la "verticale" en fonction du nombre de retour =E0 la
ligne (Char(10) ou (13)) dans une cellule, et m'en explique. Mon
tableau : 1 ligne =3D 1 personne en colonne B de ce tableau j'ai une
colonne "liste de diffusion mail" auquel la personne est rattach=E9.
Cette cellule peut contenir plusieurs noms de liste (Chaque nouvelle
liste est ajout=E9 par un alt entr=E9e (retour =E0 la ligne) lors de la
saisie). Je souhaiterais compter le nombre de retour =E0 la ligne que
contient cette cellule (variable selon la cellule) pour inserer en
dessous de la ligne ou l'on a effectue le comptage, autant de ligne
qu'il y a de retour =E0 la ligne pour qu'il me duplique cette ligne et
me cr=E9er une ligne "identique" pour chaque nom de liste de diffusion.
Bien evidement, en colonne C, j'ai des informations compl=E9mentaires
li=E9s =E0 cette "liste de diffusion" dont les informations sont =E9glament=
s
saisies avec le meme principe de retour =E0 la ligne. Voici un exemple:

R=E9pr=E9sentation de la feuille (1 et 2 repr=E9sente les N=B0 lignes , et =
ABC
sont les colonnes) :

A
B C
1 NOM PRENOM LISTE DE DIFFUSION RESPONSABLE LISTE
=20
VTEC Yann
2 Alex VFON
Laurent
=20
VREC Isabelle

3 Une autre personne avec ces donn=E9es

Ce que je voudrais en r=E9sultat :

A
B C
1 NOM PRENOM LISTE DE DIFFUSION RESPONSABLE LISTE
2 Alex
VTEC Yann
3 Alex VFON
Laurent
4 Alex VREC
Isabelle
5 Une autre personne avec ces donn=E9es ....

Je vous remercie par avance de votre aide, et suis a votre disposition
si vous souhaitez d'autres renseignements.
Bien cordialement.
Alex

10 réponses

1 2
Avatar
MichD
Bonjour,

Si tu as 3 données dans la même cellule
séparée par un retour à la ligne, tu
peux utiliser ceci pour compter le nombre
de retour à la ligne :

Si tes données sont en cellule A1
=NBCAR(A1)-NBCAR(SUBSTITUE(A1;CAR(10);""))

Tu recopies cette formule pour chaque cellule
de la colonne.


MichD
---------------------------------------------------------------
Avatar
Alex
Bonjour,

Merci pour cette formule de comptage du nombre de retour à la ligne
qui fonctionne très bien, se que je comprends pas c'est que le
résultat s'affiche dans une cellule 1 ligne en dessous de la ou j'ai
entré la formule, pourquoi pas dans la cellule ou elle est inscrite ?
Merci par avance de votre réponse.
Avec mes remerciements.
Cordialement.
Alex
Avatar
MichD
| c'est que le résultat s'affiche dans une cellule 1
| ligne en dessous de la ou j'ai entré la formule,
| pourquoi pas dans la cellule ou elle est inscrite ?

***Tu veux dire que si tu entres la formule en B1, la
réponse s'affiche en B2?

***Si tu sélectionnes la cellule B2, que vois-tu dans la
barre de formule?



MichD
---------------------------------------------------------------
Avatar
Alex
Re bonjour,

Je confirme si je rentre la formule en B1 je vois la réponse en B2 et
dans la barre de formule je vois bien la formule de calcul, mais B1 et
B2 sont fusionnées et centrer automatiquement.
Alex
Avatar
Alex
Re Re,

Non en fait ca fonctionne j'ai retesté sur d'autres cellules et la le
résultat s'affiche bien la ou j'ai inscrit la formule. Il faut que
j'ajoute un controle de la mise en forme de la feuille avant insertion
de la formule. (Avec mes excuses pour ma réponse précédente).
Maintenant qu'on obtient bien le nombre de retour à la ligne, je
présume qu'il suffit que je recopie ma ligne autant de fois que le
résultat obtenu, mais comment dois je procéder pour faire la suite,
pour effacer, si par exemple, le résultat est 2, cela va me faire 3
lignes identiques, mais sur la première je veux conserver uniquement
la premiere ligne (donnée) de ma cellule, sur la seconde ligne la 2eme
et sur la 3eme uniquement les données de la 3eme lignes... et comment
fais je pour les cellules ou je n'ai pas qu'une seule ligne dans la
cellule, car mon controle se fait sur une cellule bien précise, mais
les autres cellules ou il n'y en a qu'une je voudrais simplement une
duplication de la donnée.
merci par avance.
Alex
Avatar
MichD
A ) Si tu ne veux pas avoir trop de problèmes,
tu devrais éviter autant que faire se peut
l'utilisation des cellules fusionnées.

B ) Peux-tu donner un exemple concret et clair de
ce que tu veux faire ou obtenir comme résultat.

Quel est le contenu de la cellule, que veux-tu
obtenir comme résultat final? Est-ce que tu veux
supprimer seulement les retours à la ligne ou tu
veux supprimer les retours à la ligne et le contenu
des autres lignes autres que la première?



MichD
---------------------------------------------------------------
Avatar
Alex
Re bonjour,

J'ai mis le fichier sur cjoint.
le lien est le suivant : http://www.cjoint.com/?0DctfQ4SghN
J'avais repondu hier, mais le message ne figure pas, alors je
recommence.
Le premier onglet est l'onglet qui correspond au fichier "Origine" et
le second au resultat souhaité.
La colonne B sert de référence pour le comptage du nombre de ligne. Le
chiffre obtenu donne le nombre de fois que la ligne doit être
dupliquée. si le chiffre est deux, j'ai 3 lignes en tout. Le nettoyage
de la cellule "B" doit conserver, sur la premiere ligne, la premiere
donnée et supprimer les deux qui suivent, sur ma deuxieme ligne je
conserve la donnée n° 2 et supprime donc la première et troisieme
donnée de la cellule, et sur la 3 lignes uniquement la 3eme donnée et
suppression des deux premiere données de la cellule.
Je reste à votre disposition si vous souhaitez d'autres informations
complémentaires.
Avec mes remerciements.
Bien cordialement.
Alex
Avatar
MichD
Bonjour,

Voici comment faire avec une macro :
Tu copies la procédure dans un module standard.
Au besoin, tu adaptes le nom de la feuille dans la
procédure.

J'ai choisi la cellule F2 de la feuille "Tableau Origine"
comme première cellule pour la plage de résultat.

'----------------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Lig As Long
Dim NbLig As Long, Nb As Long, X As Variant
Dim Dest As Range

Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Tableau Origine") 'Nom feuille à adapter
.Range("A1").Resize(, 4).Copy .Range("F1")
'Cellule à partir de laquelle seront copiées
'les données
Set Dest = .Range("F2")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Lig = 0
For Each C In Rg
Lig = Lig + NbLig
X = Split(C.Offset(, 1), Chr(10))
NbLig = UBound(X) + 1
Dest.Offset(Lig, 0).Resize(NbLig, 1) = C.Value
Dest.Offset(Lig, 1).Resize(NbLig, 1) = Application.Transpose(X)
X = Split(C.Offset(, 2), Chr(10))
Nb = UBound(X) + 1
Dest.Offset(Lig, 2).Resize(Nb, 1) = Application.Transpose(X)
Dest.Offset(Lig, 3).Resize(Nb, 1) = C.Offset(, 3).Value
Next
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'----------------------------------------------------

MichD
---------------------------------------------------------------
Avatar
Alex
Bonjour,

C'est génial cela fonctionne très bien et très vite et correspond
vraiment à mon besoin.
Cette macro m'évite la gestion de 50 Colonnes supplémentaires,
vraiment un gros poids en moins à gérer.
Merci beaucoup.
J'ai néanmoins une petite question, si je souhaites obtenir le
résultat sur une autre feuille, comment dois je procéder, car j'ai
tenté d'ajouter à Set Dest = .Range("F2") en mettant Set Dest
= .Range("Feuil1!A1"), mais cela beug ?
Merci encore pour ton aide.
Bien cordialement.

Alex
Avatar
MichD
Bonjour,

Comme ceci. Prends le temps de définir
les 2 variables selon ton besoin.

'------------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Lig As Long
Dim NbLig As Long, Nb As Long, X As Variant
Dim Dest As Range, Sh As Worksheet

'*************Variables à définir*************
'Définir la feuille de destination
'adapte le nom au besoin selon ton environnement.
Set Sh = Worksheets("Tableau Résultat")

'Définir la première cellule dans la feuille
'de destination où seront copiées les données
adr = "A1"
'***********************************************

Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Tableau Origine") 'Nom feuille à adapter
.Range("A1").Resize(, 4).Copy Sh.Range(adr)
'Cellule à partir de laquelle seront copiées
'les données
Set Dest = Sh.Range(adr).Offset(1)
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Lig = 0
For Each C In Rg
Lig = Lig + NbLig
X = Split(C.Offset(, 1), Chr(10))
NbLig = UBound(X) + 1
Dest.Offset(Lig, 0).Resize(NbLig, 1) = C.Value
Dest.Offset(Lig, 1).Resize(NbLig, 1) = Application.Transpose(X)
X = Split(C.Offset(, 2), Chr(10))
Nb = UBound(X) + 1
Dest.Offset(Lig, 2).Resize(Nb, 1) = Application.Transpose(X)
Dest.Offset(Lig, 3).Resize(Nb, 1) = C.Offset(, 3).Value
Next
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'------------------------------------------------


MichD
---------------------------------------------------------------
1 2