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 :

Créer une macro qui affiche 4 Onglet sur fichier excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Créer une macro qui affiche 4 Onglet sur fichier excel
    Bonjour,
    Je voulais créer une macro sur un fichier Excel pour afficher 4 Onglets.
    Les 3 Onglets s'affichent tan disque l'onglet HOISTORIQUES INCIDENTS que je souhaite ajouter ne s'affiche.
    Merci de votre aide.
    VOICI LE CODE:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    Sub FichierIncident()
     
    '
    '1/Suppresion de la dernière ligne du fichier de base
    '
    Rows(Range("A" & Rows.Count).End(xlUp).Row).Delete
     
    '------------------------------------------------------------------------------------------------------------------
    '
    '2/Suppresion des trois premières lignes du fichier des incidents de base
    '
    For i = 3 To 1 Step -1
       Cells(i, 1).EntireRow.Delete
    Next
     
    '------------------------------------------------------------------------------------------------------------------
    '
    '3/Création des onglets CRITIQUE/CORE BUSSINESS/DATA MANAGMENT/HISTORIQUES INCIDENTS
    '
    Sheets.Add(Before:=Worksheets(1)).Name = "CORE BUSINESS"
    Sheets.Add(Before:=Worksheets(1)).Name = "DATA MANAGEMENT"
    Sheets.Add(Before:=Worksheets(1)).Name = "CRITIQUE"
    Sheets.Add(Before:=Worksheets(1)).Name = "HISTORIQUES INCIDENTS"
     
     '------------------------------------------------------------------------------------------------------------------
    '
    '4/Copier/Coller la première ligne de l'extraction dans les onglets COREBUSSINESS et DATA MANAGMENT. Cette 1ère ligne corresponds à l'en-tête
    '
     
    Sheets("general_report").Cells(1, 1).EntireRow.Copy Destination:=Sheets("DATA MANAGEMENT").Range("A1")
    Sheets("general_report").Cells(1, 1).EntireRow.Copy Destination:=Sheets("CORE BUSINESS").Range("A1")
    Sheets("general_report").Cells(1, 1).EntireRow.Copy Destination:=Sheets("CRITIQUE").Range("A1")
    Sheets("general_report").Cells(1, 1).EntireRow.Copy Destination:=Sheets("HISTORIQUES INCIDENTS").Range("A1")
     
    '------------------------------------------------------------------------------------------------------------------
    '
    '5/Amélioration de l'affichage
    '
     
            '5/a/ Effacer toutes les images de tous les onglets. L'image du fichier de base a été copié sur tous les onglets lors de l'étape 4/
    Sheets("DATA MANAGEMENT").DrawingObjects.Delete
    Sheets("CORE BUSINESS").DrawingObjects.Delete
    Sheets("CRITIQUE").DrawingObjects.Delete
    Sheets("HISTORIQUES INCIDENTS").DrawingObjects.Delete
    Sheets("general_report").DrawingObjects.Delete
     
      '5/b/ Renvoie à la ligne de toutes tous les colonnes
    Sheets("DATA MANAGEMENT").Columns("A:Z").WrapText = True
    Sheets("CORE BUSINESS").Columns("A:Z").WrapText = True
    Sheets("CRITIQUE").Columns("A:Z").WrapText = True
    Sheets("HISTORIQUES INCIDENTS").Columns("A:Z").WrapText = True
     
            '5/c/ Coloration police de la première ligne. ATTENTION :  Non automatisé. En effet, je suppose que je connais dejà le nombre de colonne en mettant "Columns("A:Z")"
    Sheets("DATA MANAGEMENT").Columns("A:Z").Font.ColorIndex = 2
    Sheets("CORE BUSINESS").Columns("A:Z").Font.ColorIndex = 2
    Sheets("CRITIQUE").Columns("A:Z").Font.ColorIndex = 2
    Sheets("HISTORIQUES INCIDENTS").Columns("A:Z").Font.ColorIndex = 2
     
            '5/d/ Coloration fond de la première ligne. ATTENTION :  Non automatisé. En, effet je suppose que je connais dejà le nombre de colonne en mettant "Columns("A:N")"
    Sheets("DATA MANAGEMENT").Columns("A:N").Interior.Color = RGB(0, 0, 125)
    Sheets("CORE BUSINESS").Columns("A:N").Interior.Color = RGB(0, 0, 125)
    Sheets("CRITIQUE").Cells(1, 1).EntireRow.Interior.Color = RGB(0, 0, 125)
    Sheets("HISTORIQUES INCIDENTS").Cells(1, 1).EntireRow.Interior.Color = RGB(0, 0, 125)
     
     
     
            '5/e/ Ajustation des colonnes selon la taille des colonnes du fichier de base (le "general_report")
            DerCol = Cells(1, Cells.Columns.Count).End(xltoLeft).Column
     
            For i = 1 To DerCol
     
          largeur = Sheets("general_report").Columns(i).ColumnWidth
          Sheets("DATA MANAGEMENT").Columns(i).ColumnWidth = largeur
          Sheets("CORE BUSINESS").Columns(i).ColumnWidth = largeur
          Sheets("CRITIQUE").Columns(i).ColumnWidth = largeur
          Sheets("HISTORIQUES INCIDENTS").Columns(i).ColumnWidth = largeur
     
            Next
     
            '5/f/ Application d'un filtre sur la première ligne
    Sheets("DATA MANAGEMENT").Columns("A:N").AutoFilter
    Sheets("CORE BUSINESS").Columns("A:N").AutoFilter
    Sheets("CRITIQUE").Columns("A:N").AutoFilter
    Sheets("HISTORIQUES INCIDENTS").Columns("A:N").AutoFilter
    Sheets("general_report").Columns("A:N").AutoFilter
    '------------------------------------------------------------------------------------------------------------------
    '
    '6/GENERATION DES ONGLETS : CRIITIQUE, CORE BUSINESS et DATA MANAGMENT
    '
     
        '6/a/Définition de la dernière ligne non vide de l'onglet "general reports"
        Dim DerLign
        DerLign = Sheets("general_report").Range("A" & Rows.Count).End(xlUp).Row
     
        '6/b/ REMPLISSAGE DES ONGLETS "CORE BUSINESS" ET "DATA MANAGEMENT"
        For i = 2 To DerLign
     
            ListeDM = Array("……………………….")
            MaCellule2 = Sheets("general_report").Cells(i, 3).value
            reponse = Application.Match(MaCellule2, ListeDM, 0)
     
            If Application.IsNumber(reponse) Then
                    Sheets("general_report").Cells(i, 1).EntireRow.Copy Destination:=Sheets("DATA MANAGEMENT").Range("a65535").End(xlUp).Offset(1, 0)
            Else
                    Sheets("general_report").Cells(i, 1).EntireRow.Copy Destination:=Sheets("CORE BUSINESS").Range("a65535").End(xlUp).Offset(1, 0)
            ElseIf
                    Sheets("general_report").Cells(i, 1).EntireRow.Copy Destination:=Sheets("HISTORIQUES INCIDENTS").Range("a65535").End(xlUp).Offset(1, 0)
            End If
                    Next
     
                    '6/c/REMPLISSAGE DE L'ONGLET "CRITIQUE"
     
                    For i = 2 To DerLign
                    MaCellule3 = Sheets("general_report").Cells(i, 2).value
        FicheCritique = "Critique"
     
                            If MaCellule3 = FicheCritique Then
                                    Sheets("general_report").Cells(i, 1).EntireRow.Copy Destination:=Sheets("CRITIQUE").Range("a65535").End(xlUp).Offset(1, 0)
                  Next
                  '6/c/REMPLISSAGE DE L'ONGLET "HISTORIQUES INCIDENTS"
                   For i = 2 To DerLign
                    MaCellule4 = Sheets("general_report").Cells(i, 4).value
        FicheCritique = "HISTORIQUES INCIDENTS"
     
                            If MaCellule4 = Fiche"HISTORIQUES INCIDENTS" Then
                                    Sheets("general_report").Cells(i, 1).EntireRow.Copy Destination:=Sheets("HISTORIQUES INCIDENTS").Range("a65535").End(xlUp).Offset(1, 0)
                      End If
                    Next i
    '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    '
    '7/ Suprpresion de l'onglet de base "general_report"
    '
     
     Application.DisplayAlerts = False
    Worksheets("general_report").Delete
    Application.DisplayAlerts = True
     
    '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    '
    '8/ Enregistrement du fichier automtiqement
    '
    Dim Chemin As String, NomFichier As String
     
    Chemin = "S:\50-CESD-PRIV\15-DAAF\10-AccountingSuppor…………….\"
    NomFichier = "FichierDesIncidents_" & Day(Now) & Month(Now) & Year(Now) & "_" & Hour(Now) & "h" & Minute(Now) & "m" & Second(Now) & "s"
    'NomFichier = "FichierDesIncidents_" & Now
    ThisWorkbook.SaveAs Chemin & NomFichier, FileFormat:=52, CreateBackup:=False
     
     
    End Sub

  2. #2
    Responsable
    Office & Excel

    Salut.

    Pour afficher certaines feuilles du classeur, tu pourrais utiliser une fonction générique à laquelle tu passes le tableau des feuilles à afficher. Celle illustrée dans le code suivant reçoit un tableau de base 0 et optionnellement un classeur (par défaut, le classeur actif sera utilisé). Le code illustre également comment utiliser cet outil générique).

    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
    Sub ShowSheets(Sheets, Optional wb As Workbook)
      Dim i As Long
      Dim sh As Object
     
      If wb Is Nothing Then Set wb = ActiveWorkbook
      For Each sh In wb.Sheets
        i = 0
        Do While i < UBound(Sheets) And UCase(sh.Name) <> UCase(Sheets(i))
          i = i + 1
        Loop
        If i = UBound(Sheets) And UCase(sh.Name) <> UCase(Sheets(i)) Then _
          sh.Visible = xlSheetHidden Else sh.Visible = xlSheetVisible
      Next
    End Sub
     
    Sub Test()
      Dim Sheets
      Sheets = VBA.Array("Feuil2", "Feuil4", "Feuil5")
      ShowSheets Sheets
    End Sub



    La macro que tu illustres fait beaucoup trop de chose et est impossible à déboguer telle quelle. Tu aurais intérêt à la découper en petites procédures qui ont une et une seule finalité bien précise. Tu pourras ainsi les tester individuellement, les réutiliser au besoin et ton code sera plus lisible et plus maintenable.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    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...
    ---------------

###raw>template_hook.ano_emploi###