Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 17h58   #1
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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
Type de fichier : xlsx passer_de_matrice_à_tab_en_lignes.xlsx (11,7 Ko, 1 affichages)
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 18h40   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
Voilà une macro qui te fera ça :

Code :
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2011, 10h12   #3
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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 :
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
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 10h47   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 861
Points : 1 861
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.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2011, 11h02   #5
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
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 !
__________________
Cordialement,

Runsh
Runsh63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h46.


 
 
 
 
Partenaires

Hébergement Web