Sélection cellules

Fermé
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 - 28 juin 2013 à 14:07
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 29 juin 2013 à 13:52
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 18377 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 4 mars 2025 5 127
28 juin 2013 à 15:31
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 jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 28
28 juin 2013 à 15:35
Oh c'est parfait ! Simple et efficace !

Merci !
0
GTA54 Messages postés 414 Date d'inscription jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 28
28 juin 2013 à 15:44
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 18377 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 4 mars 2025 5 127
28 juin 2013 à 15:51
Re,

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

https://www.cjoint.com/
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
28 juin 2013 à 16:03
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 jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 28
28 juin 2013 à 16:16
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 28/06/2013 à 16:44
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 jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 28
28 juin 2013 à 16:49
Non en tapant x dans la colonne K rien ne se passe.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 28/06/2013 à 16:55
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 18377 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 4 mars 2025 5 127
28 juin 2013 à 16:23
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 jeudi 23 février 2012 Statut Membre Dernière intervention 7 août 2019 28
28 juin 2013 à 16:26
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 mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 255
Modifié par eriiic le 29/06/2013 à 13:54
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