Passer de plusieurs lignes à une ligne par indivi

sevaudrey

XLDnaute Nouveau
Bonjour,

Je suis tombée sur ce site car je recherchais de l'aide pour traiter un fichier. C'est donc mon 1er post!!! J'espère que vous n'allez pas me décevoir.

J'ai joins un fichier car ça vaut mieux qu'un bon discours... C'est un exemple, le vrai fichier comportant plus 5000 lignes et jusqu'à 10 enfants par matricule.

L'idéal se serait une sorte de 'tant que' mais ça n'existe pas dans Excel?

Merci de votre aide

Sevaudrey

NB : je joins mon fichier après l'avoir zippé et renommé. [file name=forhelp.zip size=1799]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/forhelp.zip[/file]

Message édité par: sevaudrey, à: 07/04/2006 22:30
 

Pièces jointes

  • forhelp.zip
    1.8 KB · Affichages: 16

edelweisseric

XLDnaute Occasionnel
Re:passer de plusieurs lignes à une ligne par indi

Bonsoir Sevaudrey
Bonsoir à tous

Si j'ai bien compris regarde le fichier joint

Bon WE à tous

Cordialement [file name=forhelp01.zip size=5528]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/forhelp01.zip[/file]
 

Pièces jointes

  • forhelp01.zip
    5.4 KB · Affichages: 20

Hervé

XLDnaute Barbatruc
Re:passer de plusieurs lignes à une ligne par indi

bonsoir sevaudrey, eric

une proposition en vba.

eric, il me semble que ton fichier ne correspond pas à ce que tu voulais envoyer (j'ai pas vu de code) :)

le code pour ceux que ca interresse :

Sub Bouton1_QuandClic()
Dim tablo As Variant
Dim tablores()
Dim data As New Collection
Dim i As Integer, j As Integer
Dim ligne As Integer
Dim k As Byte, x As Byte

ligne = 2
tablo = Range('a1').CurrentRegion

For i = 2 To UBound(tablo)
       
On Error Resume Next
        data.Add tablo(i, 1),
CStr(tablo(i, 1))
       
On Error GoTo 0
Next i

For i = 1 To data.Count
       
For j = 2 To UBound(tablo)
               
If tablo(j, 1) = data(i) Then
                       
For k = 2 To UBound(tablo, 2)
                        x = x + 1
                               
ReDim Preserve tablores(1 To x)
                                tablores(x) = tablo(j, k)
                       
Next k
               
End If
       
Next j
       
With Sheets('Au final')
                .Cells(ligne, 1) = data(i)
                .Cells(ligne, 2).Resize(,
UBound(tablores, 1)) = tablores
       
End With
        Erase tablores: x = 0: ligne = ligne + 1
Next i
           

End Sub


salut [file name=forhelp2.zip size=9369]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/forhelp2.zip[/file]
 

Pièces jointes

  • forhelp2.zip
    9.1 KB · Affichages: 23

ODVJ

XLDnaute Impliqué
Re:passer de plusieurs lignes à une ligne par indi

Bonsoir à tous,

Voici une solution à partir de formules matricielles, de MEFC (mise en forme conditionnelle) et de noms de zones dynamiques.

Le résultat est donc .... peu dynamique voire lent! mais les formules peuvent t'intéresser.

Cordialement [file name=XLD_sevaudreyforhelp.zip size=22053]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/XLD_sevaudreyforhelp.zip[/file]
 

Pièces jointes

  • XLD_sevaudreyforhelp.zip
    21.5 KB · Affichages: 18

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:passer de plusieurs lignes à une ligne par indi

Bonsoir ODVJ, Hervé, Eric, Sevaudrey, le Forum de Nuit ;)


Oui même remarque qu'hervé, j'ai pas très bien compris ton fichier Eric... Probablement tu n'as pas envoyé le bon...

Sinon pour Hervé, je conseille d'upgrader X de toute urgence, Sevaudrey nous parle de fichier de plus de 5000 lignes...soit Integer ou carrément Long...

Moi je suis encore un peu assez tordu avec un code assez biscornu, je dois pas être encore en forme... Par contre je viens de tester sur 10000 lignes, moins de cinq secondes sur un Pentium IV 3.4 GHz avec 1 Mo de RAM. Démo réalisée sous XP Pro S/P 2, Office 2003 Pro.

Bonne nuit
[ol]@+Thierry[/ol] [file name=XLD_Collection_Key_Unique_Lineaire.zip size=13600]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/XLD_Collection_Key_Unique_Lineaire.zip[/file]

EDITION !!!

Arf, non c'est plus long que ça, en fait si j'ai des tonne de doublon dans la base de matricule ça va vite, mais pas avec un toto1 jusqu'à un toto9999 ... sorry pour l'optimisme !

Message édité par: _Thierry, à: 08/04/2006 01:50
 

Pièces jointes

  • XLD_Collection_Key_Unique_Lineaire.zip
    13.3 KB · Affichages: 21

Hervé

XLDnaute Barbatruc
Re:passer de plusieurs lignes à une ligne par indi

bonsoir tout le monde

thierry, j'ai volontairement déclaré x en byte.

X me permet de récupérer les colonnes, normalement ca devrait passer.

Sinon, j'ai un autre souci : les 256 colonnes d'excel.

joli code, mais tu devrais te reposer.

salut


:)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:passer de plusieurs lignes à une ligne par indi

Bonjour Cher Hervé, le Fil, le Forum

Autant pour moi, je n'avais même pas vu que ce fameux 'x' concernait les colonnes, pourtant j'ai été opéré pour la main, pas pour le cerveau ! lol

Bon dimanche à tous !
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 08/04/2006 09:57
 
M

merci de vos réponses..

Guest
Re:passer de plusieurs lignes à une ligne par indi

Bon, je vous remercie vraiment de vos réponses. Maintenant,il va vraiement falloir que je me mette au macros pour adapter tout ça à mon fichier...
Je vous tiens au courant.
 
T

>>>Thierry

Guest
Re:passer de plusieurs lignes à une ligne par indi

Bon,

J'ai pas eu le courage ni le temps de me faire une formation accélérée en VBA ce we. Du coup, j'ai pris vos différentes propositions en commençant pas les formules d'ODJV mais marche pas... J'ai recopié betement mais j'ai que des #Valeur en réponse.

Ensuite macros de Thierry. J'adapte mon fichier ( parce que c'était ma présentation était volontarement simplificatrice...) Ca mouline, erreur '13', débogage, le probleme vient de la ligne suivante :

.Range('A7').Resize(UBound(TabFinal, 2) + 1, UBound(TabFinal, 1) + 1).Value = Application.Transpose(TabFinal)

Analyse succinte, comprends pas alors je teste:

1/ je remplace les chiffres de la colonne age par des nombres entiers... Toujours pas.

2/ Je supprime tous les 'ages' ( qui ne sont pas des ages dans ma base mais des durées en heures) supérieur à 100... supérieur à 50... toujours pas

3/ Je réduis à moins de 1000 le nombre de lignes, à moins de 500... toujours pas.

4/ je convertis mes matricules en chaines de caractères... Toujours cette erreur 13.

Comme vous le constatez, j'ai des idées mais des compétences en VBA proches de 0!!!

Finalement, après réduction à moins de 300 lignes, ça fonctionne.

As tu une idée du probleme et de ce que je dois faire??
J'ajoute, qu'en réalité je n'ai pas 2 données à tranposer ( age +prénom) mais 6 :
-Intitulé qui est l'équivalent du prénom
-2 dates
-3 données numériques : 1 durée + 2 couts

Si tu peux m'aider, merci... Sinon, merci quand meme.

Sevaudrey
 

edelweisseric

XLDnaute Occasionnel
Re:passer de plusieurs lignes à une ligne par indi

Bonjour Sevaudrey
Bonjour à tous

Coucou me revoilou. Un petit voyage fait toujours du bien.

J'ai regardé un peu plus en profondeur !!! et je te propose quelque chose. J'espère que mon fichier ne sera pas vide, cette fois ci Lien supprimé
;)
Je ne l'ai pas tester sur 1000 lignes
Cordialement [file name=forhelp03.zip size=11986]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/forhelp03.zip[/file]
 

Pièces jointes

  • forhelp03.zip
    11.7 KB · Affichages: 22

Monique

Nous a quitté
Repose en paix
Re:passer de plusieurs lignes à une ligne par indi

Bonjour,

Matriciel mais court
(non conditionnel, on obtient '' quand la liste est épuisée) [file name=EnfantsSevaudrey.zip size=8155]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/EnfantsSevaudrey.zip[/file]
 

Pièces jointes

  • EnfantsSevaudrey.zip
    8 KB · Affichages: 26

sevaudrey

XLDnaute Nouveau
Re:passer de plusieurs lignes à une ligne par indi

edelweisseric écrit:
Bonjour Sevaudrey
Bonjour à tous

Coucou me revoilou. Un petit voyage fait toujours du bien.

J'ai regardé un peu plus en profondeur !!! et je te propose quelque chose. J'espère que mon fichier ne sera pas vide, cette fois ci Lien supprimé
;)
Je ne l'ai pas tester sur 1000 lignes
Cordialement [file name=forhelp03.zip size=11986]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/forhelp03.zip[/file]

Merci beaucoup mais....

je suis vraiment nulle!!! Dans ta macro, il y a des commentaires ce qui m'arrange fortement. Seul un détail me pose probleme. Mon tableau à transformer comporte 5280 lignes ( y c la ligne d'entete). J'ai essayé d'adapter ( en changeant la dimension du tableau et en me positionnant en ligne 5300 à la place de 30) mais j'ai toujours ce probleme ( erreur 9).
D'ailleurs si tu rajoute qq lignes à ton tableu tu auras le meme message tu auras le meme message. sais ce que je dois faire? Peux rajouter des commentaires à ta macro?

Merci

Sevaudrey
 

edelweisseric

XLDnaute Occasionnel
Re:passer de plusieurs lignes à une ligne par indi

Bonjour sevaudrey
Bonjour à tous

On arrive aux limites. Je m'explique : tu dis avoir 5300~ lignes cela fait autant de prénoms. Pour chaque matricule tu ne peux en avoir que 42 (pour 1 ligne : 42*6=252 cellules pour 256 ) sinon il faut faire un retour-ligne (brrrr...non pas de cela, enfin si il le faut) et pour 26 lettres cela nous donne 1092 prenoms => il y a un couic quelque part !!!!!!
Maintenant dans le fichier que je t'ai passé, tout est dans la déclaration de
'Dim tableau_lettre(26, 60)'
26 => 26 lettres donc de A à Z
60 => 10 prénoms par matricule avec 6 renseignements

Je te propose 2 choses :
soit tu essaies de modifier tout seul comme un grand, mais attention il y a d'autres lignes à corriger,
soit tu déposes ton fichier (attention aux données perso) et nous le regardons, quand je dis nous je ne me prend pas pour Louis XIV, restons modeste....

J'espère avoir été assez clair, n'hésite pas

A+

Cordialement
 
S

sevaudrey

Guest
Re:passer de plusieurs lignes à une ligne par indi

edelweisseric écrit:
Bonjour sevaudrey
Bonjour à tous

On arrive aux limites. Je m'explique : tu dis avoir 5300~ lignes cela fait autant de prénoms. Pour chaque matricule tu ne peux en avoir que 42 (pour 1 ligne : 42*6=252 cellules pour 256 ) sinon il faut faire un retour-ligne (brrrr...non pas de cela, enfin si il le faut) et pour 26 lettres cela nous donne 1092 prenoms => il y a un couic quelque part !!!!!!
Maintenant dans le fichier que je t'ai passé, tout est dans la déclaration de
'Dim tableau_lettre(26, 60)'
26 => 26 lettres donc de A à Z
60 => 10 prénoms par matricule avec 6 renseignements

Je te propose 2 choses :
soit tu essaies de modifier tout seul comme un grand, mais attention il y a d'autres lignes à corriger,
soit tu déposes ton fichier (attention aux données perso) et nous le regardons, quand je dis nous je ne me prend pas pour Louis XIV, restons modeste....

J'espère avoir été assez clair, n'hésite pas

A+

Cordialement

Merci de la rapidité de ta réponse.

Concernant le 1er point à savoir le nombre de prénom par matricule, ce n'est pas un probleme : je ne pense pas dépasser les 10/12 et aucun echance d'aller jusqu'à 42 donc pas de retour ligne... tout va bien.

Le point sur lequel il y a confusion ce sont les matricules : il ne s'agit pas des 26 lettres de l'alphabé mais e nombres compris entre 0 et 999 999 c'est pour ça qu'on peut arriver à 5300 lignes!!!

J'ai bien vu que tout venait de la déclaration mais j'y eu beau me pencher sur le truc et bidouiller, ça n'a pas marchait comme je voulais. J'ai essayé plein de truc. Du coup, cette 1ère possibilité est exclue.

Par contre, déposer mon fichier, ça me semble délicat. Oh, remarque, je vais le modifier modifier sans changer la forme, les formats et les valeurs extremes.

Le voila. La seule différence notable se situe au niveau des intitulés qui peuvent comporter jusqu'à une centaine de caractères.

Message édité par: sevaudrey, à: 13/04/2006 21:18
 

Statistiques des forums

Discussions
312 342
Messages
2 087 436
Membres
103 545
dernier inscrit
agent3