Sélection cellules

GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 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.

5 réponses

Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
Oh c'est parfait ! Simple et efficace !

Merci !
0
GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
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
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

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

https://www.cjoint.com/
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
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
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
Non en tapant x dans la colonne K rien ne se passe.
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Soit tu as mal recopié le code soit les macros ne sont pas autorisées, car ce code fonctionne parfaitement !
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
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
GTA54 Messages postés 414 Date d'inscription   Statut Membre Dernière intervention   29
 
Bah j'aimerais bien que lorsqu'on supprime les "x" les lignes s'affichent.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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