[Excel]Passer une liste de ligne à colonne

Klendos -  
 MM -
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!

8 réponses

  1. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-)

    Fais voir ta macro....

    ;-)
    0
    1. k-lendos Messages postés 3 Statut Membre
       
      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
  2. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-)

    Houlà !! Que de lignes ! ;-)

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

    ;-)
    0
  3. k-lendos Messages postés 3 Statut Membre
     
    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
    1. WhiteFang Messages postés 2063 Statut Membre 204
       
      ;-) 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
    2. G.David Messages postés 790 Statut Membre 203 > WhiteFang Messages postés 2063 Statut Membre
       
      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
    3. WhiteFang Messages postés 2063 Statut Membre 204 > G.David Messages postés 790 Statut Membre
       
      ;-) 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
    4. G.David Messages postés 790 Statut Membre 203 > WhiteFang Messages postés 2063 Statut Membre
       
      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
    5. WhiteFang Messages postés 2063 Statut Membre 204 > G.David Messages postés 790 Statut Membre
       
      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
  4. k-lendos Messages postés 3 Statut Membre
     
    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
    1. WhiteFang Messages postés 2063 Statut Membre 204
       
      ;-) 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Dans le script il y a des erreurs à cause de non affichage des antislashes.
      Le script correct https://www.cjoint.com/?dAfCzHTPth
      0
  7. keke
     
    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
  8. Dungan
     
    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
  9. MM
     
    Bonjour,
    Peux-ton utiliser la fonction transpose() pour ce genre d'opération ?
    0