IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Problème de creation d'onglets / Matrice de notation marché public


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant E-Learning
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Par défaut Problème de creation d'onglets / Matrice de notation marché public
    Bonjour,

    Je tente de réaliser sous VBA la création d'une matrice de notation utilisée pour l'évaluation technique des offres ou réponses de différents candidats à des appels d'offres en marché public. Cela fait longtemps que je songe à réaliser cette matrice qui est très chronophage à construire manuellement. Je vais tenter d'expliquer son principe de fonctionnement. Cette dernière, figure en pièce jointe, j'ai déjà accompli pas mal de chemin, mais il me reste une dernière problématique que je ne parviens pas à résoudre.. Le premier onglet du fichier Excel ci- joint s'intitule "Feuil1" et comprend les paramètres suivants : Critères / Sous Critères / Pondération / Candidats / Lot renseigné par des listes déroulantes. Au stade d'aujourd'hui 18/08, je suis parvenu avec l'aide d'une I.A. à réaliser la partie paramétrage de l'onglet lot. Un lot se compose de plusieurs critères qui, eux mêmes, se déclinent en sous-critères avec des pondérations de points associées à une échelle de notation qui va de 1 à 4. "1" étant la note la plus basse et "4" la plus élevée. Les critères et sous critères sont identiques à tous les lots, seul lele nombre de candidat varie d'un lot à l'autre, ce qui nécessite d'entrer le nombre de candidat(s) au niveau de la création du lot à l'aide d'une fenêtre ou boite de dialogue qui va déterminer la dimension des colonnes à configurer pour chaque lot 1 candidat = 3 colonnes, 2 candidats = 6 colonnes. Toutes ces étapes ont été effectuées avec succès. Là ou cela se complique est lorsque plusieurs lots sont renseignés en F2 ( Feuil1), par exemple F2=3 lots. Les boites de dialogues s'enchainent et le nombre de candidat est successivement renseigné pour le lot n°1, Lot n°2 et Lot n°3, mais seul le lot N°3 est crée sous forme d'onglet " Lot 3" ?!. Les autres lots N°1 et N°2 n'apparaissent pas ?.. Je vous remercie pour votre aide précieuse en ce qui concerne cette problématique qui me pose problème depuis plusieurs jours... Toutes mes tentatives de solutions ont échoué, à mon grand regret..

    Matrice N3 Evaluation des offres .xlsmNom : Capture N°1.jpg
Affichages : 48
Taille : 84,3 KoNom : Capture d’écran N°2.jpg
Affichages : 50
Taille : 105,6 KoNom : Capture N°3.jpg
Affichages : 45
Taille : 139,9 Ko[ATTACH=CONFIG]658335[/ATTAC[/QUOTE][/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
    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
    Images attachées Images attachées  

Discussions similaires

  1. [Débutant] Création d'une matrice de confusion
    Par Alucard9800XT dans le forum MATLAB
    Réponses: 4
    Dernier message: 15/05/2007, 09h19
  2. [TP] Création d'une matrice
    Par amine6441 dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 03/03/2007, 16h20
  3. Réponses: 6
    Dernier message: 07/02/2007, 15h03
  4. Création d'une matrice d'entiers
    Par fleur de nostalgie dans le forum C
    Réponses: 6
    Dernier message: 21/12/2006, 14h17
  5. création d'onglets sous delphi
    Par lerouzes dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo