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

3 réponses

1 2
Avatar
Alex
Re Bonjour,

Je reviens sur le sujet, car je voulais adapter la boucle avec la
version complète de mon fichier, (mon exemple donné était sur 4
colonnes), mais en réalité j'en ai 22.
Sur mes 22 colonnes, j'ai 17 colonnes avec des cellules "mono entrée"
sans retour à la ligne et 5 colonnes avec des retours à la lignes à
déconcatener :
Colonnes de A à I soit, d'après ce que je comprends dans la macro, la
numérotation des colonnes en 0 à 8, puis les colonnes de O à V soit e n
Numérotation de 14 à 21 en "Mono Entrée"
Colonnes de J à N en multi lignes à déconcatener soit Numérotation de
colonnes en 9 à 13.
Le avant boucle :
J'ai bien adapté le nom de la feuille et la destination (pas de souci)

Dans la boucle :
Pouvez vous me dire pour mes colonnes en "mono entrée" et comment je
dois interpreter les différents segments de désignation de plage , et
quelle est la ligne de commande que je dois dupliquer et adapter, est
ce ? :

Dest.Offset(Lig, 0).Resize(NbLig, 1) = C.Value Ou Dest.Offset(Lig,
3).Resize(Nb, 1) = C.Offset(, 3).Value
' Par exemple ce que je crois comprendre Lig,O = veut dire la 1er
colonne

Idem our les colonnes en multi entrée, est ce bien :

Dest.Offset(Lig, 2).Resize(Nb, 1) = Application.Transpose(X) ' a
adapter

Faut il que je répète :

X = Split(C.Offset(, 2), Chr(10))
Nb = UBound(X) + 1

Merci par avance de votre aide.
Bien cordialement.
Alex
Avatar
MichD
Rg représente la plage de cellules de la plage A2:Ax de la feuille source
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)


Dans cette boucle :

Lig = 0
Une boucle pour toutes les cellules de la colonne A2:Ax
de la feuille source à partir de la ligne 2
For Each C In Rg
'Compteur pour se retrouver sur la bonne ligne pour effectuer
'la copie dans la feuille de destination
Lig = Lig + NbLig

'Traitement de la colonne 2, premières colonnes multilignes
' Mets dans un tableau (array) X le contenu de la cellule
X = Split(C.Offset(, 1), Chr(10))

'Le tableau X est de base zéro, c'est ce pourquoi il faut ajouter
'car dans Excel la première ligne est 1 et non 0
NbLig = UBound(X) + 1

'Copie sur la feuille destination du contenu de la première cellule
'de la première donnée (A2) de la feuille source (Mono entrée)
Dest.Offset(Lig, 0).Resize(NbLig, 1) = C.Value

'Copie des données du contenu de la cellule B2 vers la colonne
'B2 de la feuille de destination.
Dest.Offset(Lig, 1).Resize(NbLig, 1) = Application.Transpose(X)

'Mets dans le contenu de la colonne C2 dans une variable array X
X = Split(C.Offset(, 2), Chr(10))

'Nb représente le nombre d'entrées lignes différentes dans la variable X
Nb = UBound(X) + 1

'Copie de la cellule C2 vers la plage de destination C2 de la feuille de
destination
Dest.Offset(Lig, 2).Resize(Nb, 1) = Application.Transpose(X)

'Remplis la colonne D2 de la feuille destination avec le contenu de
'la cellule D2 (Mono entrée) de la feuille de destination
Dest.Offset(Lig, 3).Resize(Nb, 1) = C.Offset(, 3).Value
Next

à chaque boucle, on passe d'une ligne à l'autre, A2, A3, A4....
En fait, la boucle utilise à profusion les méthodes "Offset" et
Resize pour localiser chacune des cellules.
La méthode Offset est exécutée par rapport à la colonne A
en partant de la ligne 2 du tableau des données, la première
ligne étant réservée pour les étiquettes. Il en va de même pour
la feuille de destination.

La méthode Resize est utile, car elle permet de définir le nombre
de lignes utiles pour copier le contenu du tableau de X

Il s'agit d'ajouter à la liste toutes les colonnes que l'on désire
traiter selon le même principe selon que ce sont des entrées mono
ou multiligne.


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

Merci pour ces explications, elles m'ont permis de compléter et
adapter la boucle.
J'ai compris le fonctionnement pour gérer les différentes colonnes en
multilignes ou en mono, mais la "forme" est trop mathématique pour
moi ;(
Encore un grand merci.
Bien cordialement.
Alex
1 2