Tableau excel: mettre une ligne en colonne

Maxoverfred

XLDnaute Occasionnel
Bonjour, j'ai fait quelques recherches sur le croisement de données mais généralement on ne parle pas de mon cas 'simple'
Voici la problématique, j'ai des valeurs dans mes enregistrements que j'aimerais mettre en colonne...

en exemple cela donne ceci, j'ai besoin de

NOM NATIONALITE VILLE
--------------------------------------------
TOTO1 Belge Bruxelles
TOTO2 Espagnol Madrid
TOTO3 Italie Rome
TOTO4 Italie Palerme

Et je voudrais donc

1) Croisement des données

NOM BELGE ESPAGNOL ITALIE
---------------------------------------------------
TOTO1 Bruxelles
TOTO2 Madrid
TOTO3 Rome
TOTO4 Palerme

Donc pour distinguer de manière unique les valeurs dans la colonne Nationalité, cela peut aller avec la fonction suivante

________________________
Sub test()
ListeValUniques Range('K2:K50'), Range('O1')
End Sub

Sub ListeValUniques(PlageSrc As Range, CellDest As Range)
Dim Arr1, Elt, Arr2(), Coll As New Collection

If PlageSrc.Columns.Count > 1 Then Exit Sub
Arr1 = PlageSrc.Value

For Each Elt In Arr1
On Error Resume Next
Coll.Add Elt, CStr(Elt)
If Err.Number = 0 Then
ReDim Preserve Arr2(1 To Coll.Count)
Arr2(Coll.Count) = Elt
End If
On Error GoTo 0
Next
CellDest.Resize(Coll.Count).Value = _
Application.Transpose(Arr2)
End Sub
______________________
2) Faut juste que je lui dise de mettre les valeurs uniques dans les colonnes à droite de la dernière colonne.
3) Parcourir tous les records de ma feuille et à chaque fois remplir la nouvelle colonne avec la valeur correspondante.

Le but étant de réduire les interventions manuelles, le fait de construire un pivottable n'est pas retenu.. car j'aimerais que ce soit une manoeuvre automatique en arrière plan qui fasse tout le travail et vu que le fichier source change chaque semaine..
Si quelqu'un a une piste rapide, merci.

Message édité par: maxoverfred, à: 13/08/2005 22:17

Message édité par: maxoverfred, à: 14/08/2005 11:04
 

marco57

XLDnaute Occasionnel
Bonsoir Maxoverfred et le Forum,
Oups, on dirait que j'a merdé.
Si je suis un peu plus en forme qu'hier soir, que ce matin en fait, tu devrais l'avoir ce coup-ci.
En prime, je t'ai ajouté les commentaires pour t'aider à comprendre mon raisonnement.

A+ et bonne soirée

Marco
 

marco57

XLDnaute Occasionnel
Encore Oups,
Maintenant, j'a trouvé. j'dois etes trop bon en francés.
J'a mis un accent sur Données et y en veut pas.

Here you are, it's coming right now

Have a good evening

Marco [file name=CroisementDonneesV3.zip size=20014]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CroisementDonneesV3.zip[/file]
 

Pièces jointes

  • CroisementDonneesV3.zip
    19.5 KB · Affichages: 35

Maxoverfred

XLDnaute Occasionnel
Voilà je viens de consacrer quelques minutes (c'est la moindre des choses par respect) sur ton fichier, en fait on y est presque c'est certainement pour cela que tu prévois une version 4..
Comme l'annoncait mon énoncé.. il faut que dans la deuxième page 'feuil2', il faut inverser ton processus, je veux dire

Dans ma feuil2, j'ai mon tableau définitif surlequel justement je vais coller mes données 'traitement A, traitement B' en regard de chaque record (clé unique étant Nom ici dans l'exemple), c'est d'ailleurs la raison pour laquelle je te parlais de vlookup, car à chaque fois je dois matché avec les valeurs... (donc un super exemple, j'ai deux records sur TOTO1 en feuil1, et dans ma feuil2, je dois donc avoir en face de TOTO1 (pour autant qu'il soit listé là bien évidemment..) deux valeurs dans chaque colonne Traitement A et B par exemple

Si tu n'as pas compris, toutes mes excuses, je traduirai dans un langage plus compréhensif


PS: après, il y a plus rien
 

ChTi160

XLDnaute Barbatruc
Salut Maxoverfred
bonsoir marco57
bonsoir le Forum

En pièce jointe une interprétation de ce que j'ai cru comprendre de ta dernière explication

merci à marco pour le code des versions précédentes [file name=CroisementDonneesV4.zip size=22592]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CroisementDonneesV4.zip[/file]

Message édité par: Chti160, à: 17/08/2005 22:51
 

Pièces jointes

  • CroisementDonneesV4.zip
    22.1 KB · Affichages: 25

Maxoverfred

XLDnaute Occasionnel
Bon post rouvert, je viens de remarquer Jean-Marie que tu as sauté quelques étapes en simplifiant un peu trop, c'est beau mais cela tient pas compte des précédantes données..

Donc ici dans la fonction transfert, tu mets la colonne Traitement A et Traitement B mais faut savoir que ces en-têtes de colonne doivent etre créér de manière dynamique en fonction de ce qui existera dans la feuille évidemment, et donc il faut un process qui regarde dans la colonne traitement, et qui fasse une sorte de group by, et qui mettent ces données dans le deuxième fichier à la fin, ensuite, il doit donc tenir compte qu'il doit encore trouver la position de ces en-têtes pour mettre les valeurs au bon endroit..

Je secoue vos deux fichiers et la solution devrait tomber, pouvez vous encore m'aider?

Merci ;)
 

ChTi160

XLDnaute Barbatruc
Salut Maxoverfred
bonjour le Fil
bonjour le Forum

Maxoverfred il faut que tu m'expliques Lol

ce challenge m'interresse mais je n'ai pas tout compris
si tu peux m'expliquer par un exemple Concret(un petit fichier de quelques lignes qui me permettront de mieux cerner ta demande)

en feuille 1 une colonne Nombre correspond aux rubriques A ou B
en feuille 2 deux colonnes A et B il faut celon le nom ajouter les Nombres de la colonne au colonnes A ou B de la Feuille 2 si le nom n'existe pas l'ajouter en fin de liste en feuille 2 ??????

tu vois je n'ai pas tout compris .Explique moi donc
et ainsi on avancera lol
Donc ici dans la fonction transfert, tu mets la colonne Traitement A et Traitement B mais faut
savoir que ces en-têtes de colonne doivent etre créér de manière dynamique savoir que ces en-têtes de colonne doivent etre créér de manière dynamique en fonction de ce qui
existera dans la feuille évidemment, et donc il faut un process qui regarde dans la colonne traitement, et qui fasse une sorte de group by, et qui mettent ces données dans le deuxième fichier
à la fin, ensuite, il doit donc tenir compte qu'il doit encore trouver la position de ces en-têtes
pour mettre les valeurs au bon endroit..

savoir que ces en-têtes de colonne doivent etre créér de manière dynamique ??????
qui fasse une sorte de group by, et qui mettent ces données dans le deuxième fichier ???????

Bonne Journée et bon Week End

Message édité par: Chti160, à: 20/08/2005 11:01
 

Maxoverfred

XLDnaute Occasionnel
Bonjour, en fait tout est expliqué mais avec moi faut lire tout à l'envers.. figure toi que je suis en train d'essayer de résoudre mais je m'arrache les cheveux..

Voici ton code:

Sub transfert()
Dim c As Integer
Dim maplage As Range
Dim derlgn As Integer, derlgn2 As Integer, dercol2 As Integer, L As Integer, L2 As Integer
Dim TabTemp As Variant

With Worksheets('Feuil1')
derlgn = .Range('B65535').End(xlUp).Row
TabTemp = .Range('B2:D' & derlgn).Value
End With

With Worksheets('Feuil2')
derlgn2 = .Range('A65536').End(xlUp).Row

' to change
Set maplage = .Range('A2:A' & derlgn2)
' Scan each row in Feuil2
For L2 = 2 To maplage.Count
' Range of Feuil1
For L = 1 To UBound(TabTemp, 1)
' When match
If .Cells(L2, 1) = TabTemp(L, 1) Then

Select Case TabTemp(L, 2)
' Header
Case Is = 'TRAITEMENT A'
c = 5
Cells(1, c) = TabTemp(L, 2)
Case Is = 'TRAITEMENT B'
c = 6
Cells(1, c) = TabTemp(L, 2)
End Select
' Data
.Cells(L2, c) = TabTemp(L, 3)
End If
Next
Next
End With

End Sub

En rouge, je veux faire la modification suivante, les noms des colonnes traitement A et B ne peuvent pas être hardcodées dans le code car je devrais etre capable de faire un tri unique et les stocker dans un tableau qui contiendrait donc : 'TRAITEMENT A', 'TRAITEMENT B', etc... (valeur unique)
Et donc avant de faire ma boucle sur les valeurs de ma Feuil2, je pourrais coller cette étiquette de valeur avant d'insérer les valeurs correspondantes..

Je veux bien te mettre un exemple, mais ce sera exactement le même que celui que tu as... désolé si c'est pas clair.. j'essaie, je vous assure de faire des efforts :)

Voici quand même le fichier, avec juste un comment dans la Feuil2 [file name=CroisementDonneesV4s.zip size=22668]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CroisementDonneesV4s.zip[/file]

Message édité par: maxoverfred, à: 20/08/2005 11:27

Message édité par: maxoverfred, à: 20/08/2005 11:28
 

Pièces jointes

  • CroisementDonneesV4s.zip
    22.1 KB · Affichages: 30

ChTi160

XLDnaute Barbatruc
Re donc on avance

tu as dans l'exemple traitement A et traitement B mais si je comprends Bien tu peux avoir Traitement X ou Y .....etc
donc il faut a chaque fois créer une collection des différents traitements et ensuite les mettre en colonne et ensuite coller les chiffres dans ces colonnes celon le type A B....etc

c'est ca????
 

Maxoverfred

XLDnaute Occasionnel
Exactement, creer d'abord une collection de traitements, coller cette collection dans la Feuil2 après le dernier entête rempli de cette feuille, et ensuite faire la jolie boucle que tu m'as créé et remplir dnc les valeurs dans les bonnes colonnes correspondantes..
 

ChTi160

XLDnaute Barbatruc
re donc on démarre avec rien

on colle donc les entetes puis la fois d'après il peut y avoir un nouvelle entête a créer (je ne comprends pas tu m'expliques le but chaque mois ,jour par exemple tu as la feuille 1 et tu click sur un bouton et les valeurs vont dans la feuille 2 qui contient des données(est ce un cumul ou les données précédentes sont telles effacées pour laisser place au nouvelles)
je suis dur a la comprenette mais tu comprends que cela a de l'importance .
continue de m'expliquer on devrait y arriver
 

Maxoverfred

XLDnaute Occasionnel
Je reprend depuis le début..

A l'origne deux fichiers, on va dire le fichier personnel et le fichier salaires, le but ultime faire une consolidation des deux et plus précisément, prendre comme départ le fichier personnel et le remplir de certaines données dufichier salaire

Autrement dit:

Fichier personnel: Feuil2 dans mon exemple
Fichier salaire:: Feuil 1

Je dois donc dans mon fichier personnel, rajouter a la fin des données existantes et en regard de chaque nom d'employé les valeurs contenues dans la fiche salaire

seul hic, c'est que dans mon fichier salaire, les données sont pas arrangées comme je voudrais, donc, l'opération que tu commences a connaitre est donc de réarranger ces données pour la fiche personnel.

Plus clair ou je continue

( en fait, le fait de coller ma collection de valeur unique, n'est peut etre pas la bonne solution, si tu regarde le travail de marco au début, j'aimais bien sa méthode, mais je n'arrive pas a combiner ta méthode pour les valeurs et sa méthode pour les entêtes, donc voilou )

Message édité par: maxoverfred, à: 20/08/2005 11:44
 

ChTi160

XLDnaute Barbatruc
re jai pour l'instant résolu le problème des colonnes
via une collectionTp dont les éléments sont collés dans les colonnes après la colonne CP
je pense qu'avec La methode Find on devrait pouvoir ensuite y coller les chiffre correspondants

Code:
With Worksheets('Personnel')

 derlgn2 = .Range('A65536').End(xlUp).Row
           .Range('E1:IV' & derlgn).ClearContents'efface les colonnes
 For c = 1 To Tp.Count'pour chaque élément de la collection
  dercol = .Range('A1').End(xlToRight).Column + 1'on détermine la dernière colonne
           .Cells(1, dercol) = Tp(c)'et on colle la Valeur de l'entête
 Next

une question cette opération de transfert tu la fais combien de fois un fois en fin de mois ou tu peux mettre a jour plusieurs fois dans le mois
car pour l'instant lorsque je lance le transfert les colonnes Type sont effacées et ensuite réajoutées
explique moi.
dit après je vais pouvoir te remplacer au boulot pour les congés par exemple Lol

bon la je vais manger bonne apéttit
 

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia