Problème boucle If égalité

Résolu
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018 - 5 sept. 2013 à 08:46
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

6 réponses

MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
5 sept. 2013 à 08:48
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
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
5 sept. 2013 à 09:07
Bonjour
Comment est déclaré ta variable Nbr... et comment lui assigne tu sa valeur ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 sept. 2013 à 09:12
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)
0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
Modifié par MEUCORACAO le 5/09/2013 à 14:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
Modifié par hellangel777 le 5/09/2013 à 14:56
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
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
5 sept. 2013 à 14:58
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)

0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
5 sept. 2013 à 16:28
Merci de votre aide, en forçant la valeur en integer cela fonctionne. J'ai bien vu que 2 et "2" était différent mais d'où vient cette différence?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 sept. 2013 à 16:31
Ce ne peut être qu'un problème de variable et de portée de variable.
0
MEUCORACAO Messages postés 35 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 23 octobre 2018
5 sept. 2013 à 16:44
Je veux bien mais Nbr_Reactif est déclarée en public, elle ne peut pas changer comme ça, non?
0
Utilisateur anonyme
5 sept. 2013 à 17:27
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
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
5 sept. 2013 à 17:47
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).
0
Rejoignez-nous