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

Pour toutes vos questions à propos d'Excel ...

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

Messagepar Yvouille » 10 Déc 2010, 11:05

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 ?
Fichiers joints
Rachats Express, Forum 10.12.zip
(75.6 Kio) Téléchargé 29 fois
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2053
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

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

Messagepar BOB71AU » 12 Déc 2010, 22:48

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
Code: Tout sélectionner
 Rows("31:32").Hidden = True


par
Code: Tout sélectionner
 Rows("31:32").EntireRow.Hidden = True
Cordialement
Bob
BOB71AU
Membre fidèle
 
Messages: 228
Inscription: 02 Jan 2010, 00:26
Version Excel: 2003

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

Messagepar Yvouille » 13 Déc 2010, 08:30

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é :
Fichiers joints
Rachats Express, Forum 10.12_V2.zip
(77.01 Kio) Téléchargé 14 fois
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2053
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

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

Messagepar Dan » 13 Déc 2010, 10:56

Bonjour,

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

Code: Tout sélectionner
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 :
Code: Tout sélectionner
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
@+ Dan ;)
Avatar de l’utilisateur
Dan
Modérateur
 
Messages: 2395
Inscription: 27 Avr 2007, 15:31
Localisation: Liège - Belgique
Version Excel: 2010, 2003, 2000, Mac 2004

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

Messagepar Yvouille » 13 Déc 2010, 12:04

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 :
Rachats Express, Forum 10.12_V3.zip
(78.98 Kio) Téléchargé 11 fois


A te relire.
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2053
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

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

Messagepar Dan » 13 Déc 2010, 12:38

Re,

Ok déso.
Essaie en modifiant cette macro dans ton USF

Code: Tout sélectionner
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
@+ Dan ;)
Avatar de l’utilisateur
Dan
Modérateur
 
Messages: 2395
Inscription: 27 Avr 2007, 15:31
Localisation: Liège - Belgique
Version Excel: 2010, 2003, 2000, Mac 2004

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

Messagepar Yvouille » 13 Déc 2010, 14:07

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.
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2053
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

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

Messagepar Dan » 13 Déc 2010, 14:32

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 :
Code: Tout sélectionner
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 ;)
Avatar de l’utilisateur
Dan
Modérateur
 
Messages: 2395
Inscription: 27 Avr 2007, 15:31
Localisation: Liège - Belgique
Version Excel: 2010, 2003, 2000, Mac 2004

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

Messagepar Yvouille » 13 Déc 2010, 16:02

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
Rachats Express essais.zip
(76.06 Kio) Téléchargé 13 fois


Bonne fin de journée.
Yvouille
Avatar de l’utilisateur
Yvouille
Membre impliqué
 
Messages: 2053
Inscription: 06 Avr 2007, 07:03
Localisation: CH - Valais de cœur
Version Excel: 2003, 2007, 2010 All.

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

Messagepar Dan » 13 Déc 2010, 17:08

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 ;)
Avatar de l’utilisateur
Dan
Modérateur
 
Messages: 2395
Inscription: 27 Avr 2007, 15:31
Localisation: Liège - Belgique
Version Excel: 2010, 2003, 2000, Mac 2004

Suivante

Retourner vers Excel - VBA

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Exabot [Bot], Google [Bot], Google Adsense [Bot] et 18 invités