Macro pour tableau

Fermé
fyftyone - Modifié par fyftyone le 2/07/2013 à 15:40
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 3 juil. 2013 à 11:45
Bonjour,

Voilà, j'ai un petit soucis de macro sous excel.
Premièrement, je n'y connais rien en vb. :)

Alors j'ai un tableau avec des valeurs.

Ce que je souhaiterais, c'est transformer ce tableau en 3 colonnes.

Les colonnes sont mes positions en x, mes lignes mes valeurs en y et les valeurs de la cellule sont mes valeurs en Z.

Ce que je souhaiterais, c'est donc faire trois colonnes : x y z.

Autrement dit, si ma valeur de la cellule C5 est 36, je souhaiterais que mon nouveau tableau indique 3 5 36.

Est-ce compréhensible? (Sachant que mon tableau fait environ 768 colonnes sur 800 lignes :))

Merci d'avance.

Pour infos, je suis sous excel 2007

Kévin.
A voir également:

1 réponse

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
3 juil. 2013 à 11:45
Bonjour

voici le code, à recopier dans un module

j'ai supposé que les données commençaient en cellule A1
le résultat s'affiche dans la feuille 2
la durée de traitement est de l'ordre de 1mn 15 s sur mon PC

Sub Transformer()
    Application.ScreenUpdating = False
    Deb = Timer
    Range("A1").Select
    DerCol = ActiveCell.End(xlToRight).Column
    DerLig = ActiveCell.End(xlDown).Row
    
    ReDim Valeur(DerLig * DerCol) As String
    ReDim Lig(DerLig * DerCol) As String
    ReDim Col(DerLig * DerCol) As String
    
    x = 0
    For j = 1 To DerLig
        For i = 1 To DerCol
            x = x + 1
            Valeur(x) = Cells(j, i)
            Col(x) = i
            Lig(x) = j
        Next i
    Next j
    
    Sheets("Feuil2").Select
    Cells(1, 1) = "Colonnes"
    Cells(1, 2) = "Lignes"
    Cells(1, 3) = "Valeurs"
    Range("A2").Select
    For i = 1 To x
        Cells(i + 1, 1) = Col(i)
        Cells(i + 1, 2) = Lig(i)
        Cells(i + 1, 3) = Valeur(i)
    Next i
    MsgBox "Durée " & Timer - Deb & " secondes"
End Sub


bonne réception

cdlt
0