Loop macro excel - restructurer un fichier

Résolu/Fermé
Veccio - 29 févr. 2008 à 13:11
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 29 févr. 2008 à 22:16
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
A voir également:

7 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
29 févr. 2008 à 17:47
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.
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 18:03
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
29 févr. 2008 à 18:47
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 ?
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 18:50
Désolé, j'avais faut une jolie mise en page, mais le post ne l'a pas retenu :-)

C bien ça, l'année 1 = 1806, qui comprend les données pour les 105 premiers ages.
Ensuite, l'année 2, reprend les 105 suivants pour l'année 1807,

etc, pendant deux cent ans encore !

Veccio
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
29 févr. 2008 à 19:13
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
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 19:37
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
29 févr. 2008 à 19:15
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.
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 19:32
Hello,

Merci les gars pour votre aide, me voilà en possession d'un petit code, à partir duquel je peux apprendre et modifier (les info cellules que je donnais n'étaient pas toutes les bonnes)...

Mais avec ce que vous m'avez filé, ça devrait amplement suffire ...

Merci à vous,

Bon week-end,

Veccio
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 19:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
29 févr. 2008 à 21:43
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.
0
Veccio Messages postés 7 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 24 mars 2008
29 févr. 2008 à 21:52
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
29 févr. 2008 à 22:16
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

0