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
| Sub CreerEtConfigurerLots()
Dim wsSource As Worksheet
Dim wsNew As Worksheet
Dim nombreLots As Integer
Dim i As Integer
Dim nombreCandidats As Integer
' Définir la feuille source
Set wsSource = ThisWorkbook.Sheets("Feuil1") ' Assurez-vous que le nom est correct
' Récupérer le nombre de lots à partir de la cellule F2
nombreLots = wsSource.Range("F2").Value
' Boucle pour créer des copies de Feuil1 pour chaque lot
For i = 1 To nombreLots
' Vérifier si l'onglet existe déjà, si oui, le supprimer
On Error Resume Next
Set wsNew = ThisWorkbook.Sheets("Lot No" & i)
If Not wsNew Is Nothing Then
Application.DisplayAlerts = False
wsNew.Delete
Application.DisplayAlerts = True
End If
On Error GoTo 0
' Copier Feuil1
wsSource.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wsNew = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
wsNew.Name = "Lot No" & i
' Effacer les cellules F1 et F2 dans le nouvel onglet
wsNew.Range("F1:F5").ClearContents
' Demander le nombre de candidats pour ce lot
nombreCandidats = Application.InputBox("Entrez le nombre de candidats pour le Lot No" & i, "Nombre de Candidats", Type:=1)
' Vérifier si l'utilisateur a annulé ou entré une valeur invalide
If nombreCandidats <= 0 Then
MsgBox "Nombre de candidats invalide. Le lot ne sera pas configuré.", vbExclamation
wsNew.Delete ' Supprimer l'onglet si le nombre de candidats est invalide
Else
' Enregistrer le nombre de candidats dans la cellule E2
wsNew.Range("E2").Value = nombreCandidats
' Configurer le lot
Call ConfigurerLot(wsNew)
' Activer l'onglet nouvellement créé pour s'assurer qu'il est visible
wsNew.Activate
End If
Next i
' Revenir à la feuille source à la fin
wsSource.Activate
End Sub
Sub ConfigurerLot(ws As Worksheet)
Dim nombreCriteres As Integer
Dim nombreSousCriteres As Integer
Dim nombreCandidats As Integer
Dim i As Integer, j As Integer, k As Integer
Dim ligneDepart As Integer
Dim colonneDepart As Integer
' Récupérer le nombre de critères et de candidats
nombreCriteres = ws.Range("B2").Value
nombreCandidats = ws.Range("E2").Value
' Vérifier le nombre de sous-critères
sousCriteresCorrects = True
For i = 1 To nombreCriteres
nombreSousCriteres = ws.Cells(i + 1, 3).Value
If nombreSousCriteres <= 0 Then
sousCriteresCorrects = False
Exit For
End If
Next i
' Informer l'utilisateur si le nombre de sous-critères ne correspond pas
If Not sousCriteresCorrects Then
MsgBox "Le nombre de sous-critères doit être défini pour chaque critère.", vbExclamation
Exit Sub
End If
' Configurer la matrice
ligneDepart = 15
colonneDepart = 4
' Effacer les anciennes données
ws.Range("A12:Z100").Clear
' Ajouter les en-têtes pour chaque candidat
For k = 0 To nombreCandidats - 1
ws.Cells(14, colonneDepart + 3 * k).Value = "Réponse Prestataire " & (k + 1)
ws.Cells(14, colonneDepart + 3 * k + 1).Value = "Commentaire Client Interne " & (k + 1)
ws.Cells(14, colonneDepart + 3 * k + 2).Value = "Notation " & (k + 1)
Next k
' Boucle pour ajouter les critères et sous-critères
For i = 1 To nombreCriteres
ws.Cells(ligneDepart, 1).Value = "Critère " & i
nombreSousCriteres = ws.Cells(i + 1, 3).Value
For j = 1 To nombreSousCriteres
ws.Cells(ligneDepart + j, 2).Value = "Sous-Critère " & i & "." & j
' Appliquer la validation des données pour la notation pour chaque candidat
For k = 0 To nombreCandidats - 1
With ws.Cells(ligneDepart + j, colonneDepart + 3 * k + 2).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="1,2,3,4"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
Next k
Next j
' Ajouter une ligne de totalisation pondérée pour chaque candidat
For k = 0 To nombreCandidats - 1
Dim totalCell As Range
Set totalCell = ws.Cells(ligneDepart + nombreSousCriteres + 1, colonneDepart + 3 * k + 2)
ws.Cells(ligneDepart + nombreSousCriteres + 1, colonneDepart + 3 * k + 1).Value = "Total Critère " & i
totalCell.Formula = "=SUM(" & ws.Cells(ligneDepart + 1, colonneDepart + 3 * k + 2).Address & ":" & _
ws.Cells(ligneDepart + nombreSousCriteres, colonneDepart + 3 * k + 2).Address & _
") / (" & nombreSousCriteres & " * 4) * " & ws.Cells(i + 1, 4).Value
Next k
' Passer à la ligne suivante pour le prochain critère
ligneDepart = ligneDepart + nombreSousCriteres + 2 ' Laisser une ligne vide entre les critères
Next i
End Sub
Sub Suppression_des_onglets_Lot()
Application.DisplayAlerts = False
For i = Sheets.Count To 1 Step -1
If Left(Sheets(i).Name, 3) = "Lot" Then Sheets(i).Delete
Next i
End Sub |
Partager