XL 2016 Variable vide pourquoi ?

BARNS

XLDnaute Junior
Bonjour tout le monde,

J'ai réalisé un logiciel pour calculer une liste de matériel sans rentrer dans les détails non nécessaire voilà mon problème :

Je défini une variable :

VB:
With Sheets("datas")
    For x = 1 To 16 'Range("Tab_Cannes_Mont").Rows.Count
        If Range("Choix_montage").Value = .Cells(x, 15) Then k = .Cells(x, 14)
    Next x
Range("Montage_num") = k

La valeur que je trouve est donc accessible par trois chemins :
– par la cellule qui est défini par Range("Montage_num")
– par la variable k
– par la variable "Montage_num"

Donc j'ai bien à un moment donné :

L31
1631281651628.png


Or plus bas dans mon code (dans un autre module)

[...]

Tout ces endroits sont vides avec :
Code:
If Not Sheets("Datas").Cells(21, 14).Value = 21 Or k = 21 Or Range("Montage_num") = 21 Then Exit Sub

L196
1631281719092.png


Je ne comprends pas. J'ai eu le problème avec ma variable k, j'ai donc inscrit la valeur sur une cellule ca ne marchait toujours pas j'ai donc nommé cette cellule, ca ne marche toujours, j'ai fouillé à droite à gauche sans succès je viens donc vous voir. :)

Ces partie de code sont dans le modules M03_LongCannes dans le fichier joint.

Pour lancer le code : cliquer sur Etape 1 puis 2 puis 3.

Merci pour vos précieux conseils.
 

Pièces jointes

  • Conf_canne_10_09_2021.xlsm
    203.5 KB · Affichages: 4
Solution
Bonjour @Barnes,

Code examiné vite fait...

Vous déclarez k comme une variable publique en tête du module M03_LongCannes

Vous exécutez la procédure Sub LongCannes() dans laquelle vous affectez une (ou non) une valeur à k
Mais en tête de cette procédure, vous re-déclarez la variable k. Cette déclaration est prioritaire dans cette procédure qui va utiliser ce k "local". A la sortie de la procédure, ce k local est retiré de la pile puisque c'est une variable locale. Sa valeur est définitivement perdue.

Quand ensuite, vous utilisez k dans la procédure Sub dico_tubes2(), vous utilisez la variable k...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Barnes,

Code examiné vite fait...

Vous déclarez k comme une variable publique en tête du module M03_LongCannes

Vous exécutez la procédure Sub LongCannes() dans laquelle vous affectez une (ou non) une valeur à k
Mais en tête de cette procédure, vous re-déclarez la variable k. Cette déclaration est prioritaire dans cette procédure qui va utiliser ce k "local". A la sortie de la procédure, ce k local est retiré de la pile puisque c'est une variable locale. Sa valeur est définitivement perdue.

Quand ensuite, vous utilisez k dans la procédure Sub dico_tubes2(), vous utilisez la variable k déclarée publique.

A cette variable publique k n'a jamais été affecté une quelconque valeur. Donc elle est vide et le restera.

Déclarer le même nom de variable à deux endroits (publique en tête de module et localement dans une procédure) aboutira à 99% à une erreur ou incohérence de résultat (pas d'exécution) très difficile à repérer (à moins de savoir très exactement ce qu'on fait).
 

Discussions similaires

Réponses
1
Affichages
300

Statistiques des forums

Discussions
294 444
Messages
1 938 548
Membres
188 924
dernier inscrit
TFT