Message d'erreur :Fonction supprimée: Validation des données dans la partie

Bonjour je fais appel à vous car j'ai un message d'erreur qui s'affiche à l'ouverture de mon fichier excel contenant une macro :

Message d'erreur:

1 2

Macro:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 'La macro se lance si la sélection d'une cellule de la feuille active change. Le paramètre target correspond à la cellule modifiée.
    ActiveSheet.Unprotect

    Dim tableau_codification

    If Not Intersect(Target, Columns("C")) Is Nothing And Target.Count = 1 Then 
        If Target.Offset(0, -1) <> Empty Then
            Dim Plage_Listes As Range
            Dim Liste As String
            Set Plage_Listes = Target
            Liste = "Choix1, Choix2, Choix3"
            With Plage_Listes.Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:=Liste
                .IgnoreBlank = True 
                .ShowError = False 
            End With
        End If
    End If 
End Sub

Merci d'avance

Bonjour

Ce serait mieux de voir le fichier en question

Possible ?

Cordialement

Bonjour,

Liste = "Choix1, Choix2, Choix3"

essayer plutôt :

Liste = "Choix1; Choix2; Choix3"

Bonjour,

En voulant vous transmettre mon fichier, j'ai remplacé les choix de ma liste déroulante par choix1, choix2 et choix3 et l'erreur a disparu.

Si je met des points-virgules, mes choix apparaissent en ligne.

Je pense donc que l'erreur viens du nombre de caractères de ma liste déroulante : 778 caractères en tout et 40 choix

VBA Impose t-il un nombre de caractères?

Il faudrait peut être diviser la liste de choix en deux sous-listes?

En soit le message d'erreur n'empêche pas la macro de fonctionner... mais j'aimerais tout de même qu'il n'apparaisse pas

je pense donc que l'erreur viens du nombre de caractères de ma liste déroulante : 778 caractères en tout

Exact. Car via VBA, le nombre de caractères est limité à 256.

Comment peut on résoudre le problème ?

Faire plusieurs listes?

Faire une macro qui fait en sorte que le message d'erreur ne s'ouvre pas?

Bonjour,

La seule solution, c'est d'organiser ses listes autrement.

C'est-à-dire ?

Je n'ai pas la possibilité de raccourcir ma liste...

Dans ce cas, la solution est de créer une référence de nom (par exemple "Choix") correspondant à l'adresse de cette liste. Du coup, le code devient :

 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=Choix"

et il n'y a plus d'erreur.

Dans ce cas, la solution est de créer une référence de nom (par exemple "Choix") correspondant à l'adresse de cette liste. Du coup, le code devient :

 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=Choix"

et il n'y a plus d'erreur.

Qu'est-ce une référence de nom ?

Merci pour votre aide

Qu'est-ce une référence de nom ?

1- Sélectionner la plage correspondant à la liste

2- Menu Formules --> définir un nom

voir ce lien :

https://support.office.com/fr-fr/article/d%C3%A9finir-et-utiliser-des-noms-dans-les-formules-4d0f13ac-53b7-422e-afd2-abd7ff379c64

Bonjour, voici que j'ai fais :

Création d'une référence de nom appelée Liste_Choix

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    ActiveSheet.Unprotect

    Dim tableau_codification

    If Not Intersect(Target, Columns("C")) Is Nothing And Target.Count = 1 Then 
        If Target.Offset(0, -1) <> Empty Then
            Dim Plage_Listes As Range
            Set Plage_Listes = Target
            With Plage_Listes.Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=Liste_Choix"
                .IgnoreBlank = True 
                .ShowError = False 
            End With
        End If
    End If 
End Sub

Mais cela ne fonctionne pas, j'imagine qu'il faut "récupérer" cette référence de nom car là il ne sait pas ce qu'est "Liste_Choix"

Par avance, merci

Mais cela ne fonctionne pas, j'imagine qu'il faut "récupérer" cette référence de nom car là il ne sait pas ce qu'est "Liste_Choix"

Il faut définir cette référence dans la feuille où se trouve votre liste.

voir ce tutoriel :

[/quote]

Il faut définir cette référence dans la feuille où se trouve votre liste.

voir ce tutoriel :

[/quote]

Ma référence est définie non ? :

1

J'ai modifié le code comme ceci :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveSheet.Unprotect

    Dim tableau_codification

    If Not Intersect(Target, Columns("C")) Is Nothing And Target.Count = 1
        If Target.Offset(0, -1) <> Empty Then 
            Dim Plage_Listes As Range
            Dim Liste As String
            Set Plage_Listes = Target
            Liste = Range("Liste_Choix").Value
            With Plage_Listes.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:=Liste
                '.IgnoreBlank = False
                '.ShowError = False
            End With
        End If
    End If
End Sub
    

ci-dessous correction

Private Sub Workbook_SheetSelectionChang(ByVal Sh As Object, ByVal Target As Range)
    ActiveSheet.Unprotect

    Dim tableau_codification

    If Not Intersect(Target, Columns("C")) Is Nothing And Target.Count = 1 Then
        If Target.Offset(0, -1) <> Empty Then
            Dim Plage_Listes As Range
            Dim Liste As String
            Set Plage_Listes = Target
            Liste = "=Liste_Choix"
            With Plage_Listes.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:=Liste
                '.IgnoreBlank = False
                '.ShowError = False
            End With
        End If
    End If
End Sub

Merci pour votre aide, le message d'erreur n'a plus l'aire de s'afficher

Encore une petite question : J'ai voulu créer ma référence de nom depuis ma macro :

    ActiveWorkbook.Names.Add _ 
        Name:="Liste_Choix", _ 
        RefersTo:="=ActiveSheet!$ZZ$2:$ZZ$42" 

Mais quand je vérifie si cela fonctionne dans Gestionnaire des noms, une référence a bien été créé mais dans valeur, il y a {...} au lieu de ma liste

ci-dessous code corrigé

ActiveWorkbook.Names.Add _
        Name:="Liste_Choix", _
        RefersTo:="=" & Range("$ZZ$2:$ZZ$42").Address(1, 1, 1, 1)

Merci !

Rechercher des sujets similaires à "message erreur fonction supprimee validation donnees partie"