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 :

Système de case a cocher


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut Système de case a cocher
    Bonjour à tous,

    Cela fait un petit moment que je cherche une solution à ce que je souhaite obtenir.

    Mais je n'ai pas la logique nécessaire pour arriver à mon but final

    En faite, je cherche à avoir ceci :

    Nom : CAPTURE.png
Affichages : 2719
Taille : 5,3 Ko

    Pour une plage définie (B2:C4), quand je fais un simple clic gauche, par exemple, sur la case B2, la case se coche automatique avec une petite croix "X" et le fond devient vert (vu que c'est la colonne "OK"). Vise versa quand on clique dans la colonne "KO", une petite croix et un fond rouge.

    Mais le problème, c'est que je n'arrive déjà pas à faire des conditions, exemple :

    Quand on clique sur B2, par défaut la celulle C2 ce vide. Idem quand on clique C2, la celulle B2 doit aussi se vider ...

    Après avoir fait des tests, j'ai ce code si :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
       If Target.Column = 2 Then
         Target.Offset(0, 0) = "X"
        Else
         Target.Offset(0, 1) = ""
       End If
     
    End Sub
    J'ai bien ma petite croix dans la seconde colonne mais après je n'ai pas trop les compétences pour trouver le bon algorithme

    Merci de votre aide et bon dimanche

    matinho

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un code qui fonctionne si on fait un double clic sur une cellule des colonnes 2, 3, 5 et 6 dans les limites de la région de la plage A2:F4
    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_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      If Application.Intersect(Target, Me.Range("A2:F4")) Is Nothing Or Target.Count > 1 Then Exit Sub
       Cancel = False
       With Target
        Select Case .Column
         Case 2, 5
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, 1) = IIf(.Value = "X", "", "X")
         Case 3, 6
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, -1) = IIf(.Value = "X", "", "X")
        End Select
       End With
       Cancel = True
    End Sub
    Ce même code fonctionne également pour la procédure événementielle Worksheet_BeforeRightClick à condition bien entendu de le copier à l'intérieur de cette procédure
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    Bonjour Monsieur Tulliez,

    Merci à vous car le code fonctionne très bien

    J'ai étendu les cases a sélectionner (avec plusieurs autres colonnes) et j'ai pu mettre des fantaisies pour rendre propre ma feuille de calcul, j'ai fait ceci :

    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
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      If Application.Intersect(Target, Me.Range("A6:O28")) Is Nothing Or Target.Count > 1 Then Exit Sub
       Cancel = False
       With Target
        Select Case .Column
         Case 2, 5, 8, 11, 14, 17
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, 1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = RGB(0, 192, 0)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
         Case 3, 6, 9, 12, 15, 18
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, -1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = RGB(255, 0, 0)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
        End Select
       End With
       Cancel = True
    End Sub
    Est ce propre au niveau du code ? ou c'est "bordélique" ^^

    Pour les colonnes "OK" de gauche, nous avons du vert et les colonnes "KO" de droite du rouge.

    J'essaie de mettre ce code : .Interior.Color = RGB(255, 255, 255) pour mettre du blanc la ou il n'y a pas de croix, mais j'ai toujours des erreurs de syntaxe :/

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il existe des constantes pour les couleurs le blanc c'est vbWhite, le rouge vbRed etc...
    vbGreen n'est pas le même vert que RGB(0, 192, 0), à toi de voir.
    Pour les couleurs, tu dois faire la même chose que pour les croix. Il faut gérer l'autre colonne.
    J'ai mis en rouge les deux lignes dont j'ai changé le code. A toi de faire le changement dans l'autre partie.
    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
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      If Application.Intersect(Target, Me.Range("A6:O28")) Is Nothing Or Target.Count > 1 Then Exit Sub
       Cancel = False
       With Target
        Select Case .Column
         Case 2, 5, 8, 11, 14, 17
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, 1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = vbGreen ' RGB(0, 192, 0)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
         Case 3, 6, 9, 12, 15, 18
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, -1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = IIf(.Value = "X", vbRed, vbWhite) ' RGB(255, 0, 0)
          .Offset(0, -1).Interior.Color = IIf(.Value = "X", vbWhite, vbGreen)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
        End Select
       End With
       Cancel = True
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 137
    Par défaut
    Voici le code final :

    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
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      If Application.Intersect(Target, Me.Range("A6:O28")) Is Nothing Or Target.Count > 1 Then Exit Sub
       Cancel = False
       With Target
        Select Case .Column
         Case 2, 5, 8, 11, 14, 17
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, 1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = IIf(.Value = "X", vbGreen, vbWhite) ' RGB(255, 0, 0)
          .Offset(0, 1).Interior.Color = IIf(.Value = "X", vbWhite, vbRed)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
         Case 3, 6, 9, 12, 15, 18
          .Value = IIf(.Value = "X", "", "X"): .Offset(0, -1) = IIf(.Value = "X", "", "X")
          .Font.Bold = True
          .Interior.Color = IIf(.Value = "X", vbRed, vbWhite) ' RGB(255, 0, 0)
          .Offset(0, -1).Interior.Color = IIf(.Value = "X", vbWhite, vbGreen)
          .Font.Size = 11
          .HorizontalAlignment = xlCenter
        End Select
       End With
       Cancel = True
    End Sub
    Tout fonctionne comme il faut, merci encore à vous

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

Discussions similaires

  1. [AC-2003] Formulaire listes déroulantes + système de cases à cocher
    Par Skiitle dans le forum IHM
    Réponses: 2
    Dernier message: 16/04/2012, 15h10
  2. [WebForms]Ajout d'une case a cocher dans l'entête d'un DataGrid
    Par julio84 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/06/2005, 15h50
  3. Probleme de cases a cocher...
    Par linou dans le forum Web
    Réponses: 3
    Dernier message: 25/05/2005, 14h37
  4. Réponses: 3
    Dernier message: 10/05/2005, 15h20
  5. [Swing]Case a cocher JTable, et Renderer
    Par bibx dans le forum Composants
    Réponses: 16
    Dernier message: 29/12/2004, 14h49

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