nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006
-
6 févr. 2006 à 14:32
nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 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 !
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200823 6 févr. 2006 à 14:56
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
nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006 6 févr. 2006 à 15:11
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
nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006 6 févr. 2006 à 14:48
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....
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 6 févr. 2006 à 14:54
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...
nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006 6 févr. 2006 à 14:59
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és4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200823 6 févr. 2006 à 15:00
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.
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
nenette_cherie
Messages postés17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006 6 févr. 2006 à 15:06
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és17Date d'inscriptionjeudi 10 juin 2004StatutMembreDernière intervention28 avril 2006 6 févr. 2006 à 15:19
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