Pb de code bloc if

thomassc Messages postés 16 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 20 avril 2011 - 13 août 2010 à 17:44
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011 - 3 sept. 2011 à 01:05
Bonjour, j'ai un souci avec ce bout de code caché derriere un bouton.
à l'exécution il m'envoi un messsageg d'erreur "block if without end if",
pouvez vous m'aider svp ?

Private Sub verifier_Click()

' vérifie si la date et (<=) et renvoi "Alarm !" 
If (List2.List(0) <= Date) Then
 A1.Caption = "Alarm !"
  If (List2.List(1) <= Date) Then
   A2.Caption = "Alarm !"
    If List2.List(2) = Date Then
     A3.Caption = "Alarm !"
      If List2.List(3) = Date Then
       A4.Caption = "Alarm !"
Else
' renvoi "En cours si la date est (>) à la date du jour
   If (List2.List(0) > Date) Then A1.Caption = "En cours..."
   If (List2.List(1) > Date) Then A2.Caption = "En cours..."
   If (List2.List(2) > Date) Then A3.Caption = "En cours..."
   If (List2.List(3) > Date) Then A4.Caption = "En cours..."
End If

10 réponses

cs_Trim Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 4 septembre 2023 3
13 août 2010 à 18:01
Salut,

pour utiliser le If tu à deux choix:

premier:
If <condition> Then  Else 


deuxieme:
If
<condition>
Then

Else

End If



Dans le deuxième cas tu est obligé de refermer ton If, ce que tu n'a pas fait pour:
  If (List2.List(1) <= Date) Then
   A2.Caption = "Alarm !"
    If List2.List(2) = Date Then
     A3.Caption = "Alarm !"
      If List2.List(3) = Date Then
       A4.Caption = "Alarm !"


Bonne continuation
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 août 2010 à 19:43
If
<condition>
Then

Else

End If


Heu... c'est plutôt :

If <condition> Then

Else 

End If


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
thomassc Messages postés 16 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 20 avril 2011
13 août 2010 à 22:03
Merci beacoup pour vos réponse rapide.
J'ai effectivement fait cette erreur sur les end if...
0
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
6 oct. 2010 à 19:26
Ce qui donne :

Private Sub verifier_Click()

' vérifie si la date et (<=) et renvoi "Alarm !" 
If (List2.List(0) <= Date) Then
 A1.Caption = "Alarm !"
ElseIf (List2.List(1) <= Date) Then
 A2.Caption = "Alarm !"
ElseIf List2.List(2) = Date Then
 A3.Caption = "Alarm !"
ElseIf List2.List(3) = Date Then
 A4.Caption = "Alarm !"
Else
' renvoi "En cours si la date est (>) à la date du jour
   If (List2.List(0) > Date) Then A1.Caption = "En cours..."
   If (List2.List(1) > Date) Then A2.Caption = "En cours..."
   If (List2.List(2) > Date) Then A3.Caption = "En cours..."
   If (List2.List(3) > Date) Then A4.Caption = "En cours..."
End If

NathanSecret
0

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

Posez votre question
thomassc Messages postés 16 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 20 avril 2011
10 oct. 2010 à 10:08
Merci de vos réponses, mais le problème a été résou dans un autre topic.
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
17 oct. 2010 à 16:36
Bonjour,

Quand tu à des "if" a répétition, plutôt que de chargé le code de condition tu peut aussi essayer une autre méthode : le select case ma foie bien plus pratique dans certaines circonstance...

'Exemple
Select Case Label1.Caption
    Case "toto"
        'Code - le text contenu dans le caption du label1 est "toto"...
    Case "hello world !"
        'Code
    Case "j'aime les champignons"
        'Code
    Case Else
        'Code
End Select


Mais comme à priori tu cherche à tester la totalité de ta liste il reste encore préférable de faire une boucle :
Pour cela prenons l'exemple suivant : tu garde ta liste comme elle est et tu met 4 labels en groupe de contrôle

explications :

tu peut disposé sur ta feuille 4 label "label1, label2, label3, label4"
Dans ce cas chacun de tes label est indépendant, ce qui au passage te donne 4 fois plus de code pour les gerer puisqu'il te faut les gérer un par un....

Ou bien tu peut créer 4 label en groupe de contrôle, c'est a dire tu place un label "label1" puis dans sa propriété index tu lui indique "0"
Ensuite, tu le copie/colle et là, vb va te recréer un second label1 mais qui cette fois si aura l'index "1"
Il n'est d'ailleurs pas nécessaire de définir l'index manuellement puisque par défaut en copiant/collant les contrôles compatible avec cette fonctionnalité vb te propose de creer un groupe de contrôle, ce qui donne le même résultat.

Du coup dans ton code au lieu d'écrir :
Label1.caption = "toto"
Label2.caption = "toto"
Label3.caption = "toto"
Label4.caption = "toto"

tu écrira :
Label1(0).caption = "toto"
Label1(1).caption = "toto"
Label1(2).caption = "toto"
Label1(3).caption = "toto"

Le chiffre entre parenthèse représentant l'index du contrôle

Les avantage ? certes pour l'instant on ne les vois pas mais imagine la chose suivante :
t'a liste contiens 3521 éléments, les géré un par un serait un taf monstrueux, c'est la qu'intervient la boucle liées au index de tes contrôles...

Voyons plutot comment remplir tes 3521 labels selon tes 3521 éléments de ta liste...

'Exemple

For i = 0 To List2.ListCount - 1
    If List2.List(i) <Date Then Label1(i).Caption "Alarm !" Else: Label1(i).Caption = "En cours..."
Next



Et voilà, en une fraction de seconde tout est traité !

Traduction :

Pour i(ma variable d'incrémentation de boucle) compte de 0 et jusqu'à la totalité du contenu de ma listbox -1 (et oui petit piège, le premier index de la listebox est 0 mais le nombre total d'éléments par de 1... du coup le -1 sert a équilibré le tout, tu peut essayer sans, tu aura un plantage du genre "index non valide"...

Après ton code,

Puis au final le mot clé NEXT qui dit à vb de retourner à la première ligne de la boucle en incrémentent i de 1

La boucle ne sera terminé et permettra l'exécution de la suite du code que lorsque i sera égale au maximum de la boucle

Ah oui, sur le "i" en fait c'est une habitude dans beaucoup de langage, c'est une variable qui représente dans la boucle une données de type "integer" (soit un nombre entier : 1-9999999999....). "i" parce que première lettre de integer tout simplement.
Dans ce cas de figure i étant loger dans une instruction de boucle il n'a pas besoins d'être déclaré comme toute autre variable du genre :

Dim maVariable as String

Mais, si tu à au début de tout ton code l'instruction "OPTION EXPLICIT" (cela veut dire en gros que toutes les variables doivent être déclaré, ça évite les erreurs) tu auras une erreur si tu ne la déclare pas comme cela

dim i as integer

PS nul besoin de nommer i, si tu veut tu peut aussi nommé ta variable "le_pere_noel_est_une_ordure"...

Voilà je me suis un peu étalé mais j'espère que ça te sera utile....

Guillaume
0
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
9 nov. 2010 à 19:53
Integer c'est de -32676 à +32676, non ?
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
10 nov. 2010 à 04:19
@nathansecret : Presque !

Plus précisément de -32 768 à 32 767 (je sait je chipote...)
'source MSDN

;)

Guillaume
0
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
10 nov. 2010 à 19:20
Aussi, on peut remplacer

Dim I As Integer
par
Dim I%

ou encore :

Dim Texte as String
par
Dim Texte$
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
3 sept. 2011 à 01:05
MdLoL nathansecret...

Là c'est toi qui chipote !

Guillaume
0
Rejoignez-nous