Variable qui ne se remet pas à zéro …

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

j'ai un souci avec, je pense, une variable qui ne se remet pas à zéro entre deux lancements de procédures
J'ai dû déclarer une variable en Public car la réponse est utilisée dans d'autres procédures (même si dans le présent exemple, ça paraît simpliste)

Quand j'ouvre le fichier et lance Reporting(), j'ai bien l'enchainement des 2 questions : type de reporting et type d'impression
Je passe par des do loop pour être sûr que l'utilisateur fournisse une réponse

MAIS si je relance la procédure dans la foulée (c'est-à-dire sans avoir fermé puis rouvert le fichier), alors la question sur le type d'impression est zappée …
ou plus exactement, xl reprend en mémoire la précédente réponse …

Je ne sais pas comment remettre à zéro la variable PapierOuEcran … (mais je pensais que c'était automatique !)
Quelqu'un a-t-il une idée comment faire pour rendre la 2ème question sur l'impression systématique ?

Merci d'avance pour vos lumières

ici mon code

Code:
Option Explicit
Public PapierOuEcran As Variant  ' car utilisée dans de nombreuses autres sub() disséminées


Sub Reporting()

Dim ReponseTypeReporting As Variant

 Do Until ReponseTypeReporting = "c" Or ReponseTypeReporting = "C" Or ReponseTypeReporting = "p" Or ReponseTypeReporting = "P"
    ReponseTypeReporting = Application.InputBox("Saisissez le type de reporting souhaité : p=partiel, c=complet", Type:=2) ' type=2 force réponse alpha
Loop


 Do Until PapierOuEcran = 1 Or PapierOuEcran = 2
        PapierOuEcran = Application.InputBox("Impression papier = 1 ou impression écran = 2", Type:=1) ' type=1 force saisie numérique
Loop



If ReponseTypeReporting = "p" Or ReponseTypeReporting = "P" Then
            Call b3_reporting  ' et dans cette b3_reporting, on utilise réponse contenue dans variable PapierOuEcran
            MsgBox "Je lance le traitement partiel"   ' uniquement pour contrôler ce qui se passe ...
 Else
            Call b4_reporting   ' et dans cette b4_reporting, on utilise réponse contenue dans variable PapierOuEcran
            MsgBox "Je lance le traitement complet"  ' uniquement pour contrôler ce qui se passe ...
End If



End Sub
' ...
' ...
' ...
' ... tout un tas de procédures ...
' ...
' ...
' ...

Sub b3_reporting()
        ' ... instructions
        MsgBox "Traitement b3"
        
'         If PapierOuEcran = 1 Then
'                ActiveSheet.PrintOut
'          Else
'                ActiveSheet.PrintPreview
'          End If
          
End Sub


Sub b4_reporting()
        ' ... instructions
        MsgBox "Traitement b4"
        
'         If PapierOuEcran = 1 Then
'                ActiveSheet.PrintOut
'          Else
'                ActiveSheet.PrintPreview
'          End If
          
End Sub
 

Pièces jointes

  • pb variable.xlsm
    13.5 KB · Affichages: 46

Sebast

XLDnaute Impliqué
Re : Variable qui ne se remet pas à zéro …

Salut Pierrot,

merci pour ta réponse. Je viens de la tester sur un autre ordi et que je la mette en oeuvre ou pas, je n'ai pas le dysfonctionnement rencontré sur mon ordi initial (2007 au bureau, 2010 à la maison) ...
Par ailleurs, tel que mon code est rédigé, normalement, quand on relance la sub() générale, la variable ne se réinitialise pas d'elle-même ?
jusqu'ici, dans des cas similaires, je n'ai jamais eu besoin de mettre = empty et ça ne posait pas de souci (d'ailleurs, je découvre cette instruction).

Bonne soirée (nuit ?)
 

Si...

XLDnaute Barbatruc
Re : Variable qui ne se remet pas à zéro …

salut

Par ailleurs, tel que mon code est rédigé, normalement, quand on relance la sub() générale, la variable ne se réinitialise pas d'elle-même ?
avec
Code:
Public PapierOuEcran As Variant
Sub Reporting()
  Dim ReponseTypeReporting As Variant

PapierOuEcran garde la dernière valeur prise alors que ReponseTypeReporting est réinitialisée !

Ajout
C'est justement l'intérêt de la déclaration en Public (hors procédure).
Tu auras le même effet avec Dim PapierOuEcran avant toute macro mais seulement dans le Module.
 
Dernière édition:

Sebast

XLDnaute Impliqué
Re : Variable qui ne se remet pas à zéro …

Bonjour Si,

c'est tout le problème : j'ai mis PapierOuEcran en Public car cette variable est utilisée dans plusieurs modules, actionnés par call ...
Je ne peux pas la mettre en dim car je veux que la question soit posée une seule fois et la réponse utilisée dans plusieurs modules.

@+
 

Sebast

XLDnaute Impliqué
Re : Variable qui ne se remet pas à zéro …

Rebonjour Si,

j'ai rebossé le dossier et ai finalement compris. J'étais persuadé qu'il fallait déclarer en Public dès que la variable devait essaimer dans plusieurs procédures, alors qu'en fait Public n'a d'intérêt que quand on diffuse l'info dans tout le projet ...


Merci de m'avoir ouvert les yeux !

Bonne journée
 

Sebast

XLDnaute Impliqué
Re : Variable qui ne se remet pas à zéro …

Pierrot,

pour répondre à ta suggestion

Code:
PapierOuEcran = Empty

que je viens de tester au boulot, ça marche impeccable (peut-être la fatigue m'avait fait constater autre chose hier soir, ou peut-être avais-je mal placé l'instruction ...).

C'est même probablement la meilleure solution car elle permet de conserver la variable en Public, qui autorise des accès à la variable même si la procédure est dans un module différent.

Encore merci
 

Discussions similaires

Réponses
8
Affichages
556

Statistiques des forums

Discussions
312 761
Messages
2 091 798
Membres
105 074
dernier inscrit
JPATOUNE