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 :

Transformation données en tableau structuré via macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 23
    Par défaut Transformation données en tableau structuré via macro
    Bonjour,

    Sur un fichier excel, j'ai une macro qui me permet de copié collé les données issues d'un autre fichier excel. Ce que je souhaiterais faire à l'intérieur de cette même macro est de créer directement un tableau structuré avec cette même macro lors du collage. Cela est il réalisable ?

    Ma macro est actuellement la suivante :

    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
     
    Sub Rectangleàcoinsarrondis1_Cliquer()
     
     
    Dim objOuvrir As FileDialog
    Dim objFichiers As FileDialogSelectedItems
    Dim wbsource As Workbook, wbdest As Workbook
     
    Set objOuvrir = Application.FileDialog(msoFileDialogOpen)
     
    With objOuvrir 'Affiche la fenêtre "Ouvrir"
        .Filters.Clear 'Efface les filtres existants.
        .Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm" 'Définit une liste de filtres pour le champ "Type de fichiers".
        .Show
        Set objFichiers = .SelectedItems 'Définit les fichiers sélectionnés
    End With
     
    Worksheets("Armoires").Range("A2:BZ5000").ClearContents
    Worksheets("Supports + Foyers").Range("A2:FA5000").ClearContents
     
     
    If Not objFichiers.Count = 1 Then Exit Sub 'On sort si aucun fichier n'a été sélectionné
     
    Application.ScreenUpdating = False
     
    Set wbdest = ThisWorkbook 'classeur exécutant où sera collée la feuille
    Set wbsource = Workbooks.Open(objFichiers(1))
     
    wbsource.Sheets("Armoire").UsedRange.Copy Destination:=wbdest.Sheets("Armoires").Range("A1") '<<<<ADAPTER
    wbsource.Sheets("Support + Foyer").UsedRange.Copy Destination:=wbdest.Sheets("Supports + Foyers").Range("A1")
    wbsource.Close False
     
    Application.ScreenUpdating = True
     
    Dim pl As Range, sh As Worksheet
        For Each sh In Worksheets(Array("Armoires", "Supports + Foyers"))
            Set pl = sh.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)
            If Not pl Is Nothing Then
                Cells(Rows.Count, Columns.Count).Copy
                pl.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
            End If
        Next sh
     
    Fin:
    End Sub
    Merci à vous ,

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    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 974
    Par défaut
    bonjour
    Démarre l'enregistreur automatique du macro et faite manuellement l'opération , arrêtes l'enregistreur et tu aura votre code sur plateau (moyennant quelques modifications )

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 23
    Par défaut
    Bonjour,

    Merci pour votre aide,

    Le code donné est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro1()
     
     
        Range("A2:BQ24").Select
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$2:$BQ$23"), , xlYes).Name = _
            "Tableau1"
    End Sub
    Ce que je veux maintenant c'est appliqué cela pour une feuille de calcul voulu. De plus, mon tableau commence toujours en A2 mais ne finit pas a chaque fois en BQ ni en 23. Comment gérer cela pour que sa fonctionne pour tous les tableaux ?

    Merci à vous,

    cdlt

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    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 974
    Par défaut
    à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
      Dim lo As ListObject
     On Error Resume Next
      Set lo = Feuil1.ListObjects.Add(xlSrcRange, Feuil1.Range("A2").CurrentRegion, , xlYes)
      lo.Name = "t_MesDonnées"
    End Sub

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 23
    Par défaut
    Bonjour,

    Cela fonctionne parfaitement mais uniquement pour la première colonne de la feuille 2 ! comment l'appliquer à l'intégralité des colonnes et sur n'importe quel feuille?

    Merci beaucoup !!

    Cdlt,

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    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 974
    Par défaut
    uniquement pour la première colonne de la feuille 2
    capture écran de tes données de départ sans données confidentielles et explique ce que tu veux faire
    NB : pourquoi insérer avec un code VBA un tableau alors que cette opération se fait qu'une seule fois !!! j'ai lu sur ce forum qu'il est recommandé d'éviter ce traitement normalement inutile

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ca n'a pour moi que peu de sens de transformer une plage en tableau structuré. De mon point de vue, les bonnes pratiques amènent à créer un décor (tableaux structurés, graphiques, TCD, Power Query, etc) et d'importer dans ce décor les données à traiter. Créer le décor en VBA est une perte de temps et une source d'erreurs et de lourdeurs dans le classeur.

    Dans les faits, transformer une plage en tableau structuré n'est donc jamais pertinent*. Tu simplifieras grandement ton approche VBA en travaillant comme je le préconise.



    * Il ne faut jamais dire jamais et il y a donc probablement l'une ou l'autre situation rarissime où il est nécessaire de pratiquer comme tu le souhaites, mais perso, je n'ai pas rencontré ce besoin depuis que les tableaux structurés existent. Je doute donc fortement que ta situation soit l'exception à la règle
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [XL-2016] Comment modifier des données dans un tableau structuré via une listbox?
    Par Mr l'Ashanti dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/10/2019, 13h26
  2. [XL-2003] Rassembler des données et les traiter via Macro
    Par AMS17 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2014, 18h02
  3. [XL-2007] importer données de fichiers csv via macro
    Par paul311 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/09/2012, 17h53
  4. [Toutes versions] Importer données dans fichier Excel via macro VBA
    Par JEREMY01 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/07/2012, 23h13
  5. Transfert de données Word vers Excel via macro
    Par Pascalou2008 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/03/2008, 22h02

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