XL 2016 Convertir en tableau

vivi21

XLDnaute Occasionnel
Bonjour,

J'ai un fichier constitué de plusieurs feuilles mensuelles et une feuille construite par une consolidation des autres feuilles.

VB:
Sub Consolider()

    'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False
    'On appelle la procédure permettant d'effacer les données
    EffaceConsolidation
   '
   '
   'On va créer une boucle permettant de lire toutes les feuilles à consolider
    'ici nous avons 12 feuilles Janvier à Décembre
   
    'nomfeuille = ActiveSheet.Name //variable permettant d'afficher
   
    For j = 5 To 16 'on parcours les 12 premières feuilles // ici 4 est janvier et 15 decembre car j'ai mes autres feuilles de masquer
   
        'On sélectionne la première feuille
        Sheets(j).Select
        'MsgBox (ActiveSheet.Name) afficher une popup pour voir le déroulement
        'On se positionne sur la dernière ligne non vide
        DerniereLigne = Range("A1000000").End(xlUp).Row
        'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
        For i = 12 To DerniereLigne
            'On sélectionne la première feuille
            Sheets(j).Select
            'On sélectionner la première ligne
            Rows(i).Select
            'On copie la ligne
            Selection.Copy
            'Où, sur la feuille consolidation, il faut donc la sélectionner
            Sheets("Consolidation").Select
            'Il faut trouver la dernière ligne non vide de la feuille consolidation
            LastRowConsolidation = Range("A1000000").End(xlUp).Row + 1
            'On sélectionne la cellule vide et la première colonne
            Cells(LastRowConsolidation, 1).Select
            'Une fois positionné, on colle les données
            ActiveSheet.Paste
            Application.CutCopyMode = False
       
        Next i
   
    Next j

    'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    Sheets("Analyse_activites").Select
    ActiveSheet.PivotTables("TCD1").PivotCache.Refresh
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
Worksheets("Consolidation").Unprotect "Aa"
Worksheets("Consolidation").Visible = False
   
End Sub

Le résultats de cette consolidation en pièce jointe.
Le fichier est attribué à chaque personnel pour recenser leurs activités.

Pour pouvoir récupérer la feuille de consolidation par personne (car les fichiers de chaque personne ne sont pas au même endroit), j'ai besoin que celle-ci soit au format tableau.

Une fois que cette feuille sera en tableau je pourrai toutes les dupliquer pour les consolider de nouveau pour l'ensemble de l'équipe.

Merci pour votre aiguillage, aide,...

Vivi
 

Pièces jointes

  • consolidation_test.xlsx
    11.1 KB · Affichages: 12

vgendron

XLDnaute Barbatruc
Hello

je ne comprend pas trop ton problème...
pour transformer ton tableau de données en table structurée
1) tu selectionnes le tableau avec entetes
2) menu Style / Mettre sous forme de tableau

j'en profite pour simplifier ta macro :
VB:
Sub Consolider()

    'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False
    'On appelle la procédure permettant d'effacer les données
    EffaceConsolidation
   '
   '
   'On va créer une boucle permettant de lire toutes les feuilles à consolider
    'ici nous avons 12 feuilles Janvier à Décembre
  
    'nomfeuille = ActiveSheet.Name //variable permettant d'afficher
  
    For j = 5 To 16 'on parcours les 12 premières feuilles // ici 4 est janvier et 15 decembre car j'ai mes autres feuilles de masquer
  
        
        With Sheets(j) 'évite de selectionner la feuille
        'MsgBox (ActiveSheet.Name) afficher une popup pour voir le déroulement
        'On se positionne sur la dernière ligne non vide
            DerniereLigne = .Range("A" & .Rows.Count).End(xlUp).Row
            'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
            For i = 12 To DerniereLigne
                .Rows(i).Copy Destination:=Sheets("Consolidation").Range("A" & Rows.Count).End(xlUp).Row + 1
            Next i
        End With
    Next j

    'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    Sheets("Analyse_activites").Select
    ActiveSheet.PivotTables("TCD1").PivotCache.Refresh
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
Worksheets("Consolidation").Unprotect "Aa"
Worksheets("Consolidation").Visible = False
  
End Sub
 

vivi21

XLDnaute Occasionnel
Bonj
Hello

je ne comprend pas trop ton problème...
pour transformer ton tableau de données en table structurée
1) tu selectionnes le tableau avec entetes
2) menu Style / Mettre sous forme de tableau

j'en profite pour simplifier ta macro :
VB:
Sub Consolider()

    'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False
    'On appelle la procédure permettant d'effacer les données
    EffaceConsolidation
   '
   '
   'On va créer une boucle permettant de lire toutes les feuilles à consolider
    'ici nous avons 12 feuilles Janvier à Décembre
 
    'nomfeuille = ActiveSheet.Name //variable permettant d'afficher
 
    For j = 5 To 16 'on parcours les 12 premières feuilles // ici 4 est janvier et 15 decembre car j'ai mes autres feuilles de masquer
 
       
        With Sheets(j) 'évite de selectionner la feuille
        'MsgBox (ActiveSheet.Name) afficher une popup pour voir le déroulement
        'On se positionne sur la dernière ligne non vide
            DerniereLigne = .Range("A" & .Rows.Count).End(xlUp).Row
            'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
            For i = 12 To DerniereLigne
                .Rows(i).Copy Destination:=Sheets("Consolidation").Range("A" & Rows.Count).End(xlUp).Row + 1
            Next i
        End With
    Next j

    'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    Sheets("Analyse_activites").Select
    ActiveSheet.PivotTables("TCD1").PivotCache.Refresh
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
Worksheets("Consolidation").Unprotect "Aa"
Worksheets("Consolidation").Visible = False
 
End Sub
Bonjour Vgendron,

Oui, je suis d'accord avec ta procédure. Sauf que je dois faire cette manipulation tous les 2 mois pour obtenir les activités de chacun et je voulais trouvé une formule ou macro qui me l'automatise pour plus de faciliter et de gain de temps.
Vivi
 

cp4

XLDnaute Barbatruc
Bonjour @vivi21 :), @vgendron ;),

Si j'ai bien compris, code ci-dessous à mettre dans un module standard et exécuter.
VB:
Option Explicit

Sub CréerUnTableauDansExcel()
   Dim plage As Range
   With ActiveWorkbook.Sheets("Feuil1") 'feuille à adapter
      Set plage = .Range("A3:I" & .Range("A" & Rows.Count).End(xlUp).Row)
      .ListObjects.Add(xlSrcRange, plage, , xlYes).Name = "Tableau1" 'nom tableau à adapter si besoin
   End With
End Sub

A+
 

chris

XLDnaute Barbatruc
Bonjour à tous

Ce type de consolidation se construit en quelques clics avec PowerQuery (intégré à Excel), que les onglets contiennent ou non des tableaux structurés, même si ceux-ci sont préférables
 
Dernière édition:

vivi21

XLDnaute Occasionnel
Hello

je ne comprend pas trop ton problème...
pour transformer ton tableau de données en table structurée
1) tu selectionnes le tableau avec entetes
2) menu Style / Mettre sous forme de tableau

j'en profite pour simplifier ta macro :
VB:
Sub Consolider()

    'On désactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = False
    'On appelle la procédure permettant d'effacer les données
    EffaceConsolidation
   '
   '
   'On va créer une boucle permettant de lire toutes les feuilles à consolider
    'ici nous avons 12 feuilles Janvier à Décembre
 
    'nomfeuille = ActiveSheet.Name //variable permettant d'afficher
 
    For j = 5 To 16 'on parcours les 12 premières feuilles // ici 4 est janvier et 15 decembre car j'ai mes autres feuilles de masquer
 
       
        With Sheets(j) 'évite de selectionner la feuille
        'MsgBox (ActiveSheet.Name) afficher une popup pour voir le déroulement
        'On se positionne sur la dernière ligne non vide
            DerniereLigne = .Range("A" & .Rows.Count).End(xlUp).Row
            'On parcours tout le tableau à partir de la ligne pour copier chacune ligne
            For i = 12 To DerniereLigne
                .Rows(i).Copy Destination:=Sheets("Consolidation").Range("A" & Rows.Count).End(xlUp).Row + 1
            Next i
        End With
    Next j

    'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    Sheets("Analyse_activites").Select
    ActiveSheet.PivotTables("TCD1").PivotCache.Refresh
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
Worksheets("Consolidation").Unprotect "Aa"
Worksheets("Consolidation").Visible = False
 
End Sub
Chris,

J'ai un bug lorsque je lance la macro. Il m'indique une erreur d'execution 1004

VB:
 'On réactive le raffraichissement de l'écran scintillement
    Application.ScreenUpdating = True
    Sheets("Analyse_activites").Select
    ActiveSheet.PivotTables("TCD10").PivotCache.Refresh
    'On affiche un message qui prévient que la consolidation est terminée
    MsgBox "La consolidation est terminée...", vbOKOnly + vbInformation, "Message"
Worksheets("Consolidation").Unprotect "Aa"
Worksheets("Consolidation").Visible = False

Du coup, il ne me mets pas à jour mon TCD.
J'ai changé le nom du TCD mais sans succès.
 

Discussions similaires

Réponses
5
Affichages
166

Statistiques des forums

Discussions
312 083
Messages
2 085 188
Membres
102 809
dernier inscrit
Sandrine83