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 Excel] mise à jour de tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Par défaut [vba Excel] mise à jour de tableau
    Bonjour !

    j'ai un fichier Excel avec plusieurs feuilles (sommaire, sous-rubrique1,...sous-rubriquen).
    Dans toutes mes feuilles "sous-rubrique", j'ai un tableau dont la structure ne varie pas.

    je voudrais savoir comment récupérer automatiquement les lignes des tableaux de toutes les feuilles "sous-rubrique" et les insérer au tableau de la feuille "sommaire".

    Merci de vos réponses !

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu as deux solutions, ou tu copies 'plage de données' par 'plage de données' dans ta feuille sommaire.
    Ou tu copies tes plages ligne par ligne
    Pour la solution par plage, tu peux tester ça
    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
    Sub RassemblerLesFeuillesDunClasseurDansUneSeule()
    Dim CL1 As Workbook
    Dim FL1 As Worksheet, LaFeuille as Worksheet
        Set CL1 = Workbooks("Liste pour fusion.xls")
        Set FL1 = CL1.Worksheets("Sommaire")
        For Each LaFeuille In CL1.Worksheets
            If Not LaFeuille.Name = FL1.Name Then _
                LaFeuille.Range("A2:" & LaFeuille.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Address).Copy _
                Destination:=FL1.Range("A" & FL1.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Row + 1)
        Next
        Set FL1 = Nothing
        Set CL1 = Nothing
    End Sub
    A+

    Edit
    Je fais commencer la copie en A2 (LaFeuille.Range("A2:"...) afin de ne pas copier l'entête éventuelle des feuilles copiées
    Si pas d'entête -> LaFeuille.Range("A1:" ...

    NB - Avant copie, ton fichier doit être enregistré pour que
    Range("A1").SpecialCells(xlCellTypeLastCell)
    donne l'exact N° de dernière cellule de la plage de données à copier
    ou le N° de la première cellule vide où coller

  3. #3
    Membre éclairé Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Par défaut
    Merci pour ton aide !

    voici le code actuel :
    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
    Private Sub Worksheet_Activate()
    Dim CL1 As Workbook
    Dim FL1 As Worksheet, LaFeuille As Worksheet
        Set CL1 = Workbooks("Air.xls")
        Set FL1 = CL1.Worksheets("Sommaire")
        With FL1.Rows("15:65536")
            .ClearContents
            .Delete
        End With
        For Each LaFeuille In CL1.Worksheets
            If Not LaFeuille.Name = FL1.Name Then _
                LaFeuille.Range("A15:" & LaFeuille.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Address).Copy _
                Destination:=FL1.Range("A" & FL1.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Row + 1)
            Next
        Set FL1 = Nothing
        Set CL1 = Nothing
    End Sub
    j'ai inséré un bloc with car je souhaite que mon tableau de la feuille "sommaire" soit recalculé à chaque fois que la feuille est affichée. J'ai donc essayé .ClearContents, puis .Delete, puis les deux pour essayer de résoudre mon problème qui est le suivant :

    les données importées des autres feuilles du classeur sont copiées à la suite du tableau précédent (bien que les lignes du tableau soient préalablement supprimées)

    j'obtiens donc un tableau avec n lignes vides correspondant aux lignes des données précédentes et m lignes correctement remplies correspondant aux lignes des nouvelles données.

    Vois-tu où est le problème ?

  4. #4
    Membre éclairé Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Par défaut
    Désolé pour le dérangement, j'ai trouvé la solution que j'avais déjà dans ta première réponse...
    j'ai juste un peu zappé ton NB et du coup, je n'enregistrais pas mon fichier avant de copier mes données.

    Voici le code qui fonctionne :
    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
    Private Sub Worksheet_Activate()
    Dim CL1 As Workbook
    Dim FL1 As Worksheet, LaFeuille As Worksheet
        Set CL1 = Workbooks("Air.xls")
        Set FL1 = CL1.Worksheets("Sommaire")
        FL1.Rows("15:65536").Delete
        CL1.Save
        For Each LaFeuille In CL1.Worksheets
            If Not LaFeuille.Name = FL1.Name Then _
                LaFeuille.Range("A15:" & LaFeuille.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Address).Copy _
                Destination:=FL1.Range("A" & FL1.Range("A1"). _
                SpecialCells(xlCellTypeLastCell).Row + 1)
            Next
        Set FL1 = Nothing
        Set CL1 = Nothing
    End Sub
    Toujours dans le meme style mais en un peu plus compliqué, je voudrais maintenant importer les données de mes tableaux "sommaire" (j'ai plusieurs fichiers .xls différents) dans un tableau situé dans un autre classeur.

    Comment faire ?

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ou tu veux lister les fichiers d'un répertoire particulier, ou tu connais les noms et chemins des fichiers à "agglutiner", auquel cas tu en fais un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    LeTableau = Array("D:\xls\Sommaire1.xls", "D:\xls\Sommaire2.xls", "D:\xls\Sommaire3.xls", "D:\xls\Sommaire4.xls")
     
    'le classeur contenant la macro et dans lequel tu colles les feuilles sommaire
    Set Fl1 = ThisWorkbook
     
    'La boucle
    For i = 1 to Ubound(LeTableau)
         Set FL2 = Workbooks.open LeTableau(i)
         'Copie de la feuille
         FL1. 'collage
         DoEvents
         FL2.close false
    Next
    et là tu dois pouvoir adapter à ton nouveau fichier le code qui t'a servi pour créer le sommaire.
    A+

  6. #6
    Membre éclairé Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Par défaut
    Tout d'abord merci pour tes réponses !

    Voici le code que j'ai inséré dans le classeur qui reçoit les données :

    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
    Private Sub Worksheet_Activate()
     
    Dim fso As New FileSystemObject
    Dim fich As file
    Dim Rep As Folder
    Dim Wk As Variant
    Dim TabFich() As String
        Set Rep = fso.GetFolder(Application.ThisWorkbook.Path & "\Thèmes")
        For Each fich In Rep.Files
            Wk = Chemin & fich.Name
             'Renseigne une listbox
            If fso.GetExtensionName(Wk) = "xls" Then _
               listbox1.AddItem Wk
            End If
        Next
        Set Rep = Nothing
     
    Dim CL1 As Workbook, CL2 As Workbook
    Dim FL1 As Worksheet, FL2 As Worksheet
        Set CL1 = ThisWorkbook
        Set FL1 = CL1.Worksheets("Sommaire")
        FL1.Rows("74:65536").Delete
        CL1.Save
        For i = 1 To UBound(listbox1)
            Set CL2 = Workbooks.Open(listbox1(i))
            Set FL2 = CL2.Worksheets("sommaire")
            FL2.Range("A15:" & FL2.Range("A1"). _
            SpecialCells(xlCellTypeLastCell).Address).Copy _
            Destination:=FL1.Range("A" & FL1.Range("A1"). _
            SpecialCells(xlCellTypeLastCell).Row + 1)
        Next i
     
        Set FL1 = Nothing
        Set CL1 = Nothing
        Set FL2 = Nothing
        Set CL2 = Nothing
     
    End Sub
    Je ne sais pas si cela peut fonctionner étant donné que j'ai une erreur dès la première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fso As New FileSystemObject
    L'erreur est la suivante :
    Erreur de compilation :
    Type défini par l'utilisateur non défini
    Qu'en penses-tu ?

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

Discussions similaires

  1. mise à jour automatique tableau excel par macro
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2011, 11h37
  2. [VBA-Excel]Mise à jour des liaisons powerpoint
    Par Mando dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2006, 22h51
  3. VBA-Excel:Présentation d'un tableau (insertion ligne de légende)
    Par gabrielle_dl dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 15/06/2006, 11h11
  4. [VBA][Excel] mise en forme conditionnelle
    Par titflocon dans le forum Access
    Réponses: 9
    Dernier message: 19/12/2005, 10h13
  5. [VBA][EXCEL] Mise à jour de TCD en macro
    Par Scuriolus dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 07/12/2005, 13h30

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