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 :

Macro qui permet de passer des données horizontales d'un tableau à des données verticales dans un autre


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Logistique
    Inscrit en
    Septembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Macro qui permet de passer des données horizontales d'un tableau à des données verticales dans un autre
    Bonjour à toutes et à tous.

    Dans le cadre de mon travail, nous travaillons sur des tableaux exel que nous devons modifié pour pouvoir créer un autre fichier de données (en csv) qui lui est intégré dans un logiciel propre à l'entreprise.
    Existe t'il une macro qui permet de passer des données horizontales en données verticales. Le tableau d'origine fait 357 lignes et peut aller de 12 à 120 colonnes selon les périodes de l'année.
    Je joins un exemple de tableau et j'y ai ajouté des codes couleurs pour que vous compreniez.
    Si des fois quelqu'un a une solution.

    Merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 265
    Points : 403
    Points
    403
    Par défaut Aide
    Bonjour
    je vous propose l'aide ci jointe

    le fichier dispose de 3 feuilles :
    • 1 feuille PARAM avec des cellules nommées qui récupèrent les différentes infos dont on a besoin
    • 1 feuille HORIZ
    • 1 feuille VERTIC


    La difficulté de votre problème est que pour chaque ligne il faut en réalité reporter autant de lignes que de produits. Ce n'est donc pas vraiment du TRANSPOSER

    Sur la feuille "HORIZ" j'ai mis un smiley pour exécuter la macro avec une double boucle (une pour chaque ligne de Horiz et une pour chaque REF produit)
    A la fin, j'ai viré les lignes où il n'y avait pas de quantités

    Voilà donc un exemple de ce comment je répondrais à la problématique. Le tout est à réadapter évidemment.
    Fichiers attachés Fichiers attachés

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    tester :
    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
    Sub test()
     
    Application.ScreenUpdating = False
    Dim F1 As Worksheet
    Dim f2 As Worksheet
    Dim plage As Range
    Set F1 = Sheets("TABLEAU HORIZONTAL")
    Set f2 = Sheets("RESULTAT")
    f2.Cells.ClearContents
    Dim i As Long
    Dim dercol As Long
    Dim A As Long
    Dim lig As Long
    dercol = F1.Cells(1, F1.Cells.Columns.Count).End(xlToLeft).Column
    derlig = F1.Range("A" & Rows.Count).End(xlUp).Row
     
    Set d = CreateObject("Scripting.Dictionary")
    lig = 1
      TblBD = F1.Range(F1.Cells(11, "A"), F1.Cells(derlig, dercol))
              For i = 1 To UBound(TblBD)
     
              For A = 8 To dercol
              If TblBD(i, A) <> "" Then
              clé = lig & "|" & TblBD(i, 4) & "|" & TblBD(i, 1) & "|" & "U" & "|" & TblBD(i, 3) & "|" & F1.Cells(1, A) & "|" & TblBD(i, A)
              d(clé) = lig & "|" & TblBD(i, 4) & "|" & TblBD(i, 1) & "|" & "U" & "|" & TblBD(i, 3) & "|" & F1.Cells(1, A) & "|" & TblBD(i, A)
              End If
              Next A
              lig = lig + 1
              Next i
      f2.Range("A2").Resize(d.Count) = Application.Transpose(d.items)
      Application.DisplayAlerts = False
      f2.Range("A2").Resize(d.Count).TextToColumns Other:=1, DataType:=xlDelimited, OtherChar:="|"
     
       f2.Select
     
      Application.ScreenUpdating = True
     
     
    End Sub
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  4. #4
    Membre averti
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 265
    Points : 403
    Points
    403
    Par défaut Complément d'infos
    En essayant la macro sur un fichier avec 357 lignes et 120 refs, je me suis aperçu que je n'avais pas vérifié si les déclarations collaient
    il faudra donc changer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ligne_départ As Integer
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ligne_départ As Variant
    Sorry

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Logistique
    Inscrit en
    Septembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Merci.
    Bonsoir, je vais tester vos deux solutions dans la semaine et je vous tiens au courant.

    Merci beaucoup pour votre aide.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Logistique
    Inscrit en
    Septembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Merci.
    Bonsoir. C'est ok pour moi. Tout fonctionne quelle que soit la solution utilisée et évidemment adaptée à mes besoins. Merci encore.



    Citation Envoyé par SYCAM49300 Voir le message
    Bonsoir, je vais tester vos deux solutions dans la semaine et je vous tiens au courant.

    Merci beaucoup pour votre aide.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    Tableau structuré et Power Query sont les outils idéaux pour dépivoter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
        Source = Excel.CurrentWorkbook(){[Name="TableauHorizontal"]}[Content],
        #"Type modifié" = Table.TransformColumnTypes(Source,{{"CODE CLIENT", type text}, {"ID", Int64.Type}, {"DIV", type text}, {"REP.", Int64.Type}, {"S/A", type text}, {"C", type text}, {"CLIENT", type text}, {"REF 1", Int64.Type}, {"REF 2", Int64.Type}, {"REF 3", Int64.Type}, {"REF 4", Int64.Type}, {"REF 5", Int64.Type}, {"REF 6", Int64.Type}, {"REF 7", Int64.Type}, {"REF 8", Int64.Type}, {"REF 9", Int64.Type}}),
        #"Tableau croisé dynamique des colonnes supprimé" = Table.UnpivotOtherColumns(#"Type modifié", {"CODE CLIENT", "ID", "DIV", "REP.", "S/A", "C", "CLIENT"}, "Attribut", "Valeur")
    in
        #"Tableau croisé dynamique des colonnes supprimé"

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2019, 15h39
  2. Réponses: 0
    Dernier message: 10/08/2016, 10h10
  3. Macro qui permet de changer des variables
    Par julien_nesta dans le forum Macro
    Réponses: 2
    Dernier message: 25/01/2016, 16h46
  4. Existe-il une macro qui permet de différencier des cellules identiques ?
    Par marion1857 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/04/2013, 16h57
  5. Réponses: 11
    Dernier message: 21/07/2009, 17h32

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