Dévérouiller la sélection d'une liste déroulante ajoutée dynamiquement

Bonjour, j'ai un tableau qui est basé sur une tableau croisé dynamique (TCD) situé sur une autre feuille.

Dans ce tableau j'ai des lignes qui permettent la sélection d'un pays dans une liste déroulante (basé sur le TCD) et le montant attribué à ce pays est récupéré du TCD:

image

J'ai mis en place une protection (mot de passe: 000) pour que les montants ne soient pas modifiés ainsi que les listes déroulantes des lignes déjà insérées.

Un bouton "Add a new country" me permet d'ajouter une nouvelle ligne grâce à du VBA. Ainsi j'ai déverrouillé temporairement la feuille puis ajouté la ligne et enfin vérouillé à nouveau la feuille.

Ma fonction VBA:

Sub AddANewParticipant()

    With ActiveSheet.ListObjects("Table6")
        Sheets("Estimated Costs").Unprotect Password:="000"
        ligne = .ListRows.Count + .HeaderRowRange.Row + 2
        Rows(ligne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .ListRows.Add
        .DataBodyRange.Cells(.ListRows.Count, 2).Select
    End With

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=ParticipantCountries"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    Sheets("Estimated Costs").Protect Password:="000"

End Sub

Mon problème est que l'on ne peut plus sélectionner une nouvelle valeur dans la liste déroulante ajoutée et je ne sais pas comment le dévérouiller ou vérouiller des cellules de la nouvelle ligne ajoutée. Pourriez-vous m'aider s'il vous plaît?

Ici le fichier:

Bonjour,

Comme tu es en tableau, tu n'as pas besoin de supprimer cela

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=ParticipantCountries"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

donc pour moi le code se résume ainsi

Sub AddANewParticipant()

    With ActiveSheet.ListObjects("Table6")
        Sheets("Estimated Costs").Unprotect Password:="000"
        ligne = .ListRows.Count + .HeaderRowRange.Row + 2
        Rows(ligne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .ListRows.Add
        .DataBodyRange.Cells(.ListRows.Count, 2).Select
    End With

    Sheets("Estimated Costs").Protect Password:="000"

End Sub

Merci pour ta réponse, mais mon problème d'origine n'est pas résolu. Avec le verrouillage à la fin de la fonction, je ne peux pas sélectionner de valeur dans la liste déroulante:

image

la personne doit pouvoir sélectionner une valeur dans cette cellule (mais les cellules des autres lignes doivent à nouveau être dérouillées comme à l'origine). Le problème vient du fait je pense qu'en insérant une nouvelle ligne, le paramètre de la cellule est locked.

Comment je peux déverrouillé seulement cette cellule après l'ajout de la ligne ? ?

J'ai résolu mon problème avec la ligne:

        ActiveCell.Locked = False

Voici mon code:

    With ActiveSheet.ListObjects("Table6")
        Sheets("Estimated Costs").Unprotect Password:="000"
        ligne = .ListRows.Count + .HeaderRowRange.Row + 2
        Rows(ligne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        .ListRows.Add
        .DataBodyRange.Cells(.ListRows.Count, 2).Select

        ActiveCell.Locked = False
        Sheets("Estimated Costs").Protect Password:="000"
    End With

Parfait

si ton problème est résolu, n'oublie de fermer le fil d discussion en cliquant sur V

Rechercher des sujets similaires à "deverouiller selection liste deroulante ajoutee dynamiquement"