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 :

couper les donnes d'un colonne en 2


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut couper les donnes d'un colonne en 2
    j"ai les données sur colonne A en vertical comme ceci
    colonne A
    aa1
    aa2
    aa3
    aa4
    aa5
    j'aimerais couper en 2 pour avoir sur 2 colonnes
    colonne A colonne b
    aa1 aa2
    aa3 aa4
    aa5
    je ne sais pas comment coder çà en vba
    merci pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    exemple trivial à adapter

    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
    21
    22
    Option Base 1
    Sub toto()
    Dim Tabl(), TabRes(), Milieu As Long, i As Long, j As Long
    Tabl = Application.Transpose(Cells(1, 1).CurrentRegion.Value) ' adapter la feuille et la plage des données aspirées
    Milieu = UBound(Tabl) / 2                                     ' la moitié des données (sans gestion pair/impair)
    ReDim TabRes(Milieu + 1, 2)                                   ' le tableau final
    TabRes(1, 2) = "Colonne B"                                    ' écriture manuelle du titre de colonne
    j = 1                                                         ' compteur pour la colonne B
        For i = LBound(Tabl) To UBound(Tabl)                      ' boucle sur les données
            If i <= Milieu + 1 Then                               ' la première moitié dans la colonne A
                TabRes(i, 1) = Tabl(i)
            Else                                                  ' la seconde dans la colonne B
                j = j + 1
                TabRes(j, 2) = Tabl(i)
            End If
        Next i
     
        ' restitution sur une nouvelle feuille
        With ThisWorkbook.Worksheets.Add
            .Cells(1, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)).Value = TabRes
        End With
    End Sub
    fait à l'arrache, y'a probablement plus simple



    EDIT : et voilà quand on fait à l'arrache ! Je pensais qu'on faisait moitié/moitié or tu veux alterner une valeur sur 2

    voici, c'est presque identique

    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
    21
    22
    Option Base 1
    Sub toto()
    Dim Tabl(), TabRes(), i As Long, j As Long
    Tabl = Application.Transpose(Cells(1, 1).CurrentRegion.Value)
    Milieu = UBound(Tabl) / 2
    ReDim TabRes(Milieu + 1, 2)
    TabRes(1, 1) = Tabl(1)
    TabRes(1, 2) = "Colonne B"
    j = 2
        For i = LBound(Tabl) + 1 To UBound(Tabl)
            If i Mod 2 = 0 Then
                TabRes(j, 1) = Tabl(i)
            Else
                TabRes(j, 2) = Tabl(i)
                j = j + 1
            End If
        Next i
     
        With ThisWorkbook.Worksheets.Add
            .Cells(1, 1).Resize(UBound(TabRes, 1), UBound(TabRes, 2)).Value = TabRes
        End With
    End Sub

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    c'est vrai des fois c'est long comme code pour faire quelque chose de simple .
    mais bon je me contenterai de ton code .je ne pense pas qu'il y ait plus simple

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    autre proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Col$, debut As Byte, DL&, M&, Tabl, VA, i&, j&
        Col = "A": debut = 1:  DL = Cells(Rows.Count, Col).End(xlUp).Row:  M = Application.RoundUp(DL / 2, 0)
        ReDim Tabl(1 To M, 1 To 2)
        VA = Range(Cells(debut, Col), Cells(DL, Col)).Value
        For i = debut To DL Step 2
           j = j + 1
           Tabl(j, 1) = VA(i, 1): If i + 1 <= DL Then Tabl(j, 2) = VA(i + 1, 1)
        Next
        Cells(1, Col).Offset(, 3).Resize(UBound(Tabl, 1), UBound(Tabl, 2)) = Tabl
     End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Une autre idée (je ne sais pas si c'est plus rapide cependant ...) :
    1. Ecrire a sur une ligne sur 2 et b sur les autres lignes (en colonne B) --> utiliser AutoFill
    2. Filtrer sur les a et faire une copier-coller de la colonne A (dans une autre feuille)
    3. Filtrer sur les b et faire une copier-coller de la colonne A à côté du premier collage.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Par défaut
    pour joe il y a une erreur sur le ligne TabRes(i, 1) = Tabl(i) .je ne sais pas pourquoi
    le code de RyuAutodidacte est parfait.pas d'erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR XI] section detail - afficher les données sur plusieurs colonnes
    Par Flamby38 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/09/2007, 14h44
  2. Réponses: 4
    Dernier message: 23/05/2007, 11h07
  3. Réponses: 13
    Dernier message: 20/04/2007, 17h30
  4. Réponses: 8
    Dernier message: 19/04/2007, 19h41
  5. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20

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