Problème avec la fonction Intersect et cellule avec liste deroulante

Bonjour,

J'ai un tableau avec des cellules qui ont une liste déroulante de choix.

Je souhaite pouvoir détecter un changement fait sur ce tableau et colorer la cellule modifiée en jaune. Pour cela j'utilise la fonction Worksheet_Change.

Cela donne :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Tab_insc As ListObject
    Set Tab_insc = Sheets("Tableau inscription").ListObjects("Tab_inscription")

    If Not Intersect(Target, Tab_insc.DataBodyRange) Is Nothing Then
        If Tab_insc.DataBodyRange.Rows.Count = nb_ligne Then
            If val <> Target.Value Then
                Sheets("Tableau inscription").Cells(Target.Row, Target.Column).Interior.ColorIndex = 6
            End If
        Else
            Tab_insc.DataBodyRange.Rows(Target.Row - Tab_insc.HeaderRowRange.Row).Interior.ColorIndex = 6

        End If
    End If

End Sub

Mon problème vient de la ligne :

If Not Intersect(Target, Tab_insc.DataBodyRange) Is Nothing Then

Lorsque je double clique sur une cellule avec liste déroulante de mon tableau (par exemple par mégarde) je peux modifier le contenu de la cellule.

Si je veux ensuite cliquer sur la flèche me permettant d'accéder à ma liste de choix (car je n'ai pas envie d'écrire dans la cellule mais choisir un choix proposé) la fonction Intersect est en erreur.

Lorsque je clique sur le bouton pour avoir ma liste de choix alors que j'étais au préalable en modification de la cellule via le double clique, la fonction Worsheet_Change se lance.

Il doit y avoir alors un soucis ou la "Target" doit être mauvaise. Auriez-vous une solution car je ne vois pas comment palier à ce problème?

Je met ci-joint un fichier d'exemple.

Pour constater le problème vous devez :

1. Double cliquer sur une cellule du tableau inscription contenant une liste déroulante.

2. Cliquer sur la flèche de la liste déroulante juste après.

Merci et bonne journée à tous!

Bonjour,

je n'ai aucune erreur (sous excel 2013)

Bonsoir,

Steelson, l'erreur apparaît lorsqu'après un double clic, on entre dans le mode de saisie de la cellule, on y inscrit LouReeD (ou autre chose ! )sans valider et on clique directement sur la flèche de sélection de la liste de choix, du coup, ce clic sur la flèche déclenche "Worksheet_Change" alors qu'Exel est déjà en cours de "changement" puisque le mode de saisie dans la cellule est encore actif.

Un simple "Error Resume Next" en début de procédure, corrigera cet état "entre deux eaux" qui ne devrait pas être...

@ bientôt

LouReeD

@LouReeD, je confirme, pas d'anomalie chez moi ... je n'ai pas pu reproduire l'erreur.

Procédure :

  1. je double-clique sur une cellule
  2. je tape testxxxxxxx
  3. je sélectionne le triangle pour liste déroulante qui me propose INI et ALT
  4. je choisis l'un d'eux
  5. je passe à la cellule suivante capture d ecran 53

Bonjour à toutes et tous,

Comme Steelson, je ne constate pas d'erreur.

Sinon, je ne comprends pas tout !...

Val est une fonction VBA, un nom réservé (?). Remplacer val par v...

Dim Tab_inscription As ListObject
Dim Tab_RE As ListObject
Dim val As Variant
Dim nb_col As Integer
Dim nb_ligne As Integer
Dim nb_ligne_RE As Integer

Private Sub Worksheet_Change(ByVal Target As Range) 'Fonction appelée lorsque qu'une valeur est modifiée sur la feuille

    'Target.Font.ColorIndex = 5
    Dim Tab_insc As ListObject
    Set Tab_insc = Sheets("Tableau inscription").ListObjects("Tab_inscription")

    If Not Intersect(Target, Tab_insc.DataBodyRange) Is Nothing Then
        If Tab_insc.DataBodyRange.Rows.Count = nb_ligne Then
            If val <> Target.Value Then
                Sheets("Tableau inscription").Cells(Target.Row, Target.Column).Interior.ColorIndex = 6
            End If
        Else
            Tab_insc.DataBodyRange.Rows(Target.Row - Tab_insc.HeaderRowRange.Row).Interior.ColorIndex = 6

        End If
    End If

End Sub

'On enregistre la valeur de la cellule sur laquelle on clique pour voir si elle change et la comparer dans la fonction juste au dessus
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Fonction appelé lorsque l'on selectionne une cellule

    Dim Tab_insc As ListObject
    Set Tab_insc = Sheets("Tableau inscription").ListObjects("Tab_inscription")
    nb_ligne = Tab_insc.DataBodyRange.Rows.Count

    If Not Intersect(Target, Tab_insc.DataBodyRange) Is Nothing Then
        val = Target.Value
    End If

End Sub

Cdlt.

Bonjour,

Suite à des tests ce matin : pas d'erreur si l'éditeur VBA est fermé, s'il est ouvert une erreur est détectée !

Jean-Éric et Steelson, pouvaient vous confirmer ?

J'ai fais les tests avec le minimum : une cellule F6 avec une liste de choix, un code Change avec un test Intersect. Si VBA fermé = OK, si ouvert = pb sur l'intersect.

@ bientôt

LouReeD

Re,

@LouReed,

A priori, aucun impact que l'éditeur soit (affiché) actif ou pas !?

Cdlt.

Jean-Éric et Steelson, pouvaient vous confirmer ?

exact ! éditeur ouvert cela bloque ! curieux ...

solution : fermer l'éditeur !

Bonjour à tous !

Tout d'abord merci pour vos réponses !

En effet lorsque je ferme l'éditeur il n'y a plus de problème . Je l'ai toujours d'ouvert donc je n'ai pas vu que ça venait de là xD.

Je clos donc le sujet xD.

Bonne journée à tous.

Bonjour,

Un petit poème :

Sur'c't'affaire

J'suis vert...

Ha ben non

C'est Stellson !

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme fonction intersect liste deroulante"