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 :

Selection d'une case non valide - VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Par défaut Selection d'une case non valide - VBA
    Bonjour à vous,


    J'aurais besoin de votre aide pour l'amélioration d'un projet que j'ai en cours.
    Pour faire simple, j'ai déjà la base en dessous, et j'aurais aimé ajouter quelques chose en plus.
    Puisqu'il reconnait qu'une case dans la zone définie n'est pas valide, je me demandais si il était possible de la sélectionner, puis de la mettre en évidence (couleur, gras etc...), tout ça sous vBA évidemment.

    module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function nbVides(zone As Range) As Boolean
    Dim cel As Range
    For Each cel In zone
    If Not IsNumeric(cel) Or cel < 0 Or cel = "" Then
    nbVides = True
    Exit Function
    End If
    Next
     
    End Function
    et fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Worksheet_Deactivate()
     
     
     
    If nbVides(Range("nonvall")) Then
    MsgBox "Saisie Incorrectes", vbOKOnly + vbCritical
    Feuil2.Activate
    End If
     
     
     
    End Sub
    PS : ici la cellule "nonvall" est un groupement de cellules fait sous excell répondant à la même requête..
    Pourriez-vous m'aider?
    Merci d'avance
    Cordialement,
    Ela_

  2. #2
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Salut,

    Petit exemple vite fait (pour ne pas dire, à l'arrache...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Colorier(zone As Range)
     
    Dim cel As Range
        For Each cel In zone
            cel.Interior.Color = IIf(Not IsNumeric(cel) Or cel < 0 Or cel = "", vbRed, vbGreen)
            cel.Characters.Font.Color = IIf(Not IsNumeric(cel) Or cel < 0 Or cel = "", vbBlue, vbYellow)
            cel.Characters.Font.Bold = (Not IsNumeric(cel) Or cel < 0 Or cel = "")
    Next
     
    End Sub
    Il ne te reste plus qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Colorier Range("nonvall")
    Tu peux aussi passer par les MFC (mises en forme conditionnelles), mais si tu préfères VBA...

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Par défaut
    Merci, mais cependant, lorsque l'on vient mettre une donnée valide, la couleur ne se désactive pas.

    du coup j'ai essayé ça directement, et ça marche plutôt bien :
    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
    16
     
    Function nbVides(zone As Range) As Boolean
    Dim cel As Range
        For Each cel In zone
            If Not IsNumeric(cel) Or cel < 0 Or cel = "" Then
                nbVides = True
                cel.Interior.ColorIndex = 3
            Else
                cel.Interior.ColorIndex = xlNone
                cel.Characters.Font.Bold
     
     
            End If
        Next
     
    End Function
    Cependant, cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel.Characters.Font.Bold
    ne fonctionne pas, il ne reconnait pas la bold...
    De plus, je travaille sur une feuille à 300 lignes, serait il possible de placer la celule au centre de la feuille excell ?
    Serait-il également possible de sélectionner la dite cellule dont la saisie n'est pas valide ?

    Merci d'avance !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel.Characters.Font.Bold = True (ou False)
    devra être mieux...

    Et pour déplacer ta zone visible vers la cellule "cel":
    Et pour que la colorisation () s'applique dès que tu modifies une valeur, il faut appeler la fonction Colorier() comme ça (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
       Colorier Target
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Comme tu oblige le renseignement des cellules (Or Cel = "") je pense qu'il serait préférable d'agir sur les bordures plutôt que sur la fonte car si la cellule est vide et que la zone est assez grande, la recherche visuelle va être un peu plus compliquée car étant vide, aucun résultat visible :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Worksheet_Deactivate()
     
        nbVides Range("A1:C10")
     
    End Sub
     
    Sub nbVides(zone As Range)
     
        Dim Cel As Range
     
        For Each Cel In zone
     
            If Not IsNumeric(Cel) Or Cel < 0 Or Cel = "" Then
     
                Bordure Cel, True
                MsgBox "Saisie non valide en cellule " & Cel.Address(0, 0) & " !"
                Me.Activate
                Exit For
     
            Else
     
                Bordure Cel, False
     
            End If
        Next
     
    End Sub
     
    Sub Bordure(Cel As Range, Colorer As Boolean)
     
        Dim I As Integer
     
        For I = 7 To 10
     
            With Cel.Borders(I)
     
                .Weight = IIf(Colorer = True, 4, 1)
                .LineStyle = IIf(Colorer = True, 1, xlNone)
                .ColorIndex = IIf(Colorer = True, 3, xlNone)
     
            End With
     
        Next I
     
    End Sub
    Hervé.

Discussions similaires

  1. Selection d'une case dans le dataGridview
    Par abbd dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/03/2008, 12h36
  2. DBGrid, récupération de la selection d'une case
    Par Finntroll dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/12/2007, 15h39
  3. Cocher une case à cocher par vba
    Par jean-paul lepetit dans le forum VBA Word
    Réponses: 2
    Dernier message: 10/09/2007, 15h49
  4. Rendre une Page non valide
    Par miniseb dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/08/2007, 11h14
  5. selection d'une case dans un formulaire
    Par salsero1 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/05/2007, 17h39

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