Sélection cellules

GTA54 Messages postés 499 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'aimerais savoir si il était possible de définir des conditions de sélection de cellules ?

Je m'explique :

J'ai un fichier où l'utilisateur doit rentrer des "x" en colonne K en face de chaque ligne qu'il veut masquer. Par exemple, l'utilisateur met un "x" en cellule K7 et c'est toute la ligne 7 du fichier qui se masque.
Voici la macro :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 11 Then Exit Sub 'Si la colonne de la cellule modifiée n'est pas la G, alors sortie de l'évènement

If Target.Value = "x" Or "X" Then Rows(Target.Row).Hidden = True 'j'ai utilisé x comme ton exemple à toi de voir ce que tu veux vraiment, !! la casse est importante sinon utiliser ucase("x")
Cells(Target.Row + 1, 11).Select 'se place en dessous de la cellule modifiée, au cas ou l'utilisateur valide par Tab ou flèche droite...
End Sub


Ensuite, si je veux réafficher toutes les lignes, c'est cette macro qui s'exécute :

Private Sub CommandButton1_Click()
Sheets("Plan contrôle GENERIQUE").Cells.EntireRow.Hidden = False
End Sub


Une fois les lignes affichées, il reste toujours les "x" que l'opérateur a mis auparavant. Et c'est maintenant que ça coince ... Si il supprime les "x" des cellules une par une, la macro fonctionne. Mais si il fait une sélection de plusieurs cellules afin de supprimer plusieurs "x", la macro m'affiche un message d'erreur ....

J'aimerais donc savoir si une astuce existait afin que l'opérateur ne puisse pas faire une sélection multiple (seulement en colonne K) afin qu'il sélectionne puis supprime cellule par cellule ... Ce n'est peut-être pas la meilleure solution, et je vous écoute si vous en avez d'autre également !

Merci d'avance.

--
"Mais comment faire,
Comment lui dire,
Comment lui faire voir,
Ma planète,
Artificielle..."

-M-

5 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Pourquoi ne pas laisser la possibilité de faire une sélection multiple et simplement gérer l'erreur, il suffit en début de code insérer cette ligne

    On Error Resume Next
    0
    1. GTA54 Messages postés 499 Statut Membre 30
       
      Oh c'est parfait ! Simple et efficace !

      Merci !
      0
    2. GTA54 Messages postés 499 Statut Membre 30
       
      J'ai parlé trop vite !

      En fait quand j'utilises mon bouton pour afficher toutes les lignes, toutes les lignes s'affichent, je vois bien les x... et au moment où je fais la sélection des "x" puis appuie sur Supp, les "x" se suppriment mais les lignes (où il y avait des "x") se masque à nouveau ! Je ne comprends pas...
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Tu peux joindre ton fichier sans note confidentielle que je vois, avec ce lien

    https://www.cjoint.com/
    0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Cela ne répond pas exactement à la question mais pour résoudre le problème je pense qu'il est préférable de supprimer la cause de l'erreur et aussi de pouvoir écrire ou effacer plusieurs X à la fois.
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Target.Column <> 11 Then Exit Sub
    If Target.Columns.Count > 1 Then Exit Sub
    If Intersect(Target, UsedRange) Is Nothing Then Exit Sub
    For Each c In Intersect(Target, UsedRange).Cells
      If UCase(c.Value) = "X" Then
        c.EntireRow.Hidden = True
        Cells(c.Row + 1, 11).Select
      End If
    Next c
    End Sub

    Nota : Pour écrire (et donc masquer) sur plusieurs lignes à la fois, sélectionner la plage de la colonne K, saisir X (sans dé-sélectionner) puis valider par Maj+Ctrl+Entrée
    0
    1. GTA54 Messages postés 499 Statut Membre 30
       
      Et comment l'opération de masquer se déclenche ? Là ça ne marche pas ... Et Maj + Ctrl + Entrée ce n'est pas très pratique pour un opérateur qui n'utilises pas Excel quotidiennement ...
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Pour masquer, il suffit de taper simplement X ou x dans la colonne k
      « Maj + Ctrl + Entrée ce n'est pas très pratique pour un opérateur qui n'utilises pas Excel quotidiennement .» c'est comme ça qu'Excel fonctionne mais tu n'est pas obligé d'utiliser cette fonctionnalité !
      0
    3. GTA54 Messages postés 499 Statut Membre 30
       
      Non en tapant x dans la colonne K rien ne se passe.
      0
    4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Soit tu as mal recopié le code soit les macros ne sont pas autorisées, car ce code fonctionne parfaitement !
      0
  4. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    l'erreur est normale, le code prévoit le déclenchement à la cellule Target, tu sélectionne plusieurs cellules Excel ne comprend pas et se met en erreur cette ligne de code en début des deux codes doit supprimer l'erreur

    On Error Resume Next

    si cela ne suffit pas il est possible de gérer l'erreur d'une autre façon
    0
    1. GTA54 Messages postés 499 Statut Membre 30
       
      Bah j'aimerais bien que lorsqu'on supprime les "x" les lignes s'affichent.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Une proposition qui traite la plage modifiée (en suppression ou en ajout avec Shift+Ctrl+Entrée):
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim c As Range
        If Target.Column <> 11 Then Exit Sub
        For Each c In Target
            c.EntireRow.Hidden = UCase(c) = "X"
        Next c
    End Sub 

    Mais il te faut également une macro qui remasque les X non effacés sur la colonne puisqu'ils ne sont pas concernés par l'évènement change :
    Private Sub CommandButton2_Click()
        Dim lig As Long
        Application.ScreenUpdating = False
        For lig = 2 To Cells(Rows.Count, "K").End(xlUp).Row
            If UCase(Cells(lig, "K")) = "X" Then Rows(lig).Hidden = True
        Next lig
        Application.ScreenUpdating = True
    End Sub

    Tu pourrais ne faire qu'un seul bouton qui alternativement affiche tout ou masque.
    https://www.cjoint.com/?CFDnZUAycbv

    eric

    Jamais tu ne répondras à un mp non sollicité...
    Bon, ça c'est fait.
    0