Code VBA : Un code Select Case ... ne démarre pas

Bonjour,

J’ai un souci avec le fichier ci-joint.

Selon la valeur de la cellule R1 de la feuille « Impression », la ligne de code Select Case Range("R1") fonctionne parfaitement.

J’ai tenté d’effectuer un second Select Case Range sur la cellule ("R4"), mais celui-ci ne fonctionne pas.

Pour Select Case Range("R1"), la valeur est modifiée par l’intermédiaire d’une autre feuille, donc il y a obligatoirement l’activation de la feuille « Impression » entre-deux.

Pour la cellule R4, la valeur est modifiée par l’intermédiaire de l’UserForm ; je présume donc que le problème vient de là, c'est comme si la feuille "Impression" n'était pas activée à ce moment-là. Je me suis alors demandé s’il fallait tout d’abord sélectionner une feuille quelconque – par le code Private Sub CommandButton2_Click - avant de revenir sur la feuille « Impression », afin de l’activer – mais rien n’y fait ; les lignes 45:47 et/ou 63:65 qui devraient s'ouvrir ou se fermer selon les cas ne bougent pas (par contre ces lignes s'ouvrent ou se ferment correctement si l'on sélectionne manuellement à une feuille quelconque avant de revenir à la feuille "Impression").

Pouvez-vous m’aider à résoudre ce problème ?

Bonsoir Yvouille

pour vérifier si le déclenchement de la macro est effective, place en début de macro worksheet change le mot stop

chez moi elle passe mais le code de masquage n'est pas le bon

exemple

remplace

 Rows("31:32").Hidden = True

par

 Rows("31:32").EntireRow.Hidden = True

Salut Bob,

Merci pour ta réponse.

J'ai essayé de placer Stop en début de macro (c'est en fait comme un point d'arrêt, non ?) et le code se bloque effectivement à cet endroi là.

J'ai aussi essayé de remplacer les parties de code que tu m'as dites, mais ça ne change rien ; en permuttant les options "oui-non" dans la UserForm, les lignes 45:47 et 63:65 ne sont pas modifiées tel que désiré lorsque je clique OK (en tout cas si je reviens en arrière dans le formulaire par le bouton "Retour sur le masque de saisie").

Par contre que j'utilise EntireRow.Hidden ou uniquement .Hidden, ces lignes se masquent ou apparaissent correctement si je change manuellement de feuille.

Voici mon fichier modifié :

Bonjour,

C'est ta structure de code qui n'est pas bonne. Je parle des ":"

Essaie comme ceci

Select Case Range("R4")
Case Is = 1
Rows("45:47").EntireRow.Hidden = False
Rows("63:65").EntireRow.Hidden = True
Case Is = 2
Rows("45:47").EntireRow.Hidden = True
Rows("63:65").EntireRow.Hidden = False
End Select

ou comme ceci :

Select Case Range("R4")
Case Is = 1: Rows("45:47").EntireRow.Hidden = False: Rows("63:65").EntireRow.Hidden = True
Case Is = 2: Rows("45:47").EntireRow.Hidden = True: Rows("63:65").EntireRow.Hidden = False
End Select

Amicalement

Salut Dan,

Merci pour ta réponse. Malheureusement, c'est toujours pareil, même avec tes deux nouveaux codes ; si je passe au formulaire depuis la feuille "Impression", par le bouton "Retour sur le masque de saisie" et que je modifie les options "Oui-non" puis que je clique OK, les lignes 45:47 et 63:65 ne bougent pas. Par contre si je passe manuellement à une autre feuille et que je reviens sur la feuille "Impression", les 4 variantes de ce code fonctionnent pareillement (et correctement).

Mon fichier avec tes nouveaux codes :

A te relire.

Re,

Ok déso.

Essaie en modifiant cette macro dans ton USF

Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Sheets("Rachat Express").Select
With Sheets("Impression")
    .Unprotect "738305"
    .Range("F9") = ComboBoxTitre
    .Range("R3") = ComboBox1
    .Range("F10") = TextBox7.Value
    .Range("F11") = TextBox6.Value
    .Range("F12") = TextBox3.Value
    .Range("F13") = TextBox2.Value
    If OptionButton1.Value = True Then
        .Range("R4") = 1
    Else
        .Range("R4") = 2
    End If
    .Select
    .Protect "738305"
End With
Unload Me
End Sub

Maintenant je pense que le code qui cache ou monre les lignes aurait mieux sa place dans un module. Il pourrait être appelé en mettant une instruction CALL à la place du SELECT de la feuille Impression en fin de code.

Dis moi

Wow, super, ça fonctionne à merveille ! Et qui plus est, avec n'importe quelle version du code Private Sub Worksheet_Activate

Merci infiniment pour ton aide, Dan.

En ce qui concerne ta dernière proposition de remplacer le SELECT par un CALL, je n'ai pas compris ce que ça améliorerait réellement, puisque tout fonctionne à souhait. Cependant, si tu penses vraiment que ça peut être utile, il faudrait m'expliquer mieux ce que je devrais faire.

Bonnes salutations.

Re,

Je trouve que les macros qui fonctionnent sur l'activation d'une feuille sont à utiliser avec prudence. C'est toujours sensible ce truc là. Un simple appel par Activate ou Select, déclenche le code. C'était un peu cela le souci que tu as eu.

Donc plutôt que de mettre ton code dans la feuille Impression, je l'aurais remplacé par un code placé dans un module.

Exemple :

Sub miseenforme()
ici--> les instructions qui se trouvent dans ta feuille Impression (saut Private.... bien sûr)
End Sub

Ensuite dans ton USF, code Private Sub CommandButton2_Click():

  • tu remplaces le ".SELECT" qui se trouve juste avant --> .Protect "738305" par ceci : --> CALL miseenforme
  • tu supprimes Sheets("Rachat Express").Select
Dans ta Sub miseenforme, tu prévois bien de sélectionner la feuille Impression donc ajout d'une instruction SELECT.

Amicalement

Dan,

En modifiant les codes tel que tu me l'indiques, la première série de SELECT CASE (lignes 31:32, 35:36, etc.) ne fonctionne plus en changeant simplement de feuille ; pour cette série, c'est effectivement une modification sur la feuille "Rachat Express" qui influence l'ouverture ou la fermeture des lignes indiquées ci-dessus, sans passer par l'intermédiaire du USF (et je ne voudrais pas obliger les utilisateurs à devoir passer par le USF dans ce cas-là). Je crois donc que je vais plutôt garder le code qui fonctionnait selon mon dernier message.

Encore une fois merci pour tout le travail que tu as réalisé pour moi.

Voici mes derniers essais

Bonne fin de journée.

re,

En modifiant les codes tel que tu me l'indiques, la première série de SELECT CASE (lignes 31:32, 35:36, etc.) ne fonctionne plus en changeant simplement de feuille ;

Effectivement si tu veux conserver cette fonctionnalité, alors le mieux est de conserver la macro dans ta feuille Impression.

Une variante que tu peux aussi faire, c'est mettre le CALL misenforme dans la feuille Impression et mettre les instructions de la feuille Impression dans un module. De cette manière tu ne conserves qu'un minimum de code dans ta feuille et le reste se trouve dans un module. Là tu conserves toutes les fonctionnalités que tu souhaites.

Bien amicalement

Dan,

Merci beaucoup pour ces dernières précisions. Encore un fichier pour lequel tu m'as donné un sacré coup de main

Rendez-vous tout à l'heure sur mon prochain fil ??

Bonnes salutations.

Rechercher des sujets similaires à "code vba select case demarre pas"