End If sans bloc If, VBA/Access [Résolu]

nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 14:32 - Dernière réponse : nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 15:19
Bonjour,

Je n'ai pas trouvé ce qui cloche dans ce code :

(.....)
Private Sub traitement_données()

If champ_en_cours = "ID" Then
id = Mid(ligne, 6, InStr(ligne, ";") - 6)
ty = Mid(ligne, InStr(ligne, ";") + 2, Len(ligne) - (InStr(ligne, ";") + 2))
Exit Sub
End If
(.....)
If champ_en_cours = "fin" Then
If id <> "" And ty = "PATTERN" Then Mafonction
End If
Exit Sub
End If

End Sub
(.....)

Mais à la compilation pas à pas, il me répond "End If sans Bloc If" pour la zone en rouge. Si j'enlève le "If" imbriqué (vert), ça ne pose plus de problème. Cependant, je sais que l'on peut faire des imbrications. Vous voyez une erreur ?

précisions : VBA sous ACCESS 2003, mes variables (champ_en_cours, id, ty...) sont bien déclarées avant. "traitement_données" est lancé dans une boucle qui lit un document ligne par ligne, récupère des données dans le champ en cours, et lorsqu'on arrive à la fin d'un "bloc" de mon texte (fin), il lance Mafonction uniquement si la variable id n'est pas vide et que ty est bien un pattern.

Ce problème est très gênant car je ne le comprends pas. De plus, j'ai une erreur semblable dans un autre bout de code d'un autre module. Si vous trouvez une explication, ou mieux une solution, merci d'avance !
Afficher la suite 

14 réponses

Meilleure réponse
econs
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 6 févr. 2006 à 14:43
3
Merci
Salut,











Private Sub traitement_données()



If champ_en_cours = "ID" Then

id = Mid(ligne, 6, InStr(ligne, ";") - 6)

ty = Mid(ligne, InStr(ligne, ";") + 2, Len(ligne) - (InStr(ligne, ";") + 2))

Exit Sub

End If

(.....)

If champ_en_cours = "fin" Then

If id <> "" And ty = "PATTERN" Then Mafonction
<strike>End If </strike> <-- le problème est ici. Un ENDIF en trop.

Exit Sub

End If



End Sub




Quand l'action du Then se trouve sur la même ligne que le If, il ne faut pas mettre de END IF.


Manu

Merci econs 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Meilleure réponse
econs
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 6 févr. 2006 à 14:56
3
Merci
Dans ce cas, il ne faut pas mettre MaFonction et le IF sur la même ligne.









Private Sub traitement_données()

If champ_en_cours = "ID" Then
id = Mid(ligne, 6, InStr(ligne, ";") - 6)
ty = Mid(ligne, InStr(ligne, ";") + 2, Len(ligne) - (InStr(ligne, ";") + 2))
Exit Sub
End If
(.....)
If champ_en_cours = "fin" Then
If id <> "" And ty = "PATTERN" Then

Mafonction
End If
Exit Sub
End If

End Sub

Manu

Merci econs 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Meilleure réponse
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 15:11
3
Merci
Manu, ta solution a l'air de fonctionner : il n'y a plus d'erreur à ce niveau. Il suffit donc en résumer, de faire passer la suite de l'instruction Then à la ligne, ainsi :

If champ_en_cours = "fin" Then
If id <> "" And ty = "PATTERN" Then
InsertPatProsite
End If
id = ""
ac = ""
dt = ""
des = ""
pa = ""
pdoc = ""
fin = ""
Exit Sub
End If

Merci nenette_cherie 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 14:48
0
Merci
Le souci, ce que je n'ai pas mis ici, c'est qu'il y a tout une zone où je réinitialise mes variables pour relancer la boucle à "neuf", et il faut que la réinitialisation s'effectue, même si je ne rentre pas dans le "If id <> "" And ty = "PATTERN" Then Mafonction". En fait, voici le passage en entier :

If champ_en_cours = "fin" Then 'Identification
If id <> "" And ty = "PATTERN" Then InsertPatProsite
End If
Exit Sub
id = ""
ac = ""
dt = ""
des = ""
pa = ""
pdoc = ""
fin = ""
End If

d'où mon End If en vert.... Une proposition ?
précision : je n'avais pas mis le bloc car il ne pose pas de problème en lui-même....
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 14:50
0
Merci
D'ailleurs, le "Exit Sub" doit être placé à la fin, juste avant le "End If" final.
cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
- 6 févr. 2006 à 14:54
0
Merci
Lorsque tu fais tenir ton instruction if sur une seule ligne, tu n'a pas besoin de end if ! Du coup, je ne vois pas à quoi serve tes initialisations, vu que tu quitte ta procédure avant par ton exit sub...

_____________________________________________________________________

Avant de poster sur le forum, prière d'aller lire ceci :
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 14:59
0
Merci
Le "Exit Sub" est bien à la fin, avant le "End If" final. Il a été depuis remis à sa place. Si j'enlève le deuxième "End If" (celui en vert) comme vous le proposez, est-ce que les réinitialisations ne se feront que si les conditions sont respectées (If id <> "" And ty = "PATTERN") ou se feront-elles dans tous les cas ?
econs
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 6 févr. 2006 à 15:00
0
Merci
Je confirme. Avec le Exit Sub, ton initialisation ne se fera pas. Sauf
si tu veux sortir si ty="PATTERN", dans ce cas, il faut mettre le Exit
Sub entre le If et le End If.



DARK > Y'a un p'tit raté dans ta signature.

Manu
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 6 févr. 2006 à 15:01
0
Merci
Tu nous dis : "Le souci, ce que je n'ai pas mis ici, c'est qu'il y a tout une zone où je réinitialise mes variables pour relancer la boucle à "neuf", et il faut que la réinitialisation s'effectue"
Ou est-elle cette boucle ?
donnes nous le code complet on pourras mieux t'aider

GRENIER Alain
econs
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 6 févr. 2006 à 15:06
0
Merci
Dans un mail précédent, tu as dis :

> et il faut que la réinitialisation s'effectue, même si je ne rentre pas dans le "If id <> "" And ty = "PATTERN"




Ce qui donne :


If id <> "" And ty = "PATTERN" Then


MaFonction
End If
' Toutes les initialisations ici

id = ""

ac = ""

dt = ""

des = ""

pa = ""

pdoc = ""

fin = ""





Quant au "Exit Sub", il faut dire à quoi il te sert pour savoir où on doit le placer.





Manu
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 15:06
0
Merci
Je ne peux pas donné le code entier car il est trop long (vraiment). En gros, c'est une boucle qui, tant que mon fichier de départ n'est pas à la fin, va lire ligne par ligne. Pour chaque ligne, il va repérer des champs précis (ID, fin....) et récupère les données intéressantes. Lorsqu'il arrive à l'élément fin, je désire lancer Mafonction (seulement si id et ty respecte les conditions) et réinitialiser mes variables (même si ty et id ne respecte pas) avant de changer de ligne, et ce jusqu'à la fin du document (boucle).
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 15:07
0
Merci
Le exit sub est correct, c'est pour revenir à ma boucle "tant que le fichier n'est pas à la fin"
econs
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Dernière intervention
23 décembre 2008
- 6 févr. 2006 à 15:14
0
Merci
OUI, évite de mettre des instructions derrière le Then, sur la même ligne.

Sinon, tu vas avoir des problèmes en comptant tes End If.



Quand tu seras plus à l'aise avec les structures conditionnelles en VB,
tu pourras jouer à çà. Mais çà reste de l'ordre du gadget.

Manu
nenette_cherie
Messages postés
17
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
28 avril 2006
- 6 févr. 2006 à 15:19
0
Merci
Merci beaucoup en tout cas, car c'était vraiment pas grand chose mais qui bloquait tout. MERCI !! En espérant que ça puisse aider d'autres personnes comme moi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.