| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une seule
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une seule
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une seule
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
| un bouquin Excel
**** ?????
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la feuille de calcul
Il y a les bouquins de Stephen Bullen qu'il a écrit avec
différents collaborateurs selon les ouvrages.
Sur les tableaux croisés dynamiques Excel 2007, il y a
"Pivot Table Data Crunching for Microsoft® Office Excel® 2007"
Copyright © 2007 by Pearson Education, Inc.
Excel® PivotTables and Charts
By Peter G. Aitken (2006)
Excel Pivot Tables Recipe Book
A Problem-Solution Approach
DEBRA DALGLEISH (2006) (Ontarienne)
Je ne suis pas trop fervent de l'approche par
problématique -> ça dépend des goûts
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
Et surtout, la pratique que ce soit du code ou des formules.
Il faut avoir plusieurs bouquins d'auteurs différents car chacun
y exploite ses forces.
"garnote" a écrit dans le message de groupe de discussion :
Dis donc Denis, aurais-tu un bouquin Excel à me suggérer
pour avoir accès ( ne serait-ce que très partiellement )
à ton savoir encyclopédique ?
Serge
| un bouquin Excel
**** ?????
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la feuille de calcul
Il y a les bouquins de Stephen Bullen qu'il a écrit avec
différents collaborateurs selon les ouvrages.
Sur les tableaux croisés dynamiques Excel 2007, il y a
"Pivot Table Data Crunching for Microsoft® Office Excel® 2007"
Copyright © 2007 by Pearson Education, Inc.
Excel® PivotTables and Charts
By Peter G. Aitken (2006)
Excel Pivot Tables Recipe Book
A Problem-Solution Approach
DEBRA DALGLEISH (2006) (Ontarienne)
Je ne suis pas trop fervent de l'approche par
problématique -> ça dépend des goûts
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
Et surtout, la pratique que ce soit du code ou des formules.
Il faut avoir plusieurs bouquins d'auteurs différents car chacun
y exploite ses forces.
"garnote" <garnote3RIEN@videotron.ca> a écrit dans le message de groupe de discussion :
OAR5SIjgJHA.4880@TK2MSFTNGP02.phx.gbl...
Dis donc Denis, aurais-tu un bouquin Excel à me suggérer
pour avoir accès ( ne serait-ce que très partiellement )
à ton savoir encyclopédique ?
Serge
| un bouquin Excel
**** ?????
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la feuille de calcul
Il y a les bouquins de Stephen Bullen qu'il a écrit avec
différents collaborateurs selon les ouvrages.
Sur les tableaux croisés dynamiques Excel 2007, il y a
"Pivot Table Data Crunching for Microsoft® Office Excel® 2007"
Copyright © 2007 by Pearson Education, Inc.
Excel® PivotTables and Charts
By Peter G. Aitken (2006)
Excel Pivot Tables Recipe Book
A Problem-Solution Approach
DEBRA DALGLEISH (2006) (Ontarienne)
Je ne suis pas trop fervent de l'approche par
problématique -> ça dépend des goûts
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
Et surtout, la pratique que ce soit du code ou des formules.
Il faut avoir plusieurs bouquins d'auteurs différents car chacun
y exploite ses forces.
"garnote" a écrit dans le message de groupe de discussion :
Dis donc Denis, aurais-tu un bouquin Excel à me suggérer
pour avoir accès ( ne serait-ce que très partiellement )
à ton savoir encyclopédique ?
Serge
michdenis a écrit le 29/01/2009 à 17h41 :| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seuleligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?
michdenis a écrit le 29/01/2009 à 17h41 :
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seule
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?
michdenis a écrit le 29/01/2009 à 17h41 :| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seuleligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
un bouquin Excel
Il y a bien sûr les volumes de John Walkenbach
Il en a écrit plusieurs sur VBA et aussi sur les formules de la
feuille de calcul
Et ce forum -> on y retrouve beaucoup de suggestions
et de détails qu'on ne retrouvent jamais dans les bouquins.
pour avoir accès ( ne serait-ce que très partiellement ) à ton savoir encyclopédique ?
Un fichier exemple :
http://cjoint.com/?bFvtZlnocG
et le code qui s'y retrouve :
'-------------------------------------
Sub Données()
Dim Rg As Range, Rg1 As Range, C As Range
Dim Mot As String, A As Integer
With Feuil1 'à adapter le nom de la feuille et la plage
'où sont les données
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
End With
Application.ScreenUpdating = False
'Où je copie la concaténation des colonnes A & B
Set Rg1 = Rg(1, 1).Offset(, Rg.Columns.Count).Resize(Rg.Rows.Count)
With Rg1
'la copie se fait par formule
.Formula = "=" & Rg(1, 1).Address(0, 0) & "&" & Rg(1, 2).Address(0, 0)
'substitution des formules par les valeurs
.Value = .Value
End With
'boucle pour chaque cellule de la colonne (concaténation)
For Each C In Rg1
'Mot = valeur à chercher si un doublon existe.
Mot = C.Value
'Essaie de trouver si la valeur existe
Set trouve = Rg1.Find(Mot, , xlValues, xlWhole)
'Si une valeur est trouvé
If Not trouve Is Nothing Then
adr = trouve.Address
Do
'A = compteur si >1 doublons
A = A + 1
'une deuxième condition trouve.Row > C.Row
'pour ne pas compter 2 fois la même entrée
If A > 1 And trouve.Row > C.Row Then
'Détermine la colonne où copiées les datas
col = Feuil1.Cells(C.Row, 256).End(xlToLeft).Offset(, 1).Column
'Copie les data
'.Resize(, 2)-> seulement 2 colonnes de données à copier
'pas besoin de recopier le nom et le prénom
Feuil1.Cells(C.Row, col).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(,
2).Value
'Rg(trouve.Row, 3).Resize(, 2).Value 'seules les
'données à partir de la colonne 3 seront recopiées,resize = 2 colonnes
' Rg1(C.Row, 2).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(, 2).Value
'Efface le doublon
Rg(trouve.Row, 1).Resize(, 4).Clear
End If
Set trouve = Rg1.FindNext(trouve)
Loop Until trouve Is Nothing Or adr = trouve.Address
End If
A = 0
Next
'Supprime la colonne concaténatioin
Rg1.EntireColumn.Delete
'Supprime les entrées qui étaient en doubon
'dans la plage initiale
Rg.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
'-------------------------------------
"vincerig" a écrit dans le message de groupe de discussion :
michdenis a écrit le 29/01/2009 à 17h41 :| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seuleligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?
Un fichier exemple :
http://cjoint.com/?bFvtZlnocG
et le code qui s'y retrouve :
'-------------------------------------
Sub Données()
Dim Rg As Range, Rg1 As Range, C As Range
Dim Mot As String, A As Integer
With Feuil1 'à adapter le nom de la feuille et la plage
'où sont les données
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
End With
Application.ScreenUpdating = False
'Où je copie la concaténation des colonnes A & B
Set Rg1 = Rg(1, 1).Offset(, Rg.Columns.Count).Resize(Rg.Rows.Count)
With Rg1
'la copie se fait par formule
.Formula = "=" & Rg(1, 1).Address(0, 0) & "&" & Rg(1, 2).Address(0, 0)
'substitution des formules par les valeurs
.Value = .Value
End With
'boucle pour chaque cellule de la colonne (concaténation)
For Each C In Rg1
'Mot = valeur à chercher si un doublon existe.
Mot = C.Value
'Essaie de trouver si la valeur existe
Set trouve = Rg1.Find(Mot, , xlValues, xlWhole)
'Si une valeur est trouvé
If Not trouve Is Nothing Then
adr = trouve.Address
Do
'A = compteur si >1 doublons
A = A + 1
'une deuxième condition trouve.Row > C.Row
'pour ne pas compter 2 fois la même entrée
If A > 1 And trouve.Row > C.Row Then
'Détermine la colonne où copiées les datas
col = Feuil1.Cells(C.Row, 256).End(xlToLeft).Offset(, 1).Column
'Copie les data
'.Resize(, 2)-> seulement 2 colonnes de données à copier
'pas besoin de recopier le nom et le prénom
Feuil1.Cells(C.Row, col).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(,
2).Value
'Rg(trouve.Row, 3).Resize(, 2).Value 'seules les
'données à partir de la colonne 3 seront recopiées,resize = 2 colonnes
' Rg1(C.Row, 2).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(, 2).Value
'Efface le doublon
Rg(trouve.Row, 1).Resize(, 4).Clear
End If
Set trouve = Rg1.FindNext(trouve)
Loop Until trouve Is Nothing Or adr = trouve.Address
End If
A = 0
Next
'Supprime la colonne concaténatioin
Rg1.EntireColumn.Delete
'Supprime les entrées qui étaient en doubon
'dans la plage initiale
Rg.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
'-------------------------------------
"vincerig" <vincerig@domain-xyz.in> a écrit dans le message de groupe de discussion :
EKWdnSLzLKEGeBzU4p2dnAA@giganews.com...
michdenis a écrit le 29/01/2009 à 17h41 :
| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seule
ligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?
Un fichier exemple :
http://cjoint.com/?bFvtZlnocG
et le code qui s'y retrouve :
'-------------------------------------
Sub Données()
Dim Rg As Range, Rg1 As Range, C As Range
Dim Mot As String, A As Integer
With Feuil1 'à adapter le nom de la feuille et la plage
'où sont les données
Set Rg = .Range("A1:D" & .Range("A65536").End(xlUp).Row)
End With
Application.ScreenUpdating = False
'Où je copie la concaténation des colonnes A & B
Set Rg1 = Rg(1, 1).Offset(, Rg.Columns.Count).Resize(Rg.Rows.Count)
With Rg1
'la copie se fait par formule
.Formula = "=" & Rg(1, 1).Address(0, 0) & "&" & Rg(1, 2).Address(0, 0)
'substitution des formules par les valeurs
.Value = .Value
End With
'boucle pour chaque cellule de la colonne (concaténation)
For Each C In Rg1
'Mot = valeur à chercher si un doublon existe.
Mot = C.Value
'Essaie de trouver si la valeur existe
Set trouve = Rg1.Find(Mot, , xlValues, xlWhole)
'Si une valeur est trouvé
If Not trouve Is Nothing Then
adr = trouve.Address
Do
'A = compteur si >1 doublons
A = A + 1
'une deuxième condition trouve.Row > C.Row
'pour ne pas compter 2 fois la même entrée
If A > 1 And trouve.Row > C.Row Then
'Détermine la colonne où copiées les datas
col = Feuil1.Cells(C.Row, 256).End(xlToLeft).Offset(, 1).Column
'Copie les data
'.Resize(, 2)-> seulement 2 colonnes de données à copier
'pas besoin de recopier le nom et le prénom
Feuil1.Cells(C.Row, col).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(,
2).Value
'Rg(trouve.Row, 3).Resize(, 2).Value 'seules les
'données à partir de la colonne 3 seront recopiées,resize = 2 colonnes
' Rg1(C.Row, 2).Resize(, 2).Value = Rg(trouve.Row, 3).Resize(, 2).Value
'Efface le doublon
Rg(trouve.Row, 1).Resize(, 4).Clear
End If
Set trouve = Rg1.FindNext(trouve)
Loop Until trouve Is Nothing Or adr = trouve.Address
End If
A = 0
Next
'Supprime la colonne concaténatioin
Rg1.EntireColumn.Delete
'Supprime les entrées qui étaient en doubon
'dans la plage initiale
Rg.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
'-------------------------------------
"vincerig" a écrit dans le message de groupe de discussion :
michdenis a écrit le 29/01/2009 à 17h41 :| Une idée ?
A ) tu ajoutes une colonne en y mettant la formule
= A2 & B2 'nom et Prénom
B) tu tries ton tableau sur à partir de cette colonne
C) Tu appliques un filtre élaboré sur cette colonne
en prenant comme critère une formule
G2:G50 colonne supposément ajoutée
zone de critère du filtre : H1:H2
h1 = tu laisses complètement vide
h2 : la formule suivante : =nb.si(G2:G50;G2)>1
Seules les enregistrements ayant au moins 2 entrées ou plus
se retrouveront dans la plage filtrée
En VBA, tu fais une boucle seulement sur les enregistrements affichés
et tu vérifies si la première cellule = la deuxième si oui
tu copies la ligne
de la deuxième ligne à côté de la première...
ainsi de suite.
Voilà pour l'idée.
"vincerig" a écrit dans le
message de groupe de discussion :
Bonjour,
Suite à une extraction de ma base de données, j'ai un tableau
excel qui
s'affiche avec en ligne le nom, le prénom, etc... le truc c'est que si
une
personne à 2 données, elle apparait sur 2 lignes.
J'ai besoin de faire un publipostage et souhaiterais donc ramener sur une
seuleligne (en créant des colonnes) les données pour une même
personne.
Une idée ?
Merci d'avance
Merci pour cette idée !!
peux-tu expliciter la macro STP ?