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 :

VBA ajout de valeurs dans tableau structuré


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Juin 2021
    Messages : 6
    Par défaut VBA ajout de valeurs dans tableau structuré
    Bonjour,
    J'ai un petit problème de code... je dois rajouté un ensemble de valeurs copier d'un tableau externe (et même de plusieurs) dans mon tableau structuré mais je voudrais que ces valeurs s'ajoute a la suite dans mon tableau structuré.
    Je suis pas très doué mais j'ai eu beau chercher je trouve pas ...
    (j'ai déjà lu les autos des tableau structuré, fait des essais, etc ... je sèche ..)

    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' Copie les valeurs du classeur 1
    Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
     
    'Colle les valeurs dans le classeur 2
    Workbooks("Outil Mercu (2).xlsm").Worksheets("Base").Range("BaseArticles").PasteSpecial Paste:=xlPasteValues

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    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 : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous avez réellement lu les tutoriels traitant des tableaux structurés, vous n'appliquez certainement pas ce que vous avez appris.
    Dan votre code publié, je ne vois aucune méthode, ni propriété de cet objet.
    De plus si vous avez parcouru d'autres tutoriels présents sur ce site, vous auriez lu que les méthodes Select et l'objet Selection sont à proscrire dans la plupart des cas

    Pour revenir à votre demande, il faudrait être plus précis sur ce que vous voulez copier (une ligne complète, plusieurs cellules non contiguës, etc.)
    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
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut, il n'est pas judicieux de faire du copier coller dans un tableau structuré (et même pas judicieux tout court, ca prend bcp de ressources pour rien).

    voici une fonction qui permet d'ajouter une ligne et d'incrémenter des valeurs en fonction d'une variable tableau qui les contiens (il faut que la dimension déclarée du tableau soit la même que le nombre de colonnes du tableau structuré) :

    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
    Option Explicit
    Sub tester()
    Dim MesValeurs(1 To 1) As Variant
     
    MesValeurs(1) = Range("A2").Value
     
    ajoutLigne MesValeurs, "BaseArticles", Worksheets("Base")
     
    End Sub
     
    Function ajoutLigne(CellV(), nomtab As String, feuille As Worksheet)
    Dim row As ListRow
    Dim Table As ListObject
    Dim i As Integer
     
    Set Table = feuille.ListObjects(nomtab)
    Set row = Table.ListRows.Add()
     
    For i = 1 To UBound(CellV)
        row.Range.Cells(i).Value = CellV(i)
    Next i
     
    End Function
    Ici ton tableau ne contient d'une seule colonne donc la variable tableau a une dimension de 1

    Il faut aussi faire attention dans tes notation, il faut toujours pointer avec l'adresse complète, ici il manque la feuille.

    Tu peux utiliser la fonction pour tous les tableaux que tu veux, il faut juste respecter les règles énoncées ci dessus.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Juin 2021
    Messages : 6
    Par défaut
    Merci beaucoup ! je vais tester et je vous tiens au courant.

    Et désolé, je suis plus un bidouiller que vrai codeur ! j'prends (j'essaise !) sur le tas ... c'est pas facile !

  5. #5
    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.

    Tu pourrais peut-être t'orienter vers Power Query, qui possède des outils de fusion de tableaux (voir mes billets sur Power Query)
    "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...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Juin 2021
    Messages : 6
    Par défaut
    @ChristianBosch

    J'ai adapté et testé et ça marche !! ... mais ça faisait 2 ou 3 turcs un peu bizarre sur les la mise en forme et le remplissage du tableau

    du coup vu que je ne suis qu'un bidouiller j'ai contourné le problème Avec le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks("Outil Mercu (3).xlsm").Worksheets("Base").Range("BaseArticles").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            End If
    ça remplie le tableau a la suite des données existantes ! mais par contre ça marche pas si le tableau est vide... donc contournement et adaptation !! avec ça pour que ça marche tout le temps !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Feuil1.ListObjects("BaseArticles").ListColumns("Code GEN").Range.Cells(2, 1).Value = "" Then
            Workbooks("Outil Mercu (3).xlsm").Worksheets("Base").Range("BaseArticles").PasteSpecial Paste:=xlPasteValues
            Else
            Workbooks("Outil Mercu (3).xlsm").Worksheets("Base").Range("BaseArticles").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            End If
    J'pense que ça doit vous faire saigner les yeux car ça doit pas être académique ... mais ça marche !

    @ Pierre Fauconnier

    Je vais me pencher dessus merci pour le msg


    Et encore merci pour vos réponses rapide ! (j'ai une autre "petite" problématique mais je vais la mettre dans un autre msg)

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Je vois pas l’intérêt de faire du copier coller.

    La fonction que je t'ai mise fonctionne même si le tableau est vide et ça ne modifie pas le format des cellules.

    Et effectivement avec le power query tu devrait pouvoir faire quelque chose

  8. #8
    Membre à l'essai
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Juin 2021
    Messages : 6
    Par défaut
    Bon ... ça va être plus simple si je vous montre mes fichiers (test).
    En fait j'ai un certain nombre de fichiers fournisseurs qui sont sur le même format et je voudrais importer dans mon fichier outil. (L'idéalisassent serait meme de le faire via un userform qui me permet de sélectionner plusieurs fichiers...)
    Et je dois également exporter l'ensemble des mes données fournisseurs dans des nouveaux tableaux individuels.

    voila le code pour l'importation:

    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
     
    Sub Importer()
     
    ' **********************************
    ' Importation des données
    ' **********************************
     
    Dim ListeFichier As Variant
    Dim MonClasseur As Workbook
     
        Application.CutCopyMode = False
        Application.ScreenUpdating = False
     
        ListeFichier = Application.GetOpenFilename(Title:="Sélectionnez le Fournisseur", _
                        filefilter:="fichiers Excel(*.xls*),*xls*", buttontext:="Cliquez")
     
        If ListeFichier <> False Then
     
            Set MonClasseur = Application.Workbooks.Open(ListeFichier)
     
            'On copie les données
            Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).row, 28)).Copy
     
            ' on colle dans la feuille
            If Feuil1.ListObjects("BaseArticles").ListColumns("Code GEN").Range.Cells(2, 1).Value = "" Then
            Workbooks("Test-Outil.xlsm").Worksheets("Base").Range("BaseArticles").PasteSpecial Paste:=xlPasteValues
            Else
            Workbooks("Test-Outil.xlsm").Worksheets("Base").Range("BaseArticles").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            End If
     
            Application.DisplayAlerts = False
     
     
            MonClasseur.Close
     
        End If
     
     
     
    End Sub
    Et voila pour l'exportation:

    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
     
    Private Sub Exporter()
     
    ' **********************************
    ' Exporter les négos Fournisseurs
    ' **********************************
     
        Dim Unique As Object
        Dim DerLigne As Integer, DerColonne As Integer
        Dim Plage As Range, c As Range
        Dim Valeur
     
     
        Set Unique = CreateObject("Scripting.Dictionary")
     
     
        For Each c In Feuil1.ListObjects("BaseArticles").ListColumns("Fournisseur").DataBodyRange
            If Not Unique.Exists(c.Value) Then Unique.Add c.Value, c.Value
        Next c
        For Each Valeur In Unique.keys
            Feuil1.ListObjects("BaseArticles").Range.AutoFilter Field:=2, Criteria1:=Valeur
            Workbooks.Add
                    Application.Dialogs.Item(xlDialogSaveAs).Show Valeur & "_OK"
     
            Feuil1.ListObjects("baseArticles").HeaderRowRange.Copy [a1]
            Feuil1.ListObjects("baseArticles").DataBodyRange.Copy [a2]
     
            ' Masque des colonnes
     
            Range("a:c").EntireColumn.Hidden = True
     
            ' test protection cellules
                ActiveSheet.Unprotect
                Range("a1:ab2000").Locked = False
                Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).row, 22)).Select
                Selection.Locked = True
                ActiveSheet.Protect 1234
            ActiveWorkbook.Save
            ThisWorkbook.Activate
     
        Next
     
     
     
     
    End Sub

    pour l'import ça marche tant bien que mal ...malgré que mon codage choc

    Mais a l'export ça m'exporte toutes les données a chaque .. et je comprends pas pourquoi
    Fichiers attachés Fichiers attachés

  9. #9
    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
    Je répète que Power Query sert à cela, a priori, et permet vraiment beaucoup de choses dans lignes de code...
    "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...
    ---------------

  10. #10
    Membre chevronné Avatar de Nicolas MENDEZ
    Homme Profil pro
    Consultant - Formateur - Datanaute & Power BI addict
    Inscrit en
    Mai 2021
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant - Formateur - Datanaute & Power BI addict

    Informations forums :
    Inscription : Mai 2021
    Messages : 287
    Par défaut
    Hello à tous ...

    Au final, peut importe le chemin tant qu'on arrive à l'objectif, mais il y a quand même des chemins qui sont beaucoup plus fatiguants que d'autres et je crois que la version VBA en fait partie 👀 !

    Alors je rejoins à 2000% @Pierre Fauconnier sur Power Query, qui est encore assez méconnu ( Power query, pas Pierre ) et qui permet dans bien des cas de se passer de VBA.

    @MickaelKeul, le fait que tu aies plusieurs fichiers avec le même format pousse encore plus vers cette piste

    Dans un premier temps stocke tous tes fichiers fournisseurs individuels dans un même dossier.

    Puis dans Excel, selon ta version :
    - Données/Obtenir des données/A partir d'un fichier/A partir d'un dossier
    - Données/Nouvelle requête/A partir d'un fichier/A partir d'un dossier

    Une fois le dossier sélectionné, cliques sur Combiner/Combiner et charger à la fénêtre suivante

    L'ensemble des fichiers sont empilés les uns sous les autres et le resultat est livré dans un tableau structuré... tu peux donc faire tous les TCD ou rapports Power BI que tu souhaites. CQFD

    Avantage de cette solution : c'est du NO code et qui permet de garantir une compatibilité à 100% si une nouvelle colonne apparait ou disparait dans un seul des tes fichiers.
    Tu évites des processus d'itérations et les lectures écritures de plages de cellules qui peuvent être très gourmands en ressources comme l'évoque @ChristianBosch --> meilleure perf si beaucoup de fichiers à traiter

    En général , Power Query, l'essayer... c'est l'adopter ...

    En espérant que ca soit utile
    Enjoy !

    May the Power BI be with you !

    ---------------------------------------------
    Rejoignez le groupe dédié à la Microsoft Power Platform pour échanger autour de Power BI, Power Apps, Power Automate et Power Virtual Agents Acces ICI

Discussions similaires

  1. [XL-MAC 2016] Excel Macro VBA: Ajouter des valeurs dans des feuilles differents suivant des critères
    Par DFi100 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2018, 12h54
  2. [XL-2010] Ajouter des valeurs dans un tableau avec vba
    Par lovlov33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/01/2016, 17h01
  3. [PHP 5.4] Ajout de valeur dans tableau multi
    Par renaud26 dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2014, 09h30
  4. VBA : ajouter une valeur dans une liste déroulante
    Par remi59 dans le forum Access
    Réponses: 4
    Dernier message: 22/12/2005, 10h01
  5. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41

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