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

Discussion: Inversion de colonnes

  1. #1
    Expert confirmé Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 664
    Points : 5 440
    Points
    5 440

    Par défaut Inversion de colonnes

    Bonjour,

    J'ai lu récemment une discussion sur l'inversion de colonnes.
    discussion colonnes

    En partant du principe suivant:
    Les champs source sont dans un ordre différent de celui de la feuille de destination
    Cet ordre différent est aléatoire

    Objectif:
    Reconnaître les champs de destination dans la feuille source
    Reporter tous les enregistrements
    N'utiliser que des variables tableaux

    Je me permets donc de vous présenter le code suivant.
    Dans l'attente de vos remarques et/ou suggestions

    Merci

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Option Explicit
    Option Base 1
     
    Public Sub recherche_colonnes()
     
    Dim T  As Single
    T = Timer
     
    Dim derlign_b As Integer
     
    With Worksheets("Données_brutes")
            derlign_b = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
     
    Dim dercol_d As Byte
    Dim k As Byte
    Dim lechamp As String
     
    Dim tblo_ordre() As Variant
    Dim ub As Byte
     
    'Recherche de chaque champ de la feuille "Dest" dans la ligne 1 de la feeuille "Données_brutes"
    With Worksheets("Dest")
            dercol_d = .Cells(1, .Columns.Count).End(xlToLeft).Column
            For k = 1 To dercol_d
                    ReDim Preserve tblo_ordre(1 To k)
                    'Debug.Print .Cells(1, k)
                    lechamp = .Cells(1, k).Value
                    With Worksheets("Données_brutes")
                            tblo_ordre(k) = Application.Match(lechamp, .Range("A1", .Cells(1, derlign_b)), 0)
                            'Debug.Print tblo_ordre(k)
                    End With
            Next k
    End With
     
    ub = UBound(tblo_ordre)
     
    Dim i As Integer, j As Byte
    Dim tblo() As Variant
     
    'Alimentation de la feuille de destination "Dest" dans l'ordre des colonnes
    For i = 1 To derlign_b
            For j = 1 To dercol_d
                    ReDim Preserve tblo(1 To j)
                    tblo(j) = Worksheets("Données_brutes").Cells(i, tblo_ordre(j))
                    Debug.Print tblo(j)
            Next j
            Worksheets("Dest").Range("A" & i).Resize(1, ub).Value = tblo
            Erase tblo
    Next i
     
    Debug.Print "Temps écoulé : " & Int((Timer - T) + 0.5) & " seconde(s)."
     
    End Sub

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  2. #2
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    8 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : janvier 2010
    Messages : 8 967
    Points : 21 253
    Points
    21 253
    Billets dans le blog
    9

    Par défaut

    Bonjour,
    Je n'ai sans doute pas compris ce que tu veux mais pourquoi ne pas utiliser la méthode AdvancedFilter suggéré par Marc-L dans la discussion que tu as référencée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  3. #3
    Expert confirmé Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2009
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 664
    Points : 5 440
    Points
    5 440

    Par défaut

    Bonsoir Philippe,

    (ravi de te retrouver)

    C'est juste une variante que je voulais - humblement - proposer. Et cela sans juger la proposition de Marc.
    A chacun sa sensibilité.
    Je pense, pour ma part, que les tableaux et dictionnaires sont peu, ou du moins pas assez, employés dans les discussions que l'on peut lire ici ou là.

    Bien Cordialement.

    Marcel

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.



  4. #4
    Rédacteur

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    8 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : janvier 2010
    Messages : 8 967
    Points : 21 253
    Points
    21 253
    Billets dans le blog
    9

    Par défaut

    Bonjour Marcel,
    Je pense, pour ma part, que les tableaux et dictionnaires sont peu, ou du moins pas assez, employés dans les discussions que l'on peut lire ici ou là.
    Personnellement je privilégie les méthodes et fonctionnalités natives d'excel lorsque je développe en VBA et franchement une exportation avec AdvancedFilter outre le fait que cela se résume à une ligne de code, le temps d'exécution est immédiat.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

Discussions similaires

  1. inverser les colonnes d'un tableau
    Par progaide dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/12/2008, 19h25
  2. Inverser Ligne & Colonnes en SQL
    Par chrislcf dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/08/2008, 12h32
  3. [DDE]inverser des colonnes
    Par zeloutre dans le forum VBA Access
    Réponses: 8
    Dernier message: 03/04/2007, 11h59
  4. inverser les colonnes et lignes dans un etat
    Par laurence1002 dans le forum IHM
    Réponses: 7
    Dernier message: 27/11/2006, 20h52
  5. est il possible d'inverser ligne/colonne ?
    Par kiki26 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 25/01/2005, 15h35

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