IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer de nouvelles colonnes à partir d'une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Créer de nouvelles colonnes à partir d'une ligne
    Bonjour à tous,

    Voila, j'ai un fichier excel qui contient une ligne de 25256 enregistrements.
    Je souhaiterais faire une une macro qui me permette de déplacer ces enregistrements par tranche de 154 dans la colonne d'à côté.
    Par exemple (par tranche de 3 ici):

    1 obtenir 1 3 4...
    6 obtenir 6 6 3...
    4 obtenir 4 3 4...
    3
    6
    3

    4
    3
    4

    ....
    J'ai commencé à faire une macro (enregistrement auto) qui coupe
    3
    6
    3
    et qui va le mettre dans la colonne B, mais après comment lui dire de continuer en colant à la colonne C, puis D....
    Il faut peut-être une incrémentation ou un test de colonne vide mais je butte.

    Merci pour votre aide.
    Julien

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Bonjour,


    Voila, j'ai un fichier excel qui contient une ligne de 25256 enregistrements
    Je pense que tu voulais plutot dire une colonne avec 25256 lignes d'enregistrements
    Je ne sais pas cela convient a ce que tu cherches, je pense que ca se rapproche et je suis meme sur qu'il y a un moyen plus joli de le coder mais ca marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
     
        Dim i As Integer ' numero de ligne
        Dim j As Integer ' numero de colonnes
     
        j = 2 ' colonne B
     
        For i = 1 To 25256 ' nombre de lignes
     
            Range(Cells(i, 1), Cells(i + 154, 1)).Copy
            Cells(1, j).PasteSpecial
            j = j + 1
            i = i + 154
        Next i
     
    End Sub
    Bien sur le code est a adapter pour ton cas.
    par contre si tu veux tu peux remplacer copy par cut pour que les valeurs ne soit plus la.

    @ +

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'allais me lancer quend j'ai vu ta réponse... C'est ok mais j'aurais plutôt mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NoCol = 2
    For i = 155 To 25256 Step 154
         Range(Cells(1, NoCol), Cells(154, NoCol)).Value = Range(Cells(i, 1), Cells(i + 154 - 1, 1)).Value
         NoCol = NoCol + 1
    Next

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Salut ouskel'n'or,

    Je me doutais bien qu'il y avait un moyen "plus mieux " de faire ca
    Je viens de decouvrir "step", au moins je ne serais pas venu pour rien aujourd'hui

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je pense que ton code est néanmoins meilleur que le mien, car 25256 n'est pas un multiple de 154. Par contre, si on met remplace 25256 par 25332, ça ne changera rien au résultat mais il n'y aura pas de bug
    Je suis quand même content d'avoir appris quelque chose à quelqu'un aujourd'hui
    A+
    Bonne soirée

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par da991319 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub test()
     
        Dim i As Integer ' numero de ligne
        Dim j As Integer ' numero de colonnes
     
        j = 2 ' colonne B
     
        For i = 1 To 25256 ' nombre de lignes
     
            Range(Cells(i, 1), Cells(i + 154, 1)).Copy
    'Si j'ai bien compris les lignes sont transposées en colonnes ! Il faudrait 
    'peut-être complèté la copie par...
     
            Cells(1, j).PasteSpecial Paste:=xlAll, Operation:=xlNone, _  
            SkipBlanks:=False , Transpose:=True
            j = j + 1
            i = i + 154
        Next i
     
    End Sub
    Bien sur le code est a adapter pour ton cas.
    par contre si tu veux tu peux remplacer copy par cut pour que les valeurs ne soit plus la.
    A voir !
    A+

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci à vous deux, ça marche très bien.

    Je me suis apperçu qu'après avoir obtenu ceci (exemple) grace à votre aide :

    1 obtenir 1 3 4...
    6 obtenir 6 6 3...
    4 obtenir 4 3 4...
    3
    6
    3
    4
    3
    4
    ....

    il faut maintenant que j'inverse l'ordre par colonne, c'est-à-dire (exemple) :
    1 2 6... obtenir 4 3 4...
    6 6 3... obtenir 6 6 3...
    4 3 4... obtenir 1 2 6...

    Merci pour votre aide,
    Julien

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Tu veux que les données dans les colonnes soient inversées ? que la dernière soit en ligne 1 ?
    Si c'est ca tu doit employé la formule de Ouskel'n'or.
    A+

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai bien peur que mon code ne soit pas adapté pour faire ça... Par contre, si tu peux faire ça en deux temps, tu as une solution un peu plus tordue.
    Précise un point. C'est une fois répartie dans les colonnes adjacentes que tu veux inverser l'ordre des nombres ou c'est les inverser depuis la dernière valeur de ta colonne 1 ?
    Dit autrement : tu veux partir de 25256 et inverser toutes tes valeurs ou tu ne veux les inverser qu'une fois transférées dans l'ordre dans les colonnes ?
    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai réussi grâce à vous à créer une macro qui marche pour faire cela, mais certainement pas la plus efficace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub MNT_ASCII_Inverse()
    '
    ' MNT_ASCII_Inverse Macro
    ' Macro enregistrée le 10/10/2007 par
    '
        Dim i As Integer ' numero de ligne
        Dim j As Integer ' numero de colonnes
        Dim k As Integer
     
        For j = 1 To 164 'Car j'ai 164 colonnes maintenant
            k = 310         ' JE COLLE à 2*154 +2 pour être un pelus large de 2 lignes
        For i = 1 To 154
            Cells(i, j).Copy
            Cells(k, j).PasteSpecial
            k = k - 1
        Next i
        Next j
     
    End Sub
    Merci pour votre aide,
    @ +
    Julien

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    comme ca

    en recopiant la cellule sur le nombre de colonnes spécifié dans paquet
    Fichiers attachés Fichiers attachés
    Elle est pas belle la vie ?

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut

    J'avais pensé à ça mais ai renoncé ne sachant pas par quel bout le prendre

Discussions similaires

  1. Supression de deux colonnes à partir d'une ligne donnée
    Par sab_info dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/05/2013, 12h30
  2. créer des nouvelles colonnes à partir de colonnes existantes
    Par lenorsk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2012, 12h42
  3. [XL-2007] [Débutant] Créer un nouveau classeur à partir d'une ligne d'un tableau
    Par DerJul dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 04/07/2011, 14h53
  4. Réponses: 1
    Dernier message: 10/10/2008, 23h29
  5. Créer un nouvel onglet à partir d'une liste déroulante
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/06/2007, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo