[Excel2016] SyntaxeTarget.SpecialCells(xlCellTypeAllValidation)

Bonjour Tous,

J’ai trouvé ce code VBA (crédit à l’auteur dont j’ai oublié le nom) et que j’ai tenté de documenter à l’aide de mes lectures (en italique)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

‘Procédure si une cellule de la feuille est sélectionnée. Le paramètre Target correspond à la cellule sélectionnée

[Dim V1 As Range ‘Déclaration de la variable V1 comme plage de cellule avec l’instruction DIM … As Range

If Target.Count > 1 Then Exit Sub ‘Si plus d’une cellule est sélectionnée, fin de la Sub…

Set V1 = Target.SpecialCells(xlCellTypeAllValidation) ‘Attribution d’une valeur à V1 avec instruction SET

If Not Intersect(V1, Target) Is Nothing Then ‘Procédure déclenchée si clic dans n’importe quelle cellule avec critère validation

[b]Target = Left(Target, 3)

End If

End Sub[/b]

J’aimerais modifier cette procédure évenementielle pour l’appliquer à 1 colonne spécifique ayant un critère de validation.

Je ne sais pas comment procéder.

Merci pour votre aide

Mwasikitoko

Bonjour,

Ligne à adapter en fonction de la colonne

Set V1 = Target.SpecialCells(xlCellTypeAllValidation).Columns("A:A") 

Cdt

Bonjour,

Un peu confus !?

Cdlt.

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns(1)) Is Nothing And Target.Count = 1 Then
        If IsDataValidation(Target) Then Target.Value = Left(Target.Value, 3)
    End If
End Sub

Private Function IsDataValidation(Cell As Range)
Dim n As Long
    On Error Resume Next
    n = Cell.SpecialCells(xlCellTypeAllValidation).Count
    If n > 0 Then IsDataValidation = True
End Function

Merci Eric,

Je teste le code et vous tiens informé.

Mwasikitoko

Bonjour,

Ligne à adapter en fonction de la colonne

Set V1 = Target.SpecialCells(xlCellTypeAllValidation).Columns("A:A") 

Cdt

Merci pour la contribution.

Je teste et vous informe

Mwasikitoko

Bonjour,

Ligne à adapter en fonction de la colonne

Set V1 = Target.SpecialCells(xlCellTypeAllValidation).Columns("A:A") 

Cdt

J'ai adapté le code sans succès... car l'instruction Left(Target, 3) ne se déclenche pas et j'ai donc toute la chaîne de caractères de Target qui s'affiche et non les 3 premiers caractères

Mwasikiyoko

Option Eplicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns(1)) Is Nothing And Target.Count = 1 Then
        If IsDataValidation(Target) Then Target.Value = Left(Target.Value, 3)
    End If
End Sub

Private Function IsDataValidation(Cell As Range)
Dim n As Long
    On Error Resume Next
    n = Cell.SpecialCells(xlCellTypeAllValidation).Count
    If n > 0 Then IsDataValidation = True
End Function 

Bonjour Eric,

J'ai copié le code ...cela ne marchait pas...

Après j'ai réalisé que je n'avais pas contextualisé le code...

Et donc j'ai recherché dans le code ce qui pouvait être modifiable et j'ai saisi que je devais modifier columns(1) en columns(10).

Merci...

Par contre, un autre petit souci :

1. Je fais le choix dans la liste de validation

2. Je valide

3. C'est la chaîne de caractères qui s'affiche dans sa totalité

4. je suis obligée de cliquer hors de la cellule pour avoir les 3 premiers caractères...

C'est vraiment pas facile

Mwasikitoko

Bonjour,

Une autre proposition à étudier.

Plus de détails dans le fichier joint.

Cdlt.

14mwasikitoko.xlsm (25.70 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 10 And Target.Count = 1 Then
        'If IsDataValidation(Target) Then
            Application.EnableEvents = False
            Target.Value = VBA.Left(Target.Value, 3)
            Application.EnableEvents = True
        'End If
    End If
End Sub

Bonjour mwasikitoko et bonjour Jean-Eric,

La proposition que j'ai faite, je l'ai testée et elle fonctionne.

Place plusieurs listes de validation dans ta feuille dont une en colonne A et tu verras que seule celle en colonne A déclenchera la procédure.

Maintenant si tu veux que la liste de validation soit modifiée à 3 caractères nos propositions ne sont pas celles-ci et la question n'est pas formulée correctement.

Le mieux aurait été d'avoir un fichier exemple avec le résultat attendu.

Bonne journée à vous deux

Bonjour,

Une autre proposition à étudier.

Plus de détails dans le fichier joint.

Cdlt.

mwasikitoko.xlsm

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 10 And Target.Count = 1 Then
        'If IsDataValidation(Target) Then
            Application.EnableEvents = False
            Target.Value = VBA.Left(Target.Value, 3)
            Application.EnableEvents = True
        'End If
    End If
End Sub

Merci beaucoup Jean-Eric,

j'ai testé le fichier et c'est exactement ce que j'attendais...

Merci pour tout...

Je n'ai pas saisis tout le code mais je pense que le mieux pour que je progresse est d'utiliser l'aide VBA.

J'apprécie l'effort fait pour mettre la liste de validation dans la colonne 10

Trop sympa pour la bleue que je suis

Merci ddetp88

Effectivement je pense que je ne suis pas bien exprimée...

Mais le code que tu m'as envoyé me permet également de voir les différentes possibiltés du langage et de progresser.

Merci pour la contribution

Cdt

Mwasikitoko

Rechercher des sujets similaires à "excel2016 syntaxetarget specialcells xlcelltypeallvalidation"