[Excel]Passer une liste de ligne à colonne

Fermé
Klendos - 31 août 2005 à 14:46
 MM - 8 nov. 2007 à 17:22
Bonjour à tous,

J'ai une table excel qui à cette gueule la :


[code]Article Opé1 Temps1 Opé2 Temps2 .... Opé12 Temps 12
xxx FRA 10 USI 22 .... TOUR 25
yyy TOUR 15 ZAY 30 .... HUR 15
etc..
[/code]


Et je voudrais arriver à qqch comme cela :



[code]Article N° Opé Opé Temps
xxx 10 FRA 10
xxx 20 USI 22
.....
xxx 120 TOUR 25
yyy 10 TOUR 15
yyy 20 ZAY 30
....
yyy 120 HUR 15[/code]

J'ai fais une macro qui ne met en forme que la premiére ligne du fichier 1, et je n'arrive pas à la répéter pour toutes les autres ligne.


Est-ce que qqun peux m'aider pour arriver à mes fins???

Merci d'avance!
A voir également:

8 réponses

WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
31 août 2005 à 14:53
;-)

Fais voir ta macro....

;-)
0
k-lendos Messages postés 3 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 1 septembre 2005
31 août 2005 à 15:19
Range("A2").Select
Selection.Copy
Windows("InterfaceGamme.xls").Activate
ActiveSheet.Paste
Range("B2").Select
Application.CutCopyMode = False

ActiveCell.FormulaR1C1 = "10"
Range("B3").Select
ActiveCell.FormulaR1C1 = "20"
Range("B4").Select
ActiveCell.FormulaR1C1 = "30"
Range("B5").Select
ActiveCell.FormulaR1C1 = "40"
Range("B6").Select
ActiveCell.FormulaR1C1 = "50"
Range("B7").Select
ActiveCell.FormulaR1C1 = "60"
Range("B8").Select
ActiveCell.FormulaR1C1 = "70"
Range("B9").Select
ActiveCell.FormulaR1C1 = "80"
Range("B10").Select
ActiveCell.FormulaR1C1 = "90"
Range("B11").Select
ActiveCell.FormulaR1C1 = "10"
Range("B11").Select
ActiveCell.FormulaR1C1 = "100"
Range("B12").Select
ActiveCell.FormulaR1C1 = "110"
Range("B13").Select
ActiveCell.FormulaR1C1 = "120"
Range("D2").Select
Windows("DUBILAODB.xls").Activate
Range("C2").Select
Selection.Copy
Windows("InterfaceGamme.xls").Activate
ActiveSheet.Paste
Range("E2").Select
ActiveSheet.Paste
Range("G2").Select
Windows("DUBILAODB.xls").Activate
Range("E2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("InterfaceGamme.xls").Activate
Range("F2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Cut Destination:=Range("G2")
Range("G3").Select
Windows("DUBILAODB.xls").Activate
Range("H2").Select
Selection.Copy
Windows("InterfaceGamme.xls").Activate
Range("G3,D3").Select
Range("D3").Activate
ActiveSheet.Paste
Range("G3,D3,E3").Select
Range("E3").Activate
ActiveSheet.Paste
Range("G3").Select
Windows("DUBILAODB.xls").Activate
Range("J2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("InterfaceGamme.xls").Activate
ActiveSheet.Paste
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
31 août 2005 à 15:42
;-)

Houlà !! Que de lignes ! ;-)

Pour limiter les lignes, pense aux boucles FOR, pour éviter les "Activate", pense aux variables objets...

;-)
0
k-lendos Messages postés 3 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 1 septembre 2005
1 sept. 2005 à 11:39
Voici la macro que j'ai faite :


Sub transpose()

nbcol = 3  ' nombre de couples de données à lire  ope/tps
nbproduit = 4 ' nombre de produits

celluledepart = "C19" ' cellule de départ du tableau à remplir
cellulealire = "A2"  ' cellule de départ des données à parcourir


For prod = 0 To nbproduit
  For i = 0 To nbcol - 1
    Range(celluledepart).Offset(i + (prod * nbcol), 0).Value = Range(cellulealire).Offset(0 + prod, 0).Value
    Range(celluledepart).Offset(i + (prod * nbcol), 1).Value = 10 + 10 * i
    Range(celluledepart).Offset(i + (prod * nbcol), 2).Value = Range(cellulealire).Offset(0 + prod, 2 + (5 * i))
    Range(celluledepart).Offset(i + (prod * nbcol), 3).Value = Range(cellulealire).Offset(0 + prod, 4 + (5 * i))
  Next i
Next prod

End Sub


Mais je n'arrive à faire pointer cellualire et celluledepart dans 2 feuilles différentes.

Merci pour votre aide.
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
1 sept. 2005 à 12:00
;-) Bon, va là : http://domlevinfo.free.fr

Je vais te faire ça, tu comprendras mieux si c'est direct dans ton xls à toi et ça te feras un petit cours VBA...

;-)
0
G.David Messages postés 768 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 1 juin 2020 203 > WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008
25 mars 2006 à 00:07
Salut WhiteFang
le site que tu indique il est sur un serveur 56K en suisse ou c'est pour qu'on puisse faire un café qu'il est si lent ?2 minutes pleinne pour aller de l'accueil a la page traduction j'ai referme dare dare
Cordialement
G.David
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204 > G.David Messages postés 768 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 1 juin 2020
25 mars 2006 à 08:30
;-) Je viens de faire le test... 20 secondes top chrono pour accéder, et la trad, c'est "Voilà" qui fait ça pour moi (pour dire que même en utilisant un service en ligne de trad, cela reste encore "acceptable")... Reste à te poser une question : C'est quoi ta machine ? ;-))))))))
0
G.David Messages postés 768 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 1 juin 2020 203 > WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008
25 mars 2006 à 18:41
Salut
1200ghz 512Mo Adsl 2Mo
si le probleme est la machine c'est que les pages sont plutot lourdes non?
sur CCM c'est instantané (moins de 20 secondes là je ne regarde pas ma montre) dommage ça m'interressais au filing et si j'ai bien interpreté ce qui etait en haut de la page j'etait le seul visiteur
Cordialement
G.David
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204 > G.David Messages postés 768 Date d'inscription vendredi 21 novembre 2003 Statut Membre Dernière intervention 1 juin 2020
25 mars 2006 à 20:03
Salut... Si les pages étaient lourdes, tu ne serais pas le seul à avoir ce genre de problème... Dans la mesure où 1 seul utilisateur à un problème alors que les autres n'en ont pas, on a tendance à penser que cela vient de sa machine... Non ? Maintenant, si ta machine va bien et que tu n'as ce genre de problème qu'en venant visiter cet espace, bon, je n'ai pas d'explication à ça... Je sais que l'hébergeur à eu un problème de serveur, mais bon, moi, avec mon petit P3 850Mhz, ça roule... Ou tu n'as vraiment pas de bol et tu tombes pile poil au moment où les serveurs cafouillent... Mais bon, je n'ai globalement pas d'explication rationnelle à te donner...

En attendant, pense bien à regarder ta barre d'état (du browser), pour voir QUI ou QUOI est long à charger...

Cordialement
0
k-lendos Messages postés 3 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 1 septembre 2005
1 sept. 2005 à 12:05
Voici au final ma macro:

Sub transpose()

nbcol = 12  ' nombre de couples de données à lire  ope/tps
nbproduit = 18 ' nombre de produits


nomclasseur = "DUBILAODB1.xls" ' nom du classeur où se trouve les données
nomfeuille = "Feuil1" ' nom de la feuille

celluledepart = "C19" ' cellule de départ du tableau à remplir
cellulealire = "A2"  ' cellule de départ des données à parcourir


For prod = 0 To nbproduit
  For i = 0 To nbcol - 1
    Range(celluledepart).Offset(i + (prod * nbcol), 0).Value = Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 + prod, 0).Value
    Range(celluledepart).Offset(i + (prod * nbcol), 1).Value = 10 + 10 * i
    Range(celluledepart).Offset(i + (prod * nbcol), 2).Value = Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 + prod, 2 + (5 * i))
    Range(celluledepart).Offset(i + (prod * nbcol), 3).Value = Workbooks(nomclasseur).Worksheets(nomfeuille).Range(cellulealire).Offset(0 + prod, 4 + (5 * i))
  Next i
Next prod

End Sub


Merci à tous pour votre aide.
0
WhiteFang Messages postés 2056 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 15 février 2008 204
1 sept. 2005 à 12:23
;-) Reste encore les variables objet à explorer, l'adressage en mode texte à passer en numérique, et ça commencera à le faire... Question écriture, j'entends, parce que si ça fonctionne, rien à dire ;-)
0

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

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 mars 2006 à 05:00
Bonsoir,

si tu as besoin de résultat et ce n'est pas la méthode qui compte, il y a d'autres façons à le faire. Par exemple avec un script Perl.

Enregistrer sous format txt (séparateur tabulation), un petit script, ensuite ouverture de fichier txt avec excel et voilà.

Script

#! /usr/bin/perl

use warnings;
use strict;

my %txt;
my $i = 0;

while(<DATA>){
my ($cle,$val)=split /t/,$_,2;
$txt{$cle} = [ /w+td+/g ];
}

for (keys %txt){
for my $l (@{$txt{$_}}){
$i += 10;
print "$_t$it$ln";
}
$i=0;
}


# après END sont les colonnes de ton classeur
# sauvegardé en format txt, séparateur tabulation
# execution : script > res_excel.txt
# ensuite ouvrir fichier txt avec excel
__END__
xxx FRA 10 USI 22 ABC 50 FRA 10 USI 22 ABC 50 FRA 10 USI 22 ABC 50 FRA 10 USI 22 ABC 50
YYY TOUR 10 ZAY 22 MAC 50 LEN 10 TOC 22 BIL 50 DOR 10 LUC 22 MIN 50 TOR 10 LES 22 MOC 50

Et le résultat (donc un fichier txt qui ouvert avec excel donne ce que tu veux obtenir)

[lamitest@localhost corbeille]$ perl ccm_excel.pl > ccm_excel_res.txt
[lamitest@localhost corbeille]$ cat ccm_excel_res.txt
xxx 10 FRA 10
xxx 20 USI 22
xxx 30 ABC 50
xxx 40 FRA 10
xxx 50 USI 22
xxx 60 ABC 50
xxx 70 FRA 10
xxx 80 USI 22
xxx 90 ABC 50
xxx 100 FRA 10
xxx 110 USI 22
xxx 120 ABC 50
YYY 10 TOUR 10
YYY 20 ZAY 22
YYY 30 MAC 50
YYY 40 LEN 10
YYY 50 TOC 22
YYY 60 BIL 50
YYY 70 DOR 10
YYY 80 LUC 22
YYY 90 MIN 50
YYY 100 TOR 10
YYY 110 LES 22
YYY 120 MOC 50
[lamitest@localhost corbeille


lami20j
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 mars 2006 à 05:28
Dans le script il y a des erreurs à cause de non affichage des antislashes.
Le script correct https://www.cjoint.com/?dAfCzHTPth
0
Coucou,

En regardant l'aide de excel :

"Transposer des lignes en colonnes ou des colonnes en lignes"
Pour que les données de la première ligne de la zone de copie s'affichent dans la colonne de gauche de la zone de collage, et que les données de la colonne de gauche s'affichent sur la première ligne, procédez comme suit :

Sélectionnez les cellules dont vous voulez inverser l'orientation.
Cliquez sur Copier .
Sélectionnez la cellule supérieure gauche de la zone de collage. Cette dernière doit être située à l'extérieur de la zone de copie.
Cliquez sur la flèche à droite du bouton Coller , puis cliquez sur Transposer.



Bon courage.

kéké, Administrateur de Magdales.
0
Bonjour,

Je n'aurai qu'un mot : MERCI keke !!!! :D
A chaque fois je rame pour retrouver la manière de faire, et là tout est si simple et limpide :)))

MERCI BEAUCOUP, ça va juste me simplifier énormément la vie.

Bravo pour avoir trouvé "transposé" je n'y avais jamais pensé.

Dungan
0
Bonjour,
Peux-ton utiliser la fonction transpose() pour ce genre d'opération ?
0