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 :

Passer de données sous forme matricielle à des données en lignes [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé 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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut Passer de données sous forme matricielle à des données en lignes
    Bonjour,

    J'ai un gros problème auquel je suis confronté. J'ai fait un début de macro pour compiler des données et avoir un résultat sous forme matriciel.
    Problème, maintenant je souhaiterai faire passer cette forme matricielle à des mêmes données que je duplique mais en ligne.
    Je suis une chèvre en VBA, du coup là je suis perdu...
    En pièce jointe un exemple qui vous parlera mieux que ce long et ennuyeux discours.

    D'avance un grand merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Voilà une macro qui te fera ça :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Public Sub test()
        Dim wsOrigine As Worksheet
        Dim wsCible As Worksheet
     
        Set wsOrigine = Worksheets("Origine")
        Set wsCible = Worksheets("Résultat désiré")
     
        wsCible.Range("A2:N65000").ClearContents
     
        Dim iOr, iCib As Integer
        Dim j As Integer
     
        iOr = 2
        iCib = 2
     
        While wsOrigine.Cells(iOr, 1) <> ""
     
            For j = 1 To 5
                'Données communes
                wsCible.Range(wsCible.Cells(iCib, 1), wsCible.Cells(iCib, 12)).Value = wsOrigine.Range(wsOrigine.Cells(iOr, 1), wsOrigine.Cells(iOr, 12)).Value
                'Compte
                wsCible.Cells(iCib, 13).Value = wsOrigine.Cells(1, 12 + j).Value
                'Montant
                wsCible.Cells(iCib, 14).Value = wsOrigine.Cells(iOr, 12 + j).Value
     
                iCib = iCib + 1
            Next j
     
            iOr = iOr + 1
     
        Wend
     
    End Sub

  3. #3
    Membre confirmé 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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Bonjour ZebreLoup,

    Merci pour ton code, qui marche à merveille dans le sens où il répond parfaitement à mon besoin !
    Seul problème maintenant, j'ai environ 14500 lignes de départ, ce qui tu me l'accordes, doit me faire environ 72500 lignes à l'arrivée. Je travaille sous Excel 2007 donc je ne devrais avoir aucun problème pour compiler ces données. Lors, du premier test, la macro s'est arrêté aux envitons de la 32000ème ligne en me mettant le message "Overflow".
    Qu'est-ce que cela signifie ? Comment parer à ce problème ?
    D'avance merci !

    Voilà le code de ZebreLoup adapté à mes feuilles :

    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
    23
    24
        With Sheets("Compiled Data")
     
        MSDRx = 2
        FDRx = 2
     
        While .Cells(MSDRx, 1) <> ""
     
            For x = 1 To 5
                'Données communes
                Sheets("Final Data").Range(Sheets("Final Data").Cells(FDRx, 1), Sheets("Final Data").Cells(FDRx, 12)).Value = .Range(.Cells(MSDRx, 1), .Cells(MSDRx, 12)).Value
                'Compte
                Sheets("Final Data").Cells(FDRx, 13).Value = .Cells(1, 12 + x).Value
                'Montant
                Sheets("Final Data").Cells(FDRx, 14).Value = .Cells(MSDRx, 12 + x).Value
     
                FDRx = FDRx + 1
            Next x
     
     
            MSDRx = MSDRx + 1
     
        Wend
     
        End With
    La macro s'arrête toujours lorsque MSDRx = 6555 et FDRx = 32767

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Essaie en déclarant MSDRx et FDRx en Long plutôt qu'en Integer. Je pense que c'est un dépassement de capacité de l'entier, donc un entier long est nécessaire.

    Après vérification, la valeur maximale d'un entier est 32 767. Donc c'est surement ça le problème.

  5. #5
    Membre confirmé 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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Points : 478
    Points
    478
    Par défaut
    Mais oui, ça doit être ça !! Erreur de débutant Runsh...
    Merci beaucoup ZebreLoup, tu m'as rendu un ENORME service en me poposant tes solutions !
    Bonne journée !

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

Discussions similaires

  1. [XL-2007] Passer de données sous forme matricielle à du ligne à ligne
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/11/2011, 16h57
  2. jsp+afficher des données sous forme de graphes
    Par oasma dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/03/2007, 13h24
  3. Générer des données sous forme de graphiques (comme excel)
    Par matterazzo dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 26/10/2005, 19h21
  4. renvoyer des données sous forme de XML hiérarchique
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/01/2005, 18h06
  5. Exporter des données sous forme de requetes
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2004, 17h27

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