L’automatisation des processus de conception d’agencement des installations avec VBA dans Excel implique généralement la gestion de données relatives aux dimensions, à l’emplacement des équipements, à l’optimisation de l’espace, ainsi que la génération de plans ou d’autres documents pertinents. Voici un exemple de code VBA détaillé pour automatiser une partie de ce processus.
Contexte de l’exemple
Imaginons que vous deviez gérer un agencement d’une usine ou d’un bureau, où vous devez placer différents équipements (bureaux, machines, étagères) dans des espaces de travail, en tenant compte de leurs dimensions et des contraintes d’espace.
Le processus d’automatisation peut inclure :
- Création d’un tableau de données des équipements, avec leurs dimensions (longueur, largeur, hauteur) et type (bureau, machine, etc.).
- Calcul des positions pour chaque équipement en fonction de l’espace disponible et des contraintes.
- Génération d’un plan de l’agencement basé sur les positions calculées.
Étapes
- Création d’un tableau de données d’équipements (dimensions et type d’équipement).
- Calcul des positions des équipements dans l’espace disponible.
- Affichage des équipements dans une feuille Excel (représentation simple avec des formes).
- Gestion des conflits d’agencement pour éviter que les équipements se chevauchent.
Voici un exemple de code VBA pour automatiser ce processus :
- Préparation des données
Dans cet exemple, on suppose que les équipements sont stockés dans une feuille nommée « Équipements », avec les colonnes suivantes :
- Nom de l’équipement (colonne A)
- Type d’équipement (colonne B)
- Longueur (colonne C)
- Largeur (colonne D)
- Code VBA
Sub GenererAgencement()
' Variables
Dim ws As Worksheet
Dim wsAgencement As Worksheet
Dim lastRow As Long
Dim i As Long
Dim Equipement As String
Dim TypeEquipement As String
Dim Longueur As Double
Dim Largeur As Double
Dim xPos As Double
Dim yPos As Double
Dim iCol As Long
Dim iRow As Long
Dim Forme As Shape
' Références aux feuilles
Set ws = ThisWorkbook.Sheets("Équipements")
Set wsAgencement = ThisWorkbook.Sheets("Agencement")
' Effacer les anciennes formes de l'agencement
wsAgencement.Shapes.Clear
' Dernière ligne avec des données dans la feuille "Équipements"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Initialisation des positions
xPos = 0 ' Position X de départ
yPos = 0 ' Position Y de départ
' Parcours des équipements
For i = 2 To lastRow ' En commençant à la ligne 2 pour ignorer l'en-tête
Equipement = ws.Cells(i, 1).Value
TypeEquipement = ws.Cells(i, 2).Value
Longueur = ws.Cells(i, 3).Value
Largeur = ws.Cells(i, 4).Value
' Vérifier si l'équipement rentre sur la ligne actuelle
If xPos + Longueur > wsAgencement.PageSetup.PageWidth Then
' Si dépassement de la largeur, passer à la ligne suivante
xPos = 0
yPos = yPos + 150 ' Espacement entre les lignes (ajustez selon besoin)
End If
' Créer une forme pour représenter l'équipement dans l'agencement
Set Forme = wsAgencement.Shapes.AddShape(msoShapeRectangle, xPos, yPos, Longueur, Largeur)
' Ajouter le nom de l'équipement dans la forme
Forme.TextFrame.Characters.Text = Equipement
' Appliquer un style de remplissage pour chaque type d'équipement
Select Case TypeEquipement
Case "Bureau"
Forme.Fill.ForeColor.RGB = RGB(0, 255, 0) ' Vert pour les bureaux
Case "Machine"
Forme.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Rouge pour les machines
Case "Étagère"
Forme.Fill.ForeColor.RGB = RGB(0, 0, 255) ' Bleu pour les étagères
Case Else
Forme.Fill.ForeColor.RGB = RGB(200, 200, 200) ' Gris par défaut
End Select
' Déplacer la position X pour le prochain équipement
xPos = xPos + Longueur + 10 ' 10 est l'espace entre les équipements
Next i
MsgBox "Agencement généré avec succès!", vbInformation
End Sub
Explications du Code
- Déclaration des Variables :
- ws fait référence à la feuille contenant les données des équipements (« Équipements »).
- wsAgencement fait référence à la feuille où l’agencement visuel sera créé (« Agencement »).
- lastRow récupère la dernière ligne de la colonne A dans la feuille « Équipements » pour savoir combien d’équipements doivent être traités.
- Effacement des Formes Précédentes :
- Avant de commencer, le code efface les anciennes formes dans la feuille « Agencement » pour ne pas superposer les nouveaux éléments avec les anciens.
- Parcours des Equipements :
- Le code parcourt chaque ligne de la feuille « Équipements » (de la ligne 2 à la dernière ligne avec des données).
- Pour chaque équipement, il récupère les informations (nom, type, longueur, largeur) et détermine la position dans l’agencement.
- Calcul des Positions :
- Le code commence avec une position (xPos, yPos) initiale à (0, 0). Si l’équipement dépasse la largeur de la page, la position est réinitialisée et le code passe à la ligne suivante.
- Les équipements sont placés côte à côte, avec un espacement de 10 unités entre eux.
- Création de Formes :
- Pour chaque équipement, une forme rectangulaire est ajoutée à la feuille « Agencement » avec les dimensions spécifiées.
- Le texte du nom de l’équipement est ajouté à la forme.
- Le type d’équipement détermine la couleur de remplissage de la forme.
- Affichage d’un Message de Confirmation :
- Une fois tous les équipements placés, un message pop-up informe l’utilisateur que l’agencement a été généré avec succès.
Améliorations Possibles
- Gestion des Conflits : Vous pouvez ajouter une logique pour vérifier si deux équipements se chevauchent avant de les placer (en vérifiant les coordonnées).
- Optimisation de l’Espace : Ajouter des fonctionnalités pour optimiser l’agencement en fonction des dimensions des pièces disponibles.
- Personnalisation de l’Affichage : Modifier l’apparence des formes (ajouter des bordures, textes en gras, etc.).
- Prise en charge de plusieurs niveaux : Si votre agencement a plusieurs étages ou niveaux, vous pourriez ajouter une gestion des couches ou des onglets supplémentaires.
Cela permet de créer un agencement de base pour les installations, mais peut être étendu en fonction des besoins spécifiques de votre projet.