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 :

Interdire saisie "vide" "" dans liste de choix


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut Interdire saisie "vide" "" dans liste de choix
    Bonjour,

    Dans un classeur Excel, (Excel 2003 (11.8237.8221) SP3

    Sur une sheet Excel (pour l’exemple, Colonne E à J, ligne 18 à 37) j’ai une liste de choix qui est (0, D, I, R, NA, NS) pour certaines cellules.
    Le choix est défini par 5 critères.
    Toutes les cases de la liste de choix sont grisé interior.Color (Grise)
    La valeur initiale est 0 plus les Choix D I R NA NS
    Définie par données / validation / liste / Source : =Delivrable_status
    « Ignorer si vide » activée
    « Liste déroulante dans la cellule » activée
    « Appliquer ces modification aux cellules de paramètres identiques » désactivée

    Dans le cas d’une saisie (vide) "" j’utilise le code ci-dessous pour remettre la valeur initiale (zéro).

    Avec certaine manip à la souris ou clavier ( Supp, <- , Enter, ….) J’ai le code ci-dessous qui boucle avec lancement du débugger via la touche Echap.

    Avez-vous une autre solution pour interdire dans ces cellules un choix différent de (0, D, I, R, NA, NS) ?


    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
       Dim j As Long
        If Application.Intersect(Target, Range("E18:J37")) Is Nothing Then
        Else
            For i = 18 To 37
            For j = 5 To 10
            If ActiveSheet.Cells(i, j).Interior.Color = 12632256 And ActiveSheet.Cells(i, j) = "" Then
            ActiveCell = 0
            End If
            Next j
            Next i
        End If
    End Sub

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut pasclaire et le forum
    Sans chercher plus loin (on aimerait bien savoir quelles manips te coincent), Tu utilises Activecell, alors que la cellule modifiée est target !
    Ce n'est qu'à la validation de ta cellule par Enter que la macro _Change se lance, c'est-à-dire quand la cellule active change.

    Ensuite, pourquoi revérifier toute ta plage à chaque changement d'une seule cellule ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cel As Range
    If Intersect(Target, Range("E18:J37")) Is Nothing Then Exit Sub
    For Each Cel In Intersect(Target, Range("E18:J37"))
        If Cel.Interior.Color = 12632256 And Cel = "" Then Cel = 0
    Next Cel
    End Sub
    Attention, pas testée.
    D'autres remarques
    - Si tu veux tester la non condition, pas la peine de passer par else
    "If condition = False" ou "If Not Condition" marche aussi bien, en rendant le code plus lisible.
    - Dans le même ordre d'idée, l'indentation doit être là pour rendre le code plus lisible, pas "pour faire joli"
    - Utiliser .Color n'est pas forcément la meilleure solution. Regarde à .ColorIndex

    Mais si tu utilises les listes de validation, pourquoi refaire une telle macro ?
    A+

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Bonjour Gorfael,

    Ce code est tel qu'il est par ignorance de ma part pour ce type de test que j'ai très peu utilisé dans mes macros.

    Merci pour tes explications, j'ai modifié mon code en conséquence.
    Je n'ai pas provoqué la mise en boucle de ton code
    J’ai suivie ton conseil en utilisant .ColorIndex qui est plus facile à utiliser.

    (*) Une liste de diffusion est utilisé pour plusieurs cellules,
    Pour ces cellules,Il est possible supprimer le contenu de la cellule ce qui donne la valeur "" à la cellule soit different de (0, D, I, R, NA, NS)
    C'est pour cette raison que je test cette manipulation pour remettre la valeur initial.

    J'ai un indicateur ou je compte les cellules <> de ""
    Ci les cellules (*) son à "" le calcul est faut.


    Merci encore pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/10/2013, 04h09
  2. [AC-2007] Liste de choix dans liste de choix
    Par portedaix dans le forum IHM
    Réponses: 2
    Dernier message: 24/11/2009, 11h37
  3. [XL-2007] Image dans liste de choix
    Par zamoht dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2009, 18h10
  4. Réponses: 4
    Dernier message: 30/01/2007, 22h41
  5. Ajout nouveaux éléments dans liste de choix
    Par Crazyblinkgirl dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/06/2006, 16h17

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