Pour transformer ce script VBA en une application Excel utilisable par l'utilisateur, vous devez
effectuer les étapes suivantes. Ce guide explique comment préparer le classeur Excel, insérer le code
VBA, et créer un bouton pour exécuter le script facilement.
### Étape 1 : Préparation du Classeur Excel
1. **Ouvrir un Nouveau Classeur Excel**:
- Lancez Microsoft Excel.
- Ouvrez un nouveau classeur vierge.
### Étape 2 : Insérer le Code VBA
1. **Accéder à l'éditeur VBA**:
- Appuyez sur `Alt + F11` pour ouvrir l'éditeur VBA.
2. **Insérer un Nouveau Module**:
- Dans l'éditeur VBA, cliquez sur `Insert` > `Module`. Cela créera un nouveau module où vous
pouvez coller votre code.
3. **Copier et Coller le Code VBA**:
- Copiez le code VBA suivant et collez-le dans le module :
```vba
Sub PreparerTableauEtCalculer()
Dim Feuille As Worksheet
Dim Estimation As Double
Dim PrixDeReference As Double
Dim SeuilExcessive As Double
Dim SeuilAnormalementBas As Double
Dim DerniereLigne As Long
Dim i As Long
Dim Total As Double
Dim NombreOffresRetenues As Long
Dim MoyenneOffresRetenues As Double
Dim Offre As Double
Dim Classement As Integer
Set Feuille = [Link]("Sheet1")
' Préparer les en-têtes et les labels
[Link]("A1:J1").Merge
[Link]("A1:J1").Value = "En-tête du Tableau"
[Link]("A2").Value = "ESTIMATION ADMINISTRATION"
[Link]("A3").Value = "AON3"
[Link]("A4").Value = "ESTIMATION ADMINISTRATION"
[Link]("A5").Value = "SEUIL EXCESSIVE"
[Link]("A6").Value = "SEUIL ANORMALEMENT BAS"
[Link]("A7").Value = "PRIX DE RÉFÉRENCE"
[Link]("A9").Value = "LISTE DES SOUMISSIONAIRES"
[Link]("A10").Value = "NOM CONCURRENT"
[Link]("B10").Value = "MONTANT DES OFFRES"
[Link]("D10").Value = "NOM DES CONCURRENTS ÉCARTÉS"
[Link]("E10").Value = "MONTANT DES OFFRES ÉCARTÉS"
[Link]("F10").Value = "NOM DES CONCURRENTS ADMISSIBLES"
[Link]("G10").Value = "MONTANT DES OFFRES ADMISSIBLES"
[Link]("H10").Value = "CLASSEMENT DES OFFRES"
[Link]("I10").Value = "OFFRE MIEUX-DISANT PAR DÉFAUT"
[Link]("J10").Value = "OFFRE MIEUX-DISANT PAR EXCÈS"
' Saisir les valeurs utilisateur
Estimation = [Link]("B2").Value
' Calculer les seuils
SeuilExcessive = Estimation * 1.2
SeuilAnormalementBas = Estimation * 0.8
[Link]("B5").Value = SeuilExcessive
[Link]("B6").Value = SeuilAnormalementBas
' Initialiser les variables
Total = 0
NombreOffresRetenues = 0
' Parcourir les offres saisies par l'utilisateur
For i = 11 To 40
Offre = [Link](i, 2).Value
If Offre > 0 Then
If Offre > SeuilExcessive Then
' Offre excessive
[Link](i, 4).Value = [Link](i, 1).Value
[Link](i, 5).Value = Offre
[Link](i, 1).[Link] = RGB(255, 0, 0) ' Rouge pour offre excessive
[Link](i, 2).[Link] = RGB(255, 0, 0) ' Rouge pour offre excessive
ElseIf Offre < SeuilAnormalementBas Then
' Offre anormalement basse
[Link](i, 4).Value = [Link](i, 1).Value
[Link](i, 5).Value = Offre
[Link](i, 1).[Link] = RGB(255, 255, 0) ' Jaune pour offre anormalement basse
[Link](i, 2).[Link] = RGB(255, 255, 0) ' Jaune pour offre anormalement basse
Else
' Offre admissible
[Link](i, 6).Value = [Link](i, 1).Value
[Link](i, 7).Value = Offre
Total = Total + Offre
NombreOffresRetenues = NombreOffresRetenues + 1
End If
End If
Next i
' Calculer le prix de référence
If NombreOffresRetenues > 0 Then
MoyenneOffresRetenues = Total / NombreOffresRetenues
PrixDeReference = (Estimation + MoyenneOffresRetenues) / 2
[Link]("B7").Value = PrixDeReference
Else
MsgBox "Aucune offre admissible pour calculer le prix de référence."
Exit Sub
End If
' Classer les offres admissibles par rapport au prix de référence
DerniereLigne = 11
Do While [Link](DerniereLigne, 7).Value <> ""
DerniereLigne = DerniereLigne + 1
Loop
DerniereLigne = DerniereLigne - 1
' Créer une liste pour trier les offres admissibles
Dim OffresAdmissibles() As Variant
ReDim OffresAdmissibles(1 To DerniereLigne - 10, 1 To 2)
Dim Index As Integer
Index = 1
For i = 11 To DerniereLigne
OffresAdmissibles(Index, 1) = [Link](i, 6).Value
OffresAdmissibles(Index, 2) = [Link](i, 7).Value
Index = Index + 1
Next i
' Trier les offres admissibles par rapport à leur proximité avec le prix de référence
Dim TempNom As String
Dim TempMontant As Double
Dim j As Integer
For i = 1 To UBound(OffresAdmissibles, 1)
For j = i + 1 To UBound(OffresAdmissibles, 1)
If Abs(OffresAdmissibles(j, 2) - PrixDeReference) < Abs(OffresAdmissibles(i, 2) -
PrixDeReference) Then
TempNom = OffresAdmissibles(i, 1)
TempMontant = OffresAdmissibles(i, 2)
OffresAdmissibles(i, 1) = OffresAdmissibles(j, 1)
OffresAdmissibles(i, 2) = OffresAdmissibles(j, 2)
OffresAdmissibles(j, 1) = TempNom
OffresAdmissibles(j, 2) = TempMontant
End If
Next j
Next i
' Remplir le classement des offres
For i = 1 To UBound(OffresAdmissibles, 1)
[Link](10 + i, 8).Value = OffresAdmissibles(i, 1)
Next i
' Déterminer l'offre mieux-disant par défaut et par excès
Dim OffreMieuxDisantParDefaut As String
Dim OffreMieuxDisantParExces As String
Dim PlusProcheParDefaut As Double
Dim PlusProcheParExces As Double
PlusProcheParDefaut = 999999999
PlusProcheParExces = 999999999
For i = 1 To UBound(OffresAdmissibles, 1)
If OffresAdmissibles(i, 2) <= PrixDeReference Then
If Abs(OffresAdmissibles(i, 2) - PrixDeReference) < PlusProcheParDefaut Then
PlusProcheParDefaut = Abs(OffresAdmissibles(i, 2) - PrixDeReference)
OffreMieuxDisantParDefaut = OffresAdmissibles(i, 1)
End If
Else
If Abs(OffresAdmissibles(i, 2) - PrixDeReference) < PlusProcheParExces Then
PlusProcheParExces = Abs(OffresAdmissibles(i, 2) - PrixDeReference)
OffreMieuxDisantParExces = OffresAdmissibles(i, 1)
End If
End If
Next i
[Link]("I11").Value = OffreMieuxDisantParDefaut
[Link]("J11").Value = OffreMieuxDisantParExces
End Sub
```
### Étape 3 : Créer un Bouton pour Exécuter la Macro
1. **Retourner à Excel**:
- Appuyez sur `Alt + Q` pour fermer l'éditeur VBA et retourner à Excel.
2. **Insérer un Bouton**:
- Allez à l'onglet `Développeur`. Si vous ne voyez pas cet onglet, activez-le via `Fichier` > `Options` >
`Personnaliser le ruban` et cochez `Développeur`.
- Cliquez sur `Insérer` dans le groupe `Contrôles` puis choisissez `Bouton (Contrôle de formulaire)`.
- Dessinez le bouton sur votre feuille de calcul.
3. **Assigner la Macro au Bouton**:
- Après avoir dessiné le bouton, une boîte de dialogue s'ouvre pour assigner une macro.
Sélectionnez `PreparerTableauEtCalculer` et cliquez sur `OK`.
### Étape 4 : Saisir les Données et Utiliser le Bouton
1. **Saisir les Données**:
- Dans la cellule `B2`, saisissez le montant de l'estimation de l'administration.
- Dans les cellules `A11:A40`, saisissez les noms des concurrents.
- Dans les cellules `B11:B40`, saisissez les montants des offres des concurrents.
2. **Exécuter la Macro**:
- Cliquez sur le bouton que vous avez créé pour exécuter la macro. Le tableau sera
automatiquement préparé et les calculs seront effectués selon les spécifications.
Cette procédure transforme votre classeur Excel en une application simple permettant de gérer et
analyser les offres des soumissionnaires conformément aux règles spécifiées.