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
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
A voir également:
- Loop macro excel - restructurer un fichier
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
7 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
29 févr. 2008 à 17:47
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.
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.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
29 févr. 2008 à 18:47
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 ?
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 ?
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
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
29 févr. 2008 à 19:13
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
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
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
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
29 févr. 2008 à 19:15
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.
J'ai mis sur la même feuille en colonne D le nouveau tableau tu pourras le coller ailleurs ensuite.
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.
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
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
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
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
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
29 févr. 2008 à 21:43
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.
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.
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
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
29 févr. 2008 à 22:16
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.
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
29 févr. 2008 à 18:03
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