Déclarer une variable valable pour plusieurs procédures ?

Charly88

XLDnaute Occasionnel
Bonjour à tous,

La question est en titre, voici le cas :
J'utilise de deux manières différentes une boîte (USF) qui contient toujours les mêmes données de base.
Indifféremment de la méthode choisie, la phase préalable de compréhension & travail des paramètres définis par l'utilisateur est identiques, le traitement des données diffèrent seulement après cette première étape.

Jusqu'à maintenant j'ai donc deux procédures dont le début est copié-collé.
Et concrètement, pour une listbox exemple, en procédure A et B on trouve :
Code:
For i = 0 To Maliste.ListCount - 1
    If Maliste.Selected(i) = True Then
        If MiniListe = -1 Then
            MiniListe = i + 1   
        ElseIf MiniListe <> -1 Then
            MaxiListe = i + 1    
        End If
    CbDeListe = CbDeListe + 1
    End If
Next i

J'ai ainsi pas mal de listbox que je passe au crible pour connaître le mini, maxi et total d'éléments sélectionnés, plus d'autres éléments.
L'idée c'était de placer ce travail préparatif dans une procédure commune aux deux branches, exécuter cette procédure dans mes procédures A et B et utiliser les variables calculées... comment faire ?
Cela a beau s'appeler Public Sub...


C'est un problème que je crois avoir déjà rencontré, il y a très longtemps et pour lequel je n'avais pas trouvé d'autres solutions que de déposer mes données sur une feuille transitoire... Bref méthode petit cochon faute de mieux.


Merci d'avance si quelqu'un a une solution !
 

tototiti2008

XLDnaute Barbatruc
Re : Déclarer une variable valable pour plusieurs procédures ?

Bonjour Charly88,

à priori, si j'ai bien compris, tu peux déclarer des variables publiques qui conserveront leur valeur pour toutes les procédures.

en haut d'un Module

Public MiniListe as Long, MaxiListe as Long, CbDeListe as long

il faudra évidement supprimer les anciennes déclarations que tu avais...
 

Charly88

XLDnaute Occasionnel
Re : Déclarer une variable valable pour plusieurs procédures ?

Un simple public à la place de dim ? :-O

Ha oui mais ho ha ha, non c'est que le voilà le souci ! Tu parles d'un module or mes 2 procédures sont planquées dans leur bouton respectif de la boîte... Y'a-t-il une alternative ou bien faut-il que j'entame le déménagement du code que je craignais depuis longtemps (pas fait puisque pas d'intérêt jusque là) ?

Et avant que je ne demande si cette méthode fonctionne entre module, pourquoi ceci ne fonctionne pas ?
Code:
Public i As Integer

Public Sub testA()
i = 10
End Sub

Public Sub TestB()
MsgBox i
End Sub

Merci Tototiti.
 

tototiti2008

XLDnaute Barbatruc
Re : Déclarer une variable valable pour plusieurs procédures ?

Re,

ah ben chez moi ton exemple fonctionne trés bien...

Et si tu mets un Public en haut d'un module pour déclarer des variables, elles seront disponibles pour tout le projet (donc même le code de ton USF)
 

Charly88

XLDnaute Occasionnel
Re : Déclarer une variable valable pour plusieurs procédures ?

Il y a quelque chose qui cloche alors mais je ne sais pas quoi, un paramètre a rectifier ou débloquer ?

Edit : Merci Toto !
 

Pièces jointes

  • New Microsoft Excel Worksheet.xls
    20 KB · Affichages: 114
  • New Microsoft Excel Worksheet.xls
    20 KB · Affichages: 117
  • New Microsoft Excel Worksheet.xls
    20 KB · Affichages: 126
Dernière édition:

Charly88

XLDnaute Occasionnel
Re : Déclarer une variable valable pour plusieurs procédures ?

Bonjour, le souci est bien là pourtant. En résumé : les variables publiques ont-elles des contraintes si elles sont dans une USF ou un module ?



En voyant ta réponse hier Titi, j'ai conclu trop vite que c'est moi qui m'était trompé en oubliant une ligne de code évidente... Mais en fait pas du tout. Par rapport à ce que j'attendais j'avais coder correctement et ce matin je bute à nouveau dans le mur.

Voici qu'a écrit tototiti2008
Code:
Public iWW As Integer

Public Sub testA()
iWW = 10
End Sub

Public Sub TestB()
MsgBox iWW
End Sub
[b]
Sub appel()
testA
TestB
End Sub[/b]

L'appel me manquait et c'est là que ça coince. Tel que je l'avais compris, une variable publique est connue partout et tout le temps, tel l'oiseau elle ne point de frontière, donc dès mon testB je m'attendais à afficher son contenu.
Et ce matin, rebelote bien que le problème soit différent, cette fois j'ai une valeur calculée dans une USF (voir fichier joint) :
Code:
Public i As Long, j As Long, k As Long

Private Sub CommandButton1_Click()

i = 5
j = 3
k = 1
addition

End Sub

J'appelle une procédure (addition) située dans un module :
Code:
Public Sub addition()
Dim z As Long

z = i + j + k
MsgBox z
End Sub

Seulement là, patatra, i comme j (et ne parlons pas de k !) sont inconnus au bataillon. Au mieux si je les ai définis d'une manière (MaVaRiAbLe), une fois leur nom tapé en entier elle reprend la casse mais rien de plus. Dans le ctrl + espace, aucun j ou k ; leur valeur = empty

Why ?


Et même deux fois Waï puisque j'ai justement fait l'inverse : données en module, appel de cette procédure dans l'usf et obtention des données ; cela fonctionnerait dans un sens pas dans l'autre ?
 

Pièces jointes

  • Variable_Publique_Usf_Module.xls
    31.5 KB · Affichages: 86

tototiti2008

XLDnaute Barbatruc
Re : Déclarer une variable valable pour plusieurs procédures ?

Bonjour Charly88,

une variable Publique retient sa valeur dans tout le projet si (et seulement si :)) tu la déclare en haut d'un module
si tu mets Public en haut du code de ton USF, tu ne donne accès à ces variables que dans les procédures de cet USF, pas en dehors.

Essaye peut-être de faire des recherches sur la notion de Portée d'une variable... si tu ne trouve pas, reviens nous voir, j'essaierais de résumer les différents cas..
 

Charly88

XLDnaute Occasionnel
Re : Déclarer une variable valable pour plusieurs procédures ?

Merci !!
Il suffit donc de déclarer toutes les variables générales dans un module... Étrange mais bon.

Une autre petite question pour ma culture G, sitôt posté, j'étais parti pour éditer parce que je me suis aperçu que ma procédure dans l'userform exemple était écrite Private Sub CommandButton1_Click() ... et là j'me suis dit, Marcel t'es con, faut la passer en publique !
Mais aucun effet bien sûr.
En deux mots (promis je cherche un tuto après), quelle influence cela peut avoir le caractère publique ou privé dans ce cas de bouton ?

Merci encore !
 

tototiti2008

XLDnaute Barbatruc
Re : Déclarer une variable valable pour plusieurs procédures ?

Re,

Les sub Private ne peuvent être appelées qu'à partir d'autres sub du même objet. Donc tes sub Private de ton USF ne peuvent être appelées que d'autres Sub du code de ton USF. Si tu les mets en Public, tu pourra les appeler d'un module par exemple.

Pour les variables, Dim et Private ont la même fonction, je crois.
Après il y a des trucs comme Static qui sont un peu tordus, je ne maîtrise pas vraiment...
 

Discussions similaires

Réponses
7
Affichages
347

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87