Macro qui bloque lors de l'effacement d'une sélection

Bonsoir,

J’ai un souci avec le fichier ci-joint. Une macro - mise en place avec l’aide du Forum, notamment de Galopin - cache les lignes 23 à 25 de la feuille « Zusammenfassung » si respectivement les cellules E22 des feuilles « PK Post 3 », « PK Post 4» et « PK Post 5 » comportent un zéro ou sont vides.

Si j’efface un chiffre en place par exemple dans la cellule E22 de la feuille « PK Post 3 », la ligne 23 de la feuille « Zusammenfassung » est correctement masquée. Par contre, si j’efface deux cellules à la fois, disons la sélection E22 :E23, la macro bloque.

Savez-vous comment on pourrait éviter cela ?

Amicalement

Bonsoir,

essaye

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("E22")) Is Nothing Then
    Application.EnableEvents = False
    Sheets("Zusammenfassung").Rows(23).Hidden = True
    Selection = 0
    Application.EnableEvents = True
End If
End Sub

Amicalement

Claude.

bonjour,

Ce n'est plus vraiment le même problème !

Une solution

a=

Bonjour galopin, à tous,

Très intéressante ta ligne de code

Sheets("Zusammenfassung").Rows(23).Hidden = Range("E32") = 0

Au départ je ne l'avais pas comprise,

elle remplace avantageusement un If

Je prends note

Bonne journée

Claude.

Bonsoir tout le monde,

Merci à Claude et à Galopin pour leur aide.

Claude,

J’ai essayé de placer ton code dans la feuille 3, mais si par la suite j'efface j'efface une sélection, à la place d'avoir des cellules vides, j'obtiens des cellules remplies de 0, ce qui crée des problèmes dans d'autres cellules où se trouvent des formules (#VALEUR!, etc.). Je trouve cette insertion non désirée de 0 assez bizarre.

Galopin,

Ta solution et très intéressante et semble répondre absolument à mon attente.

Mais si un tel code peut faire référence à une cellule comportant une formule dans une autre feuille, pourquoi ne peut-on pas placer un code directement dans la feuille concernée (par exemple dans mon premier fichier joint, le placer dans la feuille "Zusammenfassung" en faisant référence - pour masquer les lignes correspondantes - aux cellules J23, J24 et J25 ? Est-ce parce qu'il faut un événement "Change" ?

Bonne soirée

Bonsoir,

yvouille a écrit :

Est-ce parce qu'il faut un événement "Change" ?

Absolument. Or l'évènement Change ne se déclanche pas sur un lien.

Tout au plus peut-on organiser tout celà à l'intérieur d'une macro unique dans ThisWorkbook (car -bien sur- le classeur connait tous les évènements de toutes ses feuilles) mais... la mise au point et la maintenance d'une telle macro est délicate et demande une parfaite connaissance du classeur.

De plus, idéalement, la structure du classeur doit-être connue, verrouillée, et contrôlée en permanence, sinon celà obligerait dans ton cas à un code assez rébarbatif.

Je vais voir si je peux te faire ça dans un délai raisonnable...

A+

bonjour,

Voici une

A+

Salut et merci Galopin pour ta dernière proposition.

Je ne peux malheureusement pas la consulter au travail (problème de sécurité) et je n'aurais pas le temps de voir ça en privé avant quelques jours.

Mais je te tiens au courant dès que possible.

Bonne fin de semaine.

Rebonjour,

J’ai essayé de recopier au mieux la constellation proposée par Galopin dans mon fichier réel, mais je reçois toujours plein de messages d’erreur.

Quelqu’un peut-il m’aider à comprendre ce que je fais de faux ?

Voici mon travail dans son état actuel :

Bonnes salutations à vous tous.

bonjour,

Bizarre... Cela semble lié aux versions de l'OS

Tu peux remplacer

[WSR] ...par :

Sheets("Zusammenfassung")

ça devrait être suffisant.

[EDIT] ou mieux, mettre des parenthèses sur la condition :

[WSR].Rows(20 + a).Hidden = (Sh.Range("E32") = 0)

A+

Salut Galopin,

Merci encore une fois pour ton aide, c'est vraiment sympa !

J’ai essayé ta deuxième proposition seulement et ça fonctionne parfaitement. La ligne correspondante dans la feuille

« Zusammenfassung » est correctement masquée, mais pour autant seulement que j’efface un choix de cellules entre E22 et E31 dans les pages « PK Post 3 », « PK Post 4 » ou « PK Post 5 ».

Par contre, si un utilisateur effectue une sélection plus élargie (Plages non protégées qu’il est possible de sélectionner = E22:F31 et I22:J31) la ligne correspondante n’est plus masquée comme il se devrait.

Si tu trouvais encore une solution à ce problème, ça serait parfait. Voici mon travail en l’état actuel :

Bonnes salutations.

La plage (I22:J31) contenant des formules, il ne me semble pas judicieux de l'inclure dans la sélection...

La macro ne fonctionne que sur une sélection d'une seule colonne.

Une macro fonctionne avec des règles définies à l'avance. Si tu changes sans cesse les règles du jeu, ça ne peux pas marcher.

Pour un reset plus compliqué il me semble qu'il faille prendre en charge tout le reset par voie de macro, et non pas en laissant l'utilisateur bricoler à sa guise sinon ça devient insoluble...

Oups, c'est parti trop vite : (involontairement...)

Une solution serait de vider toute la zone (quelle que soit la sélection) dès lors que l'utilisateur appuie sur la touche Del ? Qu'en penses-tu?

A+

Salut Galopin et merci beaucoup pour ta réponse.

Je ne pense pas changer les règles du jeu en cours de route car mon fichier n’a pas été modifié depuis le départ ; il est par contre vrai qu’on découvre des problèmes auxquels on n’avait pas pensé à l’utilisation.

Ma plage I22:J31 comporte effectivement des formules, mais celles-ci peuvent être remplacées si nécessaire par d’autres valeurs par l’utilisateur ; raison pour laquelle elles ne sont pas protégées.

Mon problème vient du fait que les différents utilisateurs de mon fichier – qui ne sont pas spécialement des passionnés d’Excel – pourraient préparer un calcul dans les feuilles « PK Post 3 », « PK Post 4 » ou « PK Post 5 » puis se rendre compte qu’il s’agit d’une erreur. Ils vont donc effacer ce qu’ils ont inscrit dans les plages non protégées et il faudrait alors que la ligne correspondante sur le récapitulatif (feuille « Zusammenfassung ») soit à nouveau masquée.

Je n’ai pas compris toutes tes propositions mais, en tenant compte de mes précisions ci-dessus, je suis ouvert à toute solution.

Avec mes bonnes salutations.

bonsoir,

Changer la formule des cellules E32 de chaque feuille.

= SOMME(E22:F31)+SOMME(I22:J31)

Changer la macro comme suit :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim a As Byte
Select Case Sh.CodeName
Case "WS3": a = 3
Case "WS4": a = 4
Case "WS5": a = 5
End Select
If a > 0 Then
[WSR].Rows(20 + a).Hidden = (Sh.Range("E32") = 0)
End If
A+
End Sub

Galopin,

Ta solution est géniale ! Mon fichier fonctionne exactement tel que désiré.

J'ai juste dû effacer l'avant dernière ligne de ton code (A+) qui provoque une erreur.

Pour ceux que ça intéresse, voici mon fichier en "parfait état de marche".

Merci mille fois Galopin pour ta précieuse aide.

Bonne soirée à tous.

Sorry !

A+

Désolé à mon tour !

Si j'avais compris ce que c'était, je ne te l'aurais même pas indiqué.

A une prochaine.

Rechercher des sujets similaires à "macro qui bloque lors effacement selection"