Microsoft 365 VBA Difference variant/integer et integer?

GAMAH3

XLDnaute Nouveau
Bonjour,

J’ai cette partie là de code:
[…]
Inf=1000
Vmin=0

Do Until (Vmin = inf)
Vmin=inf
[…]

En faisant le déboggage pas à pas détaillé, je vois que Vmin reste à 0 même après la ligne de l’instruction Vmin=inf. Comme je vois que dans tous les cas Vmin était à 0 avant même la ligne Vmin=0, je retire cette ligne et alors Vmin prend la valeur inf avant même l’instruction Vmin=inf, sachant que Vmin n’apparaît jamais avant dans le code autrement que pour être défini. Il semblerait que Vmin ne prenne qu’une valeur et ne bouge plus jamais. J’ai testé avec beaucoup de valeurs à différents endroits et Vmin garde toujours une valeur puis ne change plus.

Est-ce que ça peut provenir de la définition des types de variables? Dans le tableau d’affichage des variables « inf » apparaît comme « variant/integer » et « Vmin » apparaît comme « integer », pourtant les deux sont définis exactement de la même manière: « Dim inf As Integer » et « Dim Vmin As Integer ». Comment est-ce possible? Y a-t-il une différence entre les deux? Est-ce que mon problème peut venir de la?

Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,
En faisant le déboggage pas à pas détaillé, je vois que Vmin reste à 0 même après la ligne de l’instruction Vmin=inf.
"=" peut être utilisé pour faire une affectation ou bien "=" peut être l'opérateur de comparaison. Cela dépend du contexte.

Dans l'instruction Do Until (Vmin = inf), l'instruction Do Until attend une expression qui retourne une valeur égale à True ou à False.
L'opérateur = est donc logiquement l'opérateur de comparaison (entre Vmin et inf) et en aucun cas c'est une affectation. Quand on compare Vmin à inf, aucune des deux variables n'est modifiée (et c'est heureux!). D'ailleurs on peut tout aussi bien écrire et avec le même résultat Do Until (Inf=Vmin)

Quant à l'affectation, elle ne retourne aucune valeur. Une affectation "lit" la valeur de la variable, de l'expression ou de la constante à droite puis l'affecte à la variable de gauche. Une affectation modifie le contenu de la variable à gauche et laisse inchangé le contenu de la variable à droite (c'est normal la droite est conservatrice 🤪)

Exemple amusant :
VB:
Dim a as integer, b as integer, égalité as boolean
    a = 1
    b = 2
    égalité = a = b
égalité = a = b
le premier signe égal est une affectation et le second signe égal est une comparaison. Pour plus de clarté, on écrira : égalité = (a = b)


Tout langage informatique a ses règles, sa manière d'interpréter les termes qui sont utilisés pour l'écrire. Avant d'exécuter un programme (ou une des lignes du programme - ça dépend), il y a toute une analyse du programme pour voir s'il respecte les règles du langage. Si à priori les règles sont respectées alors on exécute le programme (je simplifie). Si les règles ne sont respectées alors (pour VBA) une erreur est signalée quand vous validez la ligne que vous venez de taper.

Quand on débute, on est confronté au type de questions que vous posez.
C'est normal. On découvre un langage, ses règles, ses conventions. Avec un peu d’expérience, on devient de moins en moins novice et on ne se pose plus les questions du début.

Mais même avec beaucoup d'expérience, on se plante encore. C'est le charme de la programmation.
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
326

Statistiques des forums

Discussions
312 104
Messages
2 085 346
Membres
102 868
dernier inscrit
JJV