Voici un exemple détaillé de code VBA pour créer un organigramme dans Excel. Ce code génère des formes et des connecteurs pour représenter visuellement la hiérarchie des employés.
Explication étape par étape :
1. Structure des données : Nous supposons que les données de l’organigramme sont stockées sous forme de tableau simple dans Excel, où chaque ligne représente un employé, et les colonnes contiennent des informations comme le Nom de l'Employé, le Manager et le Poste.
Exemple :

Nom de l’Employé Manager Poste
John Doe CEO
Jane Smith John Doe VP des Ventes
Alice Brown John Doe VP des RH
Bob White Jane Smith Responsable Ventes

2. Structure du code VBA : Le code va parcourir les données, créer des formes pour chaque employé et dessiner des lignes pour représenter la structure hiérarchique.
Exemple de code VBA :

Sub CreateOrgChart()
    Dim ws As Worksheet
    Dim employeeRange As Range
    Dim employee As Range
    Dim empName As String
    Dim empManager As String
    Dim empPosition As String
    Dim shapesDict As Object
    Set shapesDict = CreateObject("Scripting.Dictionary") ' Pour stocker les formes par nom
    ' Définir la feuille contenant les données
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ' Définir la plage des données (de A2 à C dernière ligne)
    Set employeeRange = ws.Range("A2:C" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
    ' Supprimer toutes les formes existantes
    ws.Shapes.SelectAll
    Selection.Delete
    ' Parcourir chaque ligne d'employé
    For Each employee In employeeRange.Rows
        empName = employee.Cells(1, 1).Value
        empManager = employee.Cells(1, 2).Value
        empPosition = employee.Cells(1, 3).Value
        ' Créer une forme pour l'employé
        Dim empShape As Shape
        Set empShape = ws.Shapes.AddShape(msoShapeRectangle, 0, 0, 120, 60) ' Propriétés de la forme
        empShape.TextFrame.Characters.Text = empName & vbCrLf & empPosition
        ' Assigner un nom unique à la forme
        empShape.Name = empName
        shapesDict.Add empName, empShape
        ' Positionner les formes des employés selon une logique de base
        ' Exemple : une simple disposition en grille
        If shapesDict.Count = 1 Then
            empShape.Left = 100
            empShape.Top = 100
        Else
            empShape.Left = 100 + (shapesDict.Count * 150)
            empShape.Top = 100 + (Int((shapesDict.Count - 1) / 3) * 100)
        End If
        ' Créer un connecteur si l'employé a un manager
        If empManager <> "" Then
            Dim managerShape As Shape
            Set managerShape = shapesDict(empManager)
            ' Créer une ligne de connecteur entre le manager et l'employé
            Dim conn As Shape
            Set conn = ws.Shapes.AddConnector(msoConnectorStraight, managerShape.Left + managerShape.Width / 2, managerShape.Top + managerShape.Height, _
                                               empShape.Left + empShape.Width / 2, empShape.Top)
            conn.Line.EndArrowheadStyle = msoArrowheadTriangle
        End If
    Next employee
    ' Ajuster le zoom pour adapter l'organigramme à la page
    ws.PageSetup.Zoom = False
    ws.PageSetup.FitToPagesWide = 1
    ws.PageSetup.FitToPagesTall = 1
End Sub

Explication du code :

  • Définir la feuille et la plage de données :
    Le code commence par définir la feuille de calcul (ws) et la plage de données (employeeRange) correspondant au tableau contenant les informations des employés.
    La plage est définie de A2 jusqu’à la dernière ligne utilisée de la colonne C (qui est la colonne « Poste »).
  • Suppression des formes existantes :
    Avant de créer de nouvelles formes, le code supprime toutes les formes existantes pour garantir un espace de travail propre.
  • Parcours des données des employés : La boucle For Each traite chaque ligne du tableau, récupérant le nom de l’employé, le manager et le poste.
  • Création des formes pour chaque employé : Pour chaque employé, une forme rectangle est créée avec ws.Shapes.AddShape. Le nom et le poste de l’employé sont ajoutés comme texte à l’intérieur de la forme.
    Le nom de l’employé est utilisé pour donner un nom unique à chaque forme dans un dictionnaire (shapesDict), permettant de faire référence facilement à cette forme plus tard lors de la création des connecteurs.
  • Positionnement des formes :
    Une logique simple est appliquée pour éviter que les formes se chevauchent. Cela place les formes dans une grille, avec chaque nouvel employé décalé de 150 pixels à droite et 100 pixels vers le bas à mesure que le nombre d’employés augmente.
  • Création des connecteurs entre les employés et leurs managers : Si un employé a un manager (i.e., empManager n’est pas vide), une ligne de connecteur est dessinée entre la forme du manager et celle de l’employé.
    Cela se fait avec ws.Shapes.AddConnector, et des propriétés comme le style de la flèche à la fin de la ligne sont définies pour améliorer la visualisation.
  • Ajuster l’organigramme pour qu’il tienne sur une page : Enfin, le code ajuste les paramètres de mise en page afin que l’organigramme soit redimensionné pour tenir sur une seule page lors de l’impression.
    Personnalisation :
  • Style des formes : Vous pouvez modifier les dimensions, la couleur, la police et l’alignement des formes pour améliorer l’apparence de l’organigramme.
  • Logique de positionnement : Vous pouvez personnaliser la logique de positionnement pour une meilleure disposition des formes, notamment pour des organisations plus grandes.
  • Plusieurs niveaux : Si vous devez gérer plusieurs niveaux de hiérarchie (par exemple, placer les managers à un niveau supérieur et leurs subordonnés en dessous), vous pouvez introduire des règles de positionnement plus sophistiquées en fonction de la profondeur dans la hiérarchie.

S’abonner
Notifier de
0 Commentaires
le plus ancien
le plus récent le plus populaire
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x