Loop macro excel - restructurer un fichier
Résolu
Veccio
-
gbinforme Messages postés 14930 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14930 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un petit souci, et je n'y connais rien en macro.
J'ai une série de tables de mortalité qui se succèdent de haut en bas. J'ai donc les de 0 à 106 ans pour l'année 1806, en dessous j'ai de 0 à 106 ans pour l'année 1807, etc etc, jusqu'en bas de mon classeur.
J'aimerai transposer le tout pour avoir les valeurs par âges et années disposées comme suit :
une colonne pour les âges et en ligne les différentes années, les valeurs du tableau ainsi formé représentent les taux de mortalité observés de 0 à 106 ans de 1806 à 1997.
Mon problème est d'arriver à dire à la macro de prendre les valeurs initiales dans la colonne C 106 ans par 106 ans (pour chaque année) et des les copier ensuite l'une à la suite de l'autre, à l'horizontale disons, de gauche à droite, au lieu de bas en haut.
Pouvez vous m'aider ... je n'ai vraiment pas envie de me taper tout ça à la main !
Merci
Veccio
J'ai un petit souci, et je n'y connais rien en macro.
J'ai une série de tables de mortalité qui se succèdent de haut en bas. J'ai donc les de 0 à 106 ans pour l'année 1806, en dessous j'ai de 0 à 106 ans pour l'année 1807, etc etc, jusqu'en bas de mon classeur.
J'aimerai transposer le tout pour avoir les valeurs par âges et années disposées comme suit :
une colonne pour les âges et en ligne les différentes années, les valeurs du tableau ainsi formé représentent les taux de mortalité observés de 0 à 106 ans de 1806 à 1997.
Mon problème est d'arriver à dire à la macro de prendre les valeurs initiales dans la colonne C 106 ans par 106 ans (pour chaque année) et des les copier ensuite l'une à la suite de l'autre, à l'horizontale disons, de gauche à droite, au lieu de bas en haut.
Pouvez vous m'aider ... je n'ai vraiment pas envie de me taper tout ça à la main !
Merci
Veccio
Configuration: Windows XP Firefox 2.0.0.12
7 réponses
-
bonjour
Tu n'as pas besoin de macro.
Tu crées une nouvelle feuille : menu insertion / feuille
Tu sélectionnes ton tableau actuel puis tu fais "copier"
Tu vas sur la nouvelle feuille et en A1 tu fais clic droit "collage spécial"
Dans la fenêtre tu coches "tout" en haut et "transposé" en bas puis clic sur "OK"
Cela devrait correspondre à ce que tu veux faire.-
Bonjour,
Merci pour ton aide, mais ça, je le connais quand même, et ça ne m'est pas utile du tout ...
Je me réexplique, plus clairement, j'aimerais envoyer un fichier, mais je ne pense pas que ça soit autorisé sur le site.
Alors voilà :
ma table est structurée comme ceci :
Age
0 (ligne 1) - info en colonne 2 (1)
.
.
105 (ligne 106) - info en colonne 2 (2)
0 (ligne 107) - info en colonn 2 (3)
.
.
105 (ligne 112) - info en colonne 2 (4)
etc....
et moi je veux :
Age Année 1 Année 2
0 (1) (3)
.
.
105 (2) (4)
Peut-être c plus clair maintenant.
Merci en tous cas,
Veccio
-
-
bonjour
D'accord, je n'avais pas bien compris ton explication...
Age Année 1 Année 2
Les années, tu les prends où ?
Année 1 = 1806
Année 2 = 1807
etc ? -
Bonjour,
il y a peu j'ai fait une macro pour un pb similaire.
Regarde mais je pense qu'en inserant une colonne où tu inscris l'année tu devrais obtenir ce que tu veux.
Clique sur le bouton et regarde le résultat sur cet exemple.
http://www.cijoint.fr/cjlink.php?file=cj200802/cij2533805725918.xls
A moins que gb que je salue au passage ait fait un truc plus adapté
eric-
Une dernière chose, vous avez pas un bon petit site ou un bon bouquin à me conseiller, pour apprendre tout ça.
Je suis occupé sur une grosse recherche et des macros dans le genre, je vais devoir en pondre un petit paquet si je veux gagner du temps ... alors autant que je me forme.
De préférence un bouquin, je suis encore du genre papier ;-))
Veccio
-
-
bonjour
Si les intervalles sont bons car tu as parlé de 106 au début puis de 105, la macro suivante à introduire dans la feuille ou un module devrait faire ta transposition.Public Sub transpose() Dim l As Long Dim j As Long Dim an As Long Dim c As Integer c = 4: an = 1806 Cells(1, c).Value = "age" For j = 2 To 107 Cells(j, c).Value = j - 2 Next j j = 2: c = c + 1: Cells(1, c).Value = an For l = 1 To Cells(65536, 1).End(xlUp).Row Cells(j, c).Value = Cells(l, 2).Value j = j + 1 If j > 107 Then c = c + 1 an = an + 1 Cells(1, c).Value = an j = 2 End If Next l End Sub
J'ai mis sur la même feuille en colonne D le nouveau tableau tu pourras le coller ailleurs ensuite.-
-
Et je vous en remet un petite dernière, avant d'être un minimum autonome, ça me permettrait de bosser tout le week-end :
Ma table, ma matrice, est donc maintenant structurée comme suit :
- la première colonne donne les âges de 0 à 105 ans (commence à la ligne 2)...
- la premi!re ligne (commence à la colonne B) donne les années (1806-1997)
- et les données qui croisent le tout sont les taux de mortalité que j'ai reconstruit avec votre aide.
Maintenant, j'aimerais encore une fois restructurer (je donne pour l'exemple, parce qu'il y a des calculs à faire entre les deux), pour faire simple :
la première case de taux qui m'inétéresse est donc : B2, et je voudrais décomposer B2 et ses amies en trois colonnes :
année (1806)/age(O)/taux(B2)
année (1806)/age(1)/taux(B3),
etc, pour chaque âge, et chaque année, en colonne qui se suivent de haut en bas cette fois (on y revient) ...
Désolé, mais je ne sais pas trop le genre d'info qu'il vous faut pour régler ça, susi dispo au cas où ...
Si vous vous ennuyez, merci de prendre un petite minute pour bosser là-dessus,
Bye,
Veccio
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
bonjour
Laisse moi te dire que ton idée n'est pas judicieuse car tu as actuellement 193 colonnes que tu veux multiplier par 3.
Cela va faire 580 colonnes et Excel est limité à 256 (ou 512 pour 2007 je crois) et donc cela ne seras pas possible...
Par contre, je ne sais pas ce que tu envisageais de faire avec mais comme tes données sont existantes tu peux sans souci les utiliser avec des formules de concaténation ou autres. -
Encore un fois, on s'est mal compris :
je ne parle pas de milliers de colonnes, mais seulement de trois. Les lignes, par contre, vont être de 106 X (1997-1806).
Je sais que ça peut paraître bidon, mais je dois en fait appliquer, entre les deux étapes pour lesquelles j'ai besoin d'aide, une méthode particulière qui suppose que je dispose de la première matrice (de ce 'matin') ... et puis, je dois restructurer les résultats de cette matrice en un fichier, un peu comme l'original donc, de trois colonnes (année/age/taux) pour les inclure dans un programme SPSS ...
Tu vois un peu ?
Veccio -
bonjour
Effectivement ce n'est pas ainsi que j'avais compris "je voudrais décomposer B2 et ses amies en trois colonnes : "
Pour reconstituer ta matrice, une petite macro qui met la matrice en A B C et comme tu maîtrise je ne pense pas que cela va te poser de souci.Public Sub matrice() Dim l As Long Dim j As Long Dim c As Integer Cells(1, 1).Resize(1, 4).EntireColumn.Insert l = 0: c = 6 Do For j = 2 To 107 l = l + 1 Cells(l, 1).Value = Cells(1, c).Value Cells(l, 2).Value = Cells(j, 5).Value Cells(l, 3).Value = Cells(j, c).Value Next j c = c + 1 Loop While Cells(1, c).Value <> "" End Sub