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

Transposition de quelques lignes en colonnes

9 réponses
Avatar
Apprenti.xls
Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment explicite ?
J'ai bien commencé "à la main", mais celà devient vite lassant avec des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas et me
proposeront une solution.
@+

9 réponses

Avatar
Nicolas B.
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données de trois colonnes, il faut que chaque cellule de la ligne (du
tableau final) contienne les données de trois colonnes (par exemple de
A8, B8 et C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon avis le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un filtre
élaboré avec une Zone de critères vide, en copiant dans un autre endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour régulièrement :
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis sur le
bouton Terminer. Déplace les étiquettes de tes trois premières colonnes
en champs de colonne. Tes données doivent alors s'afficher à cet endroit
sans doublons. Il reste des colonnes Total à enlever : clic droit sur
l'une d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment explicite ?
J'ai bien commencé "à la main", mais celà devient vite lassant avec des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas et me
proposeront une solution.
@+




Avatar
MPi
Salut,

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes.
Cette partie aurait besoin de plus d'explications...

Qu'est-ce que tu entends par "créer autant de colonnes..."
Qu'est-ce que tu veux y mettre et de quelle manière veux-tu l'y mettre ?

La façon dont je procéderais serait comme ceci
Trier les 6 colonnes par A, B et C
À ce moment toutes les lignes qui commencent par les 3 mêmes valeurs seront
collées.
Il s'agirait maintenant de boucler le tout.
For I = Début to Fin
If Range("A" & I) = Range("A" & I + 1) and Range("B" &I) = Range("B" &
I+1) and Range(Range("C") = Range("C" & I + 1) then
' 3 premières valeurs identiques
' faire ce qu'il faut
End If
Next

Michel

"Apprenti.xls" a écrit dans le message de
news:%
Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment explicite ?
J'ai bien commencé "à la main", mais celà devient vite lassant avec des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas et
me

proposeront une solution.
@+




Avatar
Apprenti.xls
Bonjour Michel et merci de t'intéresser à mon problème.
Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les premières
colonnes.
ID Parent Nom Parent Prénom Parent ID Enfant Nom Enfant Prénom
Enfant

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même parent
en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par exemple
:
ID Parent Nom Parent Prénom Parent ID 1erEnfant Nom 1erEnfant
Prénom 1erEnfant ID 2èmeEnfant Nom 2èmeEnfant Prénom 2èmeEnfant ID
3èmeEnfant Nom 3èmeEnfant Prénom 3èmeEnfant ID 4èmeEnfant Nom
4èmeEnfant Prénom 4èmeEnfant

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. Merci d'avance si tu trouves ou
quelqu'un d'autre, bien sûr, une petite procédure qui pourrait m'avancer.

"MPi" a écrit dans le message de news:
cPCNe.22162$
Salut,

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes.
Cette partie aurait besoin de plus d'explications...

Qu'est-ce que tu entends par "créer autant de colonnes..."
Qu'est-ce que tu veux y mettre et de quelle manière veux-tu l'y mettre ?

La façon dont je procéderais serait comme ceci
Trier les 6 colonnes par A, B et C
À ce moment toutes les lignes qui commencent par les 3 mêmes valeurs
seront
collées.
Il s'agirait maintenant de boucler le tout.
For I = Début to Fin
If Range("A" & I) = Range("A" & I + 1) and Range("B" &I) = Range("B" &
I+1) and Range(Range("C") = Range("C" & I + 1) then
' 3 premières valeurs identiques
' faire ce qu'il faut
End If
Next

Michel

"Apprenti.xls" a écrit dans le message de
news:%
Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment explicite
?
J'ai bien commencé "à la main", mais celà devient vite lassant avec des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas et
me

proposeront une solution.
@+








Avatar
Apprenti.xls
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les premières
colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant | Prénom
Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même parent
en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par exemple
:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er Enfant |
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème Enfant |
ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème Enfant | Nom
4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal exprimé,
elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les données
de trois colonnes, il faut que chaque cellule de la ligne (du tableau
final) contienne les données de trois colonnes (par exemple de A8, B8 et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon avis le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un filtre
élaboré avec une Zone de critères vide, en copiant dans un autre endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour régulièrement :
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis sur le
bouton Terminer. Déplace les étiquettes de tes trois premières colonnes en
champs de colonne. Tes données doivent alors s'afficher à cet endroit sans
doublons. Il reste des colonnes Total à enlever : clic droit sur l'une
d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les informations
qui sont de même nature dans les 3 premières colonnes et créer autant de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment explicite
? J'ai bien commencé "à la main", mais celà devient vite lassant avec des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas et
me proposeront une solution.
@+




Avatar
MPi
Salut,

La réponse citée n'est jamais apparue sur Outlook Express... c'est un peu
emm....

Ceci pourrait être une façon de procéder

Sub MaMacro()
Dim I As Integer
Dim Colonne As Integer

On Error GoTo Erreur

For I = 1 To 10 'Scanner toutes les lignes
If Range("A" & I) = Range("A" & I + 1) And _
Range("B" & I) = Range("B" & I + 1) And _
Range("C" & I) = Range("C" & I + 1) And _
Range("A" & I) <> "" Then
'Définir la dernière colonne pour y entrer les données
Colonne = Range("A" & I & ":IV" & I).Find("*", Range("A" & I), ,
, xlByColumns, xlPrevious).Column
Range("A" & I).Offset(0, Colonne) = Range("D" & I + 1)
Range("A" & I).Offset(0, Colonne + 1) = Range("E" & I + 1)
Range("A" & I).Offset(0, Colonne + 2) = Range("F" & I + 1)
'Effacer la colonne copié
Rows(I + 1).Delete
'Comme on part d'en haut, il faut décrémenter la variable I
'Sinon, il faudrait partir de la fin et remonter
I = I - 1
End If
Next

Exit Sub
Erreur:
MsgBox Err.Description
End Sub


Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le message
de news:eN$
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les premières
colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant | Prénom
Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même
parent

en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par
exemple

:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er Enfant |
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème Enfant
|

ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème Enfant |
Nom

4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal exprimé,
elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données


de trois colonnes, il faut que chaque cellule de la ligne (du tableau
final) contienne les données de trois colonnes (par exemple de A8, B8 et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon avis le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un filtre
élaboré avec une Zone de critères vide, en copiant dans un autre endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour régulièrement :
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis sur le
bouton Terminer. Déplace les étiquettes de tes trois premières colonnes
en


champs de colonne. Tes données doivent alors s'afficher à cet endroit
sans


doublons. Il reste des colonnes Total à enlever : clic droit sur l'une
d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6 colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les
informations



qui sont de même nature dans les 3 premières colonnes et créer autant
de



colonnes qu'il y a de lignes différentes. Suis-je suffisamment
explicite



? J'ai bien commencé "à la main", mais celà devient vite lassant avec
des



centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas
et



me proposeront une solution.
@+








Avatar
Apprenti.xls
Merci Michel !

Je ne prends pas encore le temps de tester pour te remercier vivement d'ores
et déjà.
@+.

"MPi" a écrit dans le message de news:
fghOe.30706$
Salut,

La réponse citée n'est jamais apparue sur Outlook Express... c'est un peu
emm....

Ceci pourrait être une façon de procéder

Sub MaMacro()
Dim I As Integer
Dim Colonne As Integer

On Error GoTo Erreur

For I = 1 To 10 'Scanner toutes les lignes
If Range("A" & I) = Range("A" & I + 1) And _
Range("B" & I) = Range("B" & I + 1) And _
Range("C" & I) = Range("C" & I + 1) And _
Range("A" & I) <> "" Then
'Définir la dernière colonne pour y entrer les données
Colonne = Range("A" & I & ":IV" & I).Find("*", Range("A" & I),
,
, xlByColumns, xlPrevious).Column
Range("A" & I).Offset(0, Colonne) = Range("D" & I + 1)
Range("A" & I).Offset(0, Colonne + 1) = Range("E" & I + 1)
Range("A" & I).Offset(0, Colonne + 2) = Range("F" & I + 1)
'Effacer la colonne copié
Rows(I + 1).Delete
'Comme on part d'en haut, il faut décrémenter la variable I
'Sinon, il faudrait partir de la fin et remonter
I = I - 1
End If
Next

Exit Sub
Erreur:
MsgBox Err.Description
End Sub


Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message
de news:eN$
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les premières
colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant | Prénom
Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même
parent

en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par
exemple

:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er Enfant |
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème Enfant
|

ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème Enfant |
Nom

4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal exprimé,
elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le
message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données


de trois colonnes, il faut que chaque cellule de la ligne (du tableau
final) contienne les données de trois colonnes (par exemple de A8, B8
et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon avis
le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un
filtre
élaboré avec une Zone de critères vide, en copiant dans un autre
endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour régulièrement :
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis sur
le
bouton Terminer. Déplace les étiquettes de tes trois premières colonnes
en


champs de colonne. Tes données doivent alors s'afficher à cet endroit
sans


doublons. Il reste des colonnes Total à enlever : clic droit sur l'une
d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6
colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3 premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les
informations



qui sont de même nature dans les 3 premières colonnes et créer autant
de



colonnes qu'il y a de lignes différentes. Suis-je suffisamment
explicite



? J'ai bien commencé "à la main", mais celà devient vite lassant avec
des



centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas
et



me proposeront une solution.
@+












Avatar
Apprenti.xls
Ben ... Ça ne fonctionne pas ... ;o((( Il ne se passe rien.
Je ne comprends pas, le code me paraît quand même correct, même si je débute
...
Est-ce que tu pourrais voir ce qui ne va pas Michel, s'il-te-plaît, oiu un
autre d'ailleurs ?

Merci d'avance.
@+


"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le message
de news:
Merci Michel !

Je ne prends pas encore le temps de tester pour te remercier vivement
d'ores et déjà.
@+.

"MPi" a écrit dans le message de news:
fghOe.30706$
Salut,

La réponse citée n'est jamais apparue sur Outlook Express... c'est un peu
emm....

Ceci pourrait être une façon de procéder

Sub MaMacro()
Dim I As Integer
Dim Colonne As Integer

On Error GoTo Erreur

For I = 1 To 10 'Scanner toutes les lignes
If Range("A" & I) = Range("A" & I + 1) And _
Range("B" & I) = Range("B" & I + 1) And _
Range("C" & I) = Range("C" & I + 1) And _
Range("A" & I) <> "" Then
'Définir la dernière colonne pour y entrer les données
Colonne = Range("A" & I & ":IV" & I).Find("*", Range("A" & I),
,
, xlByColumns, xlPrevious).Column
Range("A" & I).Offset(0, Colonne) = Range("D" & I + 1)
Range("A" & I).Offset(0, Colonne + 1) = Range("E" & I + 1)
Range("A" & I).Offset(0, Colonne + 2) = Range("F" & I + 1)
'Effacer la colonne copié
Rows(I + 1).Delete
'Comme on part d'en haut, il faut décrémenter la variable I
'Sinon, il faudrait partir de la fin et remonter
I = I - 1
End If
Next

Exit Sub
Erreur:
MsgBox Err.Description
End Sub


Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message
de news:eN$
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les premières
colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant | Prénom
Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même
parent

en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par
exemple

:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er Enfant
|
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème
Enfant
|

ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème Enfant |
Nom

4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal exprimé,
elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le
message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données


de trois colonnes, il faut que chaque cellule de la ligne (du tableau
final) contienne les données de trois colonnes (par exemple de A8, B8
et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon avis
le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un
filtre
élaboré avec une Zone de critères vide, en copiant dans un autre
endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais
un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour régulièrement
:
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis sur
le
bouton Terminer. Déplace les étiquettes de tes trois premières
colonnes
en


champs de colonne. Tes données doivent alors s'afficher à cet endroit
sans


doublons. Il reste des colonnes Total à enlever : clic droit sur l'une
d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le
bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6
colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3
premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les
informations



qui sont de même nature dans les 3 premières colonnes et créer autant
de



colonnes qu'il y a de lignes différentes. Suis-je suffisamment
explicite



? J'ai bien commencé "à la main", mais celà devient vite lassant avec
des



centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce cas
et



me proposeront une solution.
@+
















Avatar
MPi
Salut,

Qu'est-ce qui ne fonctionne pas au juste ?
Ici, ça fonctionnait pourtant bien, en autant que les données étaient en A,
B, C, D, E et F

Pour ce qui est du "1 To 10", ben là, il faudra ajuster selon les lignes de
valeurs de ta feuille.

Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le message
de news:%
Ben ... Ça ne fonctionne pas ... ;o((( Il ne se passe rien.
Je ne comprends pas, le code me paraît quand même correct, même si je
débute

...
Est-ce que tu pourrais voir ce qui ne va pas Michel, s'il-te-plaît, oiu un
autre d'ailleurs ?

Merci d'avance.
@+


"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message

de news:
Merci Michel !

Je ne prends pas encore le temps de tester pour te remercier vivement
d'ores et déjà.
@+.

"MPi" a écrit dans le message de news:
fghOe.30706$
Salut,

La réponse citée n'est jamais apparue sur Outlook Express... c'est un
peu



emm....

Ceci pourrait être une façon de procéder

Sub MaMacro()
Dim I As Integer
Dim Colonne As Integer

On Error GoTo Erreur

For I = 1 To 10 'Scanner toutes les lignes
If Range("A" & I) = Range("A" & I + 1) And _
Range("B" & I) = Range("B" & I + 1) And _
Range("C" & I) = Range("C" & I + 1) And _
Range("A" & I) <> "" Then
'Définir la dernière colonne pour y entrer les données
Colonne = Range("A" & I & ":IV" & I).Find("*", Range("A" &
I),



,
, xlByColumns, xlPrevious).Column
Range("A" & I).Offset(0, Colonne) = Range("D" & I + 1)
Range("A" & I).Offset(0, Colonne + 1) = Range("E" & I + 1)
Range("A" & I).Offset(0, Colonne + 2) = Range("F" & I + 1)
'Effacer la colonne copié
Rows(I + 1).Delete
'Comme on part d'en haut, il faut décrémenter la variable I
'Sinon, il faudrait partir de la fin et remonter
I = I - 1
End If
Next

Exit Sub
Erreur:
MsgBox Err.Description
End Sub


Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message
de news:eN$
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les
premières




colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant |
Prénom




Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même
parent

en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par
exemple

:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er
Enfant




|
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème
Enfant
|

ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème Enfant
|




Nom
4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal
exprimé,




elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le
message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données


de trois colonnes, il faut que chaque cellule de la ligne (du
tableau





final) contienne les données de trois colonnes (par exemple de A8,
B8





et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon
avis





le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un
filtre
élaboré avec une Zone de critères vide, en copiant dans un autre
endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et fais
un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour
régulièrement





:
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis
sur





le
bouton Terminer. Déplace les étiquettes de tes trois premières
colonnes
en


champs de colonne. Tes données doivent alors s'afficher à cet
endroit





sans
doublons. Il reste des colonnes Total à enlever : clic droit sur
l'une





d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le
bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6
colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3
premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les
informations



qui sont de même nature dans les 3 premières colonnes et créer
autant






de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment
explicite



? J'ai bien commencé "à la main", mais celà devient vite lassant
avec






des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce
cas






et
me proposeront une solution.
@+




















Avatar
Apprenti.xls
Quel talent !

Merci encore Michel, c'était une erreur de mon côté ... Pas les mêmes
données identiques dans la 3ème colonne ... pffftt !
Ça marche du tonnerre. Je vais pouvoir l'adapter à toutes sortes de requêtes
issues de notre logiciel de paie qui remonte les informations en lignes et
non en colonnes.
En plus de ça, le code me permêt de comprendre plus de choses encore,
notamment l'histoire de la "décrémentation". Super !
Merci, merci Michel.
À bientôt !

"MPi" a écrit dans le message de news:
eEMOe.44102$
Salut,

Qu'est-ce qui ne fonctionne pas au juste ?
Ici, ça fonctionnait pourtant bien, en autant que les données étaient en
A,
B, C, D, E et F

Pour ce qui est du "1 To 10", ben là, il faudra ajuster selon les lignes
de
valeurs de ta feuille.

Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message
de news:%
Ben ... Ça ne fonctionne pas ... ;o((( Il ne se passe rien.
Je ne comprends pas, le code me paraît quand même correct, même si je
débute

...
Est-ce que tu pourrais voir ce qui ne va pas Michel, s'il-te-plaît, oiu
un
autre d'ailleurs ?

Merci d'avance.
@+


"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message

de news:
Merci Michel !

Je ne prends pas encore le temps de tester pour te remercier vivement
d'ores et déjà.
@+.

"MPi" a écrit dans le message de news:
fghOe.30706$
Salut,

La réponse citée n'est jamais apparue sur Outlook Express... c'est un
peu



emm....

Ceci pourrait être une façon de procéder

Sub MaMacro()
Dim I As Integer
Dim Colonne As Integer

On Error GoTo Erreur

For I = 1 To 10 'Scanner toutes les lignes
If Range("A" & I) = Range("A" & I + 1) And _
Range("B" & I) = Range("B" & I + 1) And _
Range("C" & I) = Range("C" & I + 1) And _
Range("A" & I) <> "" Then
'Définir la dernière colonne pour y entrer les données
Colonne = Range("A" & I & ":IV" & I).Find("*", Range("A" &
I),



,
, xlByColumns, xlPrevious).Column
Range("A" & I).Offset(0, Colonne) = Range("D" & I + 1)
Range("A" & I).Offset(0, Colonne + 1) = Range("E" & I + 1)
Range("A" & I).Offset(0, Colonne + 2) = Range("F" & I + 1)
'Effacer la colonne copié
Rows(I + 1).Delete
'Comme on part d'en haut, il faut décrémenter la variable I
'Sinon, il faudrait partir de la fin et remonter
I = I - 1
End If
Next

Exit Sub
Erreur:
MsgBox Err.Description
End Sub


Michel

"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le
message
de news:eN$
Bonjour Nicolas,

Je réécris ce que j'ai répondu à Michel qui s'est aussi penché sur
mon
problème, car mon énoncé n'était franchement pas explicite ...

[...]Rien ne vaut un exemple.
Supposons une liste d'enfants avec le nom des parents dans les
premières




colonnes.
ID Parent | Nom Parent | Prénom Parent | ID Enfant | Nom Enfant |
Prénom




Enfant |

Un parent peut avoir un ou plusieurs enfants.
La liste comprend tous les enfants
Mon souhait : regrouper sur une même ligne tous les enfants d'un même
parent

en autant de colonnes qu'il y a d'enfants. Ce qui donnerait ceci par
exemple

:

ID Parent | Nom Parent | Prénom Parent | ID 1er Enfant | Nom 1er
Enfant




|
Prénom 1er Enfant | ID 2ème Enfant | Nom 2ème Enfant | Prénom 2ème
Enfant
|

ID 3ème Enfant | Nom 3ème Enfant | Prénom 3ème Enfant | ID 4ème
Enfant
|




Nom
4ème Enfant | Prénom 4ème Enfant |

Le nombre de colonne étant limité à 256, pour mon cas, je n'ai que 9
"enfants" avec 3 colonnes qui leur sont propres.
J'espère avoir été un peu plus clair. [...]

Merci Nicolas pour tes propositions, mais comme je me suis mal
exprimé,




elles ne répondent pas au résultat escompté.
@+

"Nicolas B." a écrit dans le
message
de news:
Salut,

J'ai pas très bien compris : si tu veux regrouper en une ligne les
données


de trois colonnes, il faut que chaque cellule de la ligne (du
tableau





final) contienne les données de trois colonnes (par exemple de A8,
B8





et
C8). Veux-tu concaténer les données ?

Si tu préfères regrouper tes donnée en trois lignes (c'est à mon
avis





le
plus simple), plusieurs solutions sont possibles :

Sélectionne ton tableau (ligne de titres comprise) et applique un
filtre
élaboré avec une Zone de critères vide, en copiant dans un autre
endroit
de la feuille et en cochant Extraction sans doublons.
Il reste alors à transposer ton tableau. Pour cela, copie-le et
fais
un
collage Spécial en cochant la case Transposé.

Autre solution si les données doivent être mises à jour
régulièrement





:
passer par un tableau croisé dynamique (TCD).
Sélectionne le tableau et clique sur DonnéesRapport de TCD, puis
sur





le
bouton Terminer. Déplace les étiquettes de tes trois premières
colonnes
en


champs de colonne. Tes données doivent alors s'afficher à cet
endroit





sans
doublons. Il reste des colonnes Total à enlever : clic droit sur
l'une





d'entre elles, Paramètres de champ et coche la case Aucun.

Pour mettre à jour le tableau, il suffit alors de cliquer sur le
bouton
Actualiser (le point d'exclamation rouge) de la barre d'outils TCD.


A+
Nicolas B.

Bonjour à tous !

Je vous expose l'objet de mes soucis du jour :
- sur une seule feuille, j'ai des informations en ligne sur 6
colonnes,
quelques centaines de lignes
- une ligne peut regrouper les mêmes informations dans les 3
premières
colonnes
- seules les 3 colonnes suivantes distinguent chaque ligne

-> Je souhaiterais pouvoir regrouper sur une seule ligne les
informations



qui sont de même nature dans les 3 premières colonnes et créer
autant






de
colonnes qu'il y a de lignes différentes. Suis-je suffisamment
explicite



? J'ai bien commencé "à la main", mais celà devient vite lassant
avec






des
centaines de lignes ...
et comme je débute en vba, j'avoue mon impuissance là ...
Je devine bien le principe avec des "for each", mais je cale !

Merci d'avance à ceux qui prendront le temps de se pencher sur ce
cas






et
me proposeront une solution.
@+