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 :

Transposition d'un tableau excel variable en une seule colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Par défaut Transposition d'un tableau excel variable en une seule colonne
    Bonjour à Tous,

    Etant débutant en programmation, j'essaie de trouver le moyen de créer une macro qui puisse transposer les valeurs d'un tableau dans une seule colonne.

    Bien-entendu, il y a quelques complications, à savoir :

    - Le tableau peut varier en ligne et en colonne.
    - Ce même tableau comporte des cellules vides (des fois des lignes entièrement vides) que je ne veux pas récupérer dans la colonne finale.
    - Le tableau initial est présent dans un classeur et la colonne finale est dans un autre classeur.
    - Je veux que les valeurs rapatriés dans la colonne respecte l'ordre de lecture du tableau (lecture ligne par ligne de gauche à droite)

    Je vous joins un fichier excel test.xls pour pouvoir comprendre au mieux ma requête.

    Je remercie d'avance ceux qui pourront m'éclairer et m'initier en douceur à la programmation vba excel ^^ (En parallèle, je continue ma recherche sur le net)

    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Par défaut
    bonjour,
    en feuille 1, on a les données et en feuille 3 on a le résultat.
    On peut mettre un nom entre guillemet à la place d'un numéro de feuille si on préfère

    Les boucles imbriquées parcours les cellules dans l'ordre que tu as demandé
    le test (if) permet de traiter seulement les cellules non vides et le compteur cpt permet de passer à la ligne suivante :

    Ca donne cela. Je répondrai avec plaisir à tes questions

    faire un bouton sur la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      ConstruireTableau Range("A1"), Range("G7")
    End Sub
    Faire : insertion module et coller ce code
    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
     
    Public Sub ConstruireTableau(ByVal Cellule1 As Range, ByVal Cellule2 As Range)
    Dim Ligne As Integer
    Dim Colonne As Integer
    Dim Cpt As Integer
     
    Cpt = 1
    For Ligne = Cellule1.Row To Cellule2.Row
       For Colonne = Cellule1.Column To Cellule2.Column
          If Sheets(1).Cells(Ligne, Colonne).Value <> "" Then
             Sheets(3).Range("A" & Cpt).Value = Sheets(1).Cells(Ligne, Colonne).Value
             Cpt = Cpt + 1
          End If
       Next Colonne
    Next Ligne
     
    End Sub

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Voici une autre façon de faire. Le code est plus long mais il s'exécute plus rapidement, si le tableau grossit...

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub subBoldug()
    Dim vL As Variant, vR As Variant
    Dim oShL As Excel.Worksheet, oShR As Excel.Worksheet, oRngR As Excel.Range
    Dim i As Long, j As Integer, k As Long, nbCells As Long
     
    'instanciation de la feuille de données (L) et de résultat (R)
    Set oShL = ThisWorkbook.Worksheets("Tableau_initial")
    Set oShR = ThisWorkbook.Worksheets("colonne_finale")
     
    'lecture du tabeau de données
    vL = oShL.UsedRange.Value
     
    'calcul du nombre de cellules lues
    nbCells = UBound(vL, 1) * UBound(vL, 2)
     
    'nettoyage de la feuille de résultats
    oShR.UsedRange.ClearContents
     
    'dimensionnement de vR
    Set oRngR = oShR.Range("A1:A" & nbCells)
    vR = oRngR.Value
     
    'copie des valeurs de vL dans vR
    k = 1
    For i = 1 To UBound(vL, 1)
        For j = 1 To UBound(vL, 2)
            If Not IsEmpty(vL(i, j)) Then
                vR(k, 1) = vL(i, j)
                k = k + 1
            End If
        Next j
    Next i
     
    'copier le résultat dans la feuille
    oRngR.Value = vR
     
    'libérer les variables
    Set oRngR = Nothing
    Set oShL = Nothing
    Set oShR = Nothing
    vL = Empty
    vR = Empty
     
    End Sub
    Cordialement,

    PGZ

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Par défaut
    Une réponse rapide juste pour vous remercier !! Je vais maintenant étudier vos macros minutieusement et vous tiendrais au courant !! C'est pour le boulot mais je veux vraiment progresser en vba excel, donc je vais potasser ce weekend aussi ^^

    Merci encore et Bon weekend !

Discussions similaires

  1. [XL-2010] Afficher un tableau de variable sur une page excel
    Par Blaiz58 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/12/2014, 15h32
  2. [PPT-2010] Tableau Excel dynamique dans une présentation
    Par dream3w dans le forum Powerpoint
    Réponses: 2
    Dernier message: 01/01/2013, 17h46
  3. Tableau de variables dans une procédure stockée ?
    Par Seb33300 dans le forum Développement
    Réponses: 4
    Dernier message: 09/03/2009, 11h57
  4. doublon excel une seule colonne
    Par xadocle dans le forum Excel
    Réponses: 10
    Dernier message: 21/04/2008, 10h20
  5. Mettre plusieurs variables dans une seule
    Par fixbraun dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 21h34

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