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 :

Passez d'une matrice à un tableau à deux colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Passez d'une matrice à un tableau à deux colonnes
    (dingue comme ce titre ne veut rien dire...)

    Bonjour !

    Un exemple vaut mieux qu'un long discours. Je joins donc ma fameuse matrice en pièce jointe (encore merci à Patrice s'il passe par là !). Donc, j'ai un tableau qui recense en ligne des comptes et en colonne mes différentes sections analytiques, avec pour chaque "croisement" un montant (onglet "Start"). Mon but : pour chacune des colonnes de section analytiques, copier la colonne de compte et les valeurs correspondantes puis les coller dans un autre l'onglet (ici :"End"). Dans cet onglet, j'ai commencé à le faire pour les trois premières colonnes pour l'exemple.

    Pouvez-vous m'aider avec du code SVP ?

    Remarque 1 : Le nombre de colonnes de ma matrice peut bouger.
    Remarque 2 : Il est peut être plus simple de dupliquer x fois la colonne des comptes et déplacer les colonnes de montant les unes à la suite des autres dans l'onglet de départ ? Auquel cas le résultat étant le même, c'est pareil pour moi.
    Remarque 3 : Hier j'ai commandé un bouquin de VBA sur un site, j'espère ne plus avoir à vous embêter bientôt...

    Vous remerciant par avance, vous souhaitant une bonne journée et vous saluant bien bas.

    Runsh (alias La Chèvre du VBA)

    PS: Finalement, j'ai un exemple ET un long discours

  2. #2
    Membre chevronné Avatar de delphine35
    Femme Profil pro
    Analyste BO
    Inscrit en
    Novembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste BO

    Informations forums :
    Inscription : Novembre 2009
    Messages : 265
    Par défaut
    Voici :

    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
    Sub Macro1()
     
    Dim WStart
    Dim WEndd
    Dim i, j, w
     
    Set WStart = Worksheets("Start")
    Set WEndd = Worksheets("End")
     
    w = 2
       For j = 2 To WStart.Cells(1, 1).End(xlToRight).Column
          For i = 2 To WStart.Cells(1, 1).End(xlDown).Row
     
             WEndd.Cells(w, 1) = WStart.Cells(i, 1)
             WEndd.Cells(w, 2) = WStart.Cells(i, j)
             w = w + 1
     
     
          Next i
        Next j
     
    End Sub

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Une autre proposition copiant colonne par colonne
    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
    Dim LastLig As Long, j As Long
    Dim Plage As Range
    Dim i As Integer
     
    Application.ScreenUpdating = False
    With Sheets("Start")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        i = 2: j = 2
        Do While .Cells(1, i) <> ""
            Set Plage = Union(.Range("A2:A" & LastLig), Intersect(.Rows(2 & ":" & LastLig), .Columns(i)))
            Plage.Copy Sheets("End").Range("A" & j)
            j = j + LastLig - 1
            i = i + 1
            Set Plage = Nothing
        Loop
    End With
    Sheets("End").Range("A1:B1").Value = Array("Compte", "Montant")

  4. #4
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Delphine35, mercatog,

    Un grand merci à vous deux, les solutions proposés par chacun m'offrent le résultat voulu. J'ai essayé avec des matrices comportant plus ou moins de colonnes et de lignes, et ça fonctionne à merveille.
    Me reste plus qu'à comprendre maintenant...
    Encore merci d'avoir pris le temps de vous pencher sur mon souci.

    Bonne fin de journée !

    Runsh

    J'ai oublié une chose très importante dans mon "cahier des charges". J'aurais besoin également de dupliquer le compte analytique à chaque fois, en plus des comptes et des montants (je remets le fichier avec le résultat voulu en copie) SVP.
    Désolé pour la perte de temps occasionné...

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans le même ordre d'idée
    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
    Dim LastLig As Long, j As Long
    Dim Plage As Range
    Dim i As Integer
     
    Application.ScreenUpdating = False
    With Sheets("Start")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        i = 2: j = 2
        Do While .Cells(1, i) <> ""
            Set Plage = Union(.Range("A2:A" & LastLig), Intersect(.Rows(2 & ":" & LastLig), .Columns(i)))
            Plage.Copy Sheets("End").Range("A" & j)
            Sheets("End").Range("C" & j & ":C" & j + LastLig - 2).Value = .Cells(1, i).Value
            j = j + LastLig - 1
            i = i + 1
            Set Plage = Nothing
        Loop
    End With
    With Sheets("End")
        .Columns(3).Cut
        .Columns(2).Insert
        .Range("A1:C1").Value = Array("Compte", "Section", "Montant")
    End With

  6. #6
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour mercatog,

    Un simple mot : merci !
    C'est exactement ce que j'espérais. Mes excuses pour mal avoir formulé mon besoin dès le début...
    Vous me faites gagner un précieux temps dans mon travail.
    Maintenant à moi de comprendre comment elle fonctionne car c'est complexe pour un néophyte comme moi...

    Une bonne journée et un bon WE !

    Cordialement,

    Runsh

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

Discussions similaires

  1. [WD-2002] Rechercher/remplacer des chaînes à partir d'un tableau à deux colonnes
    Par LondonLondres dans le forum VBA Word
    Réponses: 2
    Dernier message: 28/11/2011, 00h15
  2. Réponses: 4
    Dernier message: 28/12/2010, 16h40
  3. [Débutant] Créer une matrice à partir de deux vecteurs
    Par vampirella dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/07/2010, 09h56
  4. Conversion d'une matrice en tableau de cellules
    Par wawrint dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2008, 14h55
  5. Tri de tableau à deux colonnes
    Par dhoorens dans le forum C++
    Réponses: 3
    Dernier message: 08/08/2007, 00h21

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