Problème boucle If égalité [Résolu]

Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
- - Dernière réponse : MEUCORACAO
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
- 6 sept. 2013 à 07:03
Bonjour,

Je me tourne vers vous car j'ai un petit problème qui me déroute totalement. Dans mon programme je test une variable avec une autre. Si elle est égale alors Programme1 sinon programme 2 (cf prog ci-dessous).

If i = Nbr_Reactif Then
            Set Opt = UserForm7.Controls.Add("Forms.Label.1")
            With Opt
                .Name = "Flèche" & i
                .Caption = "è"
                .AutoSize = True
                .WordWrap = False
                .Move x, 25
                .Font.Name = "Wingdings"
                .Font.Size = 14
                .BackStyle = 0
            End With
            x = x + 10
        Else
            Set Opt = UserForm7.Controls.Add("Forms.Label.1")
            With Opt
                .Name = "Plus" & i
                .Caption = "+"
                .AutoSize = True
                .WordWrap = False
                .Move x, 25
                .Font.Name = "Times"
                .Font.Size = 14
                .BackStyle = 0
            End With
            x = x + 10
        End If



Au début, je me suis dit que je m'étais trompé dans l'écriture donc j'ai mis un point d'arrêt sur le if et au moment où les deux variables sont égales i=2 et Nbr_Reactif="2", cela est considérer comme si elles étaient différentes.
Je me suis donc dit que le problème venait des guillemets qui sont présentes chez l'une mais pas l'autre des variables. Je me suis dit que le problème vient de la déclaration. Le problème est que ce sont des integers toutes les deux, Nbr_Reactif en Public et i en dim.

Avez-vous une idée d'où cela pourrait venir?
Je vous remercie par avance pour votre aide.

Bien cordialement,

Anthony
Afficher la suite 

6 réponses

Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
0
Merci
Le fichier est assez compliqué pour que je puisse vous le mettre ou expliquer chaque détail. Je ne comprends pas pourquoi Nbr-Reactif étant déclaré en Integer possède ses valeurs entre "" lors de l'exécution du soft. Merci encore
Commenter la réponse de MEUCORACAO
Messages postés
26325
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 septembre 2019
315
0
Merci
Bonjour
Comment est déclaré ta variable Nbr... et comment lui assigne tu sa valeur ?
Commenter la réponse de jordane45
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,
- Où et comment as-tu déclaré Nbr_Reactif ?
- Depuis où et avec quel code as-tu initialisé Nbr_Reactif ?
- Nbr_Reactif a-t-il (vérifie) pu être déclaré également ailleurs ? (car si oui : confusion possible)
Il arrive par ailleurs enfin que des réactions inattendues soient le résultat de "passages par tremplin" (un label, par exemple)
Commenter la réponse de ucfoutu
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
0
Merci
Bonjour à tous,

Ma variable Nbr_Reactif (déclarée qu'une seule fois) est déclarée via un userform où le choix se fait avec un spinbutton. Le programme est très long mais ça fonctionne très très bien dans les boucles for (for i = 0 to Nbr_Reactif) mais dans cette boucle if, cela ne marche pas.
Je viens de regarder mon programme et ma variable Nbr_Reactif est définie comme la valeur d'une textbox réglée avec le fameux spinbutton. Cela conclut-il que ma variable est un string (d'où les guillemets)??

A votre avis, d'où cela peut-il venir? Si vous souhaitez plus de renseignements, n'hésitez surtout pas.
Merci de votre aide
Commenter la réponse de MEUCORACAO
Messages postés
271
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
0
Merci
Bonjour,

Oui 2 et "2" ne sont pas les mêmes d'où ton problème de boucle.
converti en nombre ta valeur "Nbr_Reactif" et refais le test
Bon courage
Commenter la réponse de hellangel777
Messages postés
26325
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 septembre 2019
315
0
Merci
Bonjour,

Par contre, on aurait bien aimé avoir le code de la déclaration de ta variable..... en général ça permet de voir si tu n'as pas fait d'erreur.....

Mais bon, pour cette fois, je pense qu'on pourra surement s'en passer..
Essayes donc de forcer ta valeur en "Integer" comme ceci :
'au cas où:
Dim Nbr_Reactif as Integer
'...
'Et ensuite:
Nbr_Reactif=CInt(Nbr_Reactif)

ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212 -
Ce ne peut être qu'un problème de variable et de portée de variable.
MEUCORACAO
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
-
Je veux bien mais Nbr_Reactif est déclarée en public, elle ne peut pas changer comme ça, non?
Utilisateur anonyme -
bonjour Meucoracao
Ce n'est pasune question de Public ou privé !
C'est une question de type de variable
Dim chaine as String = "2" est une variable chaine de caractères de type String
Dim nombre as integer = 2 est une variable numérique de type Integer

Tu ne peux pas faire If chaine = nombre car le type n'est pas le même
jordane45
Messages postés
26325
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 septembre 2019
315 -
D'où l'interet de poster sur le forum le code de déclaration de tes variables et le code que tu utilises ensuite (et pas seulement un morceau de code "allégé").
Comme je te l'ai dis avant, ça permet de voir d'éventuelles erreurs.

En plus, ta variable est peut être récupérée dans un textbox et non directement depuis le SpinControl non ?
Ou tu l'as utilisée à un autre endroit et lui a affecté une valeur de type String sans t'en rendre compte..


Au passage, même si ce n'est pas obligatoire, c'est en tout cas très fortement conseillé, il faut mettre la déclaration des variables OBLIGATOIRE dans ton code..

il suffit d'écrire « Option Explicit » dans la partie déclarations de votre code (tout en haut de la page de code).
MEUCORACAO
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
23 octobre 2018
-
OK ça marche. Merci du coup de main! Heureusement que vous êtes là!
Bonne journée à vous
Commenter la réponse de jordane45