Erreur : seuls des commentaires peuvent apparaitre apres end sub...

Signaler
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017
-
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017
-
Mon programme sous vba access marchait parfaitement jusqu'a maintenant, je rajoutais quelques modifs du genre à vérifier si tous les champs étaient remplis, etc, et puis tout d'un coup il s'est mis à faire cette erreur en lisant la procédure de démarrage : "Seuls des commentaires peuvent apparaitre après End Sub, end function ou end property".
Mon programme est composé de plusieurs procédures, à l'ouverture form_open se déclenche et appelle une procédure nommée "ouverture", il la suit, puis bug sur le public sub de la procédure suivante en me faisant cette erreur...
Je ne sais pas comment résoudre ça?? Pour moi cette erreur n'a pas lieu d'etre, il est normal qu'après un "End Sub" d'une procédure, apparaisse le "public sub' d'une aute procédure, et pas forcément des commentaires...

15 réponses

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Bonjour,


Causes probables:


-Des declarations entre la fin d' une procedure et
le début de la suivante.
-Des commentaires sans '
- End sub ou Public ou Private Sub en double.





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
salut,

tu as du ajouter "quelques chose" après un end sub ou end function

exemple :

sub test1()
'blabla
end sub

call test2


sub test2()

'blabla

end sub





msgbox "truc"





les instructions en rouge ne sont pas DANS des routines


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Tout ce que vous dites me parait logique, mais j'ai vérifié plusieurs fois, il n'y a absolument rien entre 2 procédures, j'ai beau relire mon programme de long en large, je ne vois pas...
Est-ce que ça pourrait venir d'autre chose, quelque chose à l'intérieur d'une procédure?...

En fait il bug à la première procédure qui suit, alors que normalement il ne devrait meme pas essayer de la lire puisqu'au démarrage, la procédure suivante n'est pas appelée... Pourquoi le programme ne s'arreterait-il pas au End Sub de la procédure d'ouverture? Il bug quand il essaye d'aller plus loin alors qu'il n'a pas à le faire!!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
re

copie TOUT ton code ici :
http://tools.codes-sources.com/copy-paste-code.aspx?add= 1

pense bien à mettre un titre et une mini description, puis donne-nous le lien, on pourra mieux se rendre compte, au cas où...

++

<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
en effet je ne vois pas de code parasite non plus

par contre dans la procédure Ouverture, VBA doit tiquer sur les with imbriqués

essaye comme çà :






'------------------------------------------


'Code de l'ouverture du formulaire


'Initialise les Treeview, listview et l'utilisateur en
cours


'------------------------------------------


Public Sub 
Ouverture()

    Set DTB = CurrentDb
    Set TbUtilisateur = DTB.OpenRecordset("Utilisateur")
    Set TbPhoto = DTB.OpenRecordset("Photo")
    Set TbFacture = DTB.OpenRecordset("Facture")
    Set TbLigneFacture = DTB.OpenRecordset("Ligne_Facture")
    Set TbCompoFacture = DTB.OpenRecordset("CompositionFacture")
    Set TbTag = DTB.OpenRecordset("Tag")
    Set TbAchat = DTB.OpenRecordset("Achat")
    Set TbFormat = DTB.OpenRecordset("Format")
    
    ListBox1.Clear
    ListBox2.Clear
    Image1.Picture = Nothing
   
    'on identifie
l'utilisateur qui a ouvert le formulaire
    Dim admin As Boolean 'variable pour savoir si
l'utilisateur est administrateur
    Identifiant = Forms("Formulaire1").Tag
    Form_Formulaire1.NomUtilisateur.Value =
Identifiant
    
    'si l'utilisateur n'est
pas un administrateur, on désactive les boutons relatifs à
l'administrateur
    TbUtilisateur.MoveFirst
    While Not TbUtilisateur.EOF
        If TbUtilisateur(0) = Identifiant Then
            admin = TbUtilisateur(4)
            TbUtilisateur.MoveLast
        Else
            TbUtilisateur.MoveNext
        End If
    Wend
    
    'si l'utilisateur
n'est pas un admin
    Ajouter_adhérent.Enabled = admin
    LoadPhotos.Enabled = admin
    Presents_Photo.Enabled = admin
    Supprimer.Enabled = admin
    RAZ.Enabled = admin
    
    'Initialisation du dossier des photos avec le chemin
absolu
    DossierRacine = "C:\Photos"
    
    '--------------------------------
    'Code pour construire le treeview
    '--------------------------------
    Dim DP As String, NomRepCourt As String
    Dim oFSO As Scripting.FileSystemObject
    Dim Racine As Scripting.Folder
    Dim oFl As File
    
    'Instanciation du FSO
    Set oFSO = New Scripting.FileSystemObject
    'Accède au répertoire du départ de
recherche
    Set Racine = oFSO.GetFolder(DossierRacine)
    
    'Calcul du nom court du nom du répertoire racine de
l'arborescence des photos
    NomRepCourt = NomCourt(Racine.Path)
    
    'Initialisation du treeview
    With TreeView1
        .Style = tvwTreelinesPlusMinusPictureText
        .LineStyle = tvwRootLines
        .Nodes.Clear
        .Nodes.Add , , Racine.Path, NomRepCourt
        .Nodes(Racine.Path).Expanded = True
    End With
    
    'Construction
récursive du Treeview
    ExplorerDossiers Racine
    '----------------------------
    'fin code pour construire le treeview
    '----------------------------
    
    'Initialisation des colonnes du ListView des
adhérents
    With ListView1.ColumnHeaders
        .Clear 'Supprime les anciens
entêtes
        
        'Ajout des
colonnes
        .Add , , "Personne"
        .Add , , "Promotion"
    End With
    
    With ListView1
        .View = lvwReport 'affichage en mode
Rapport
        .GridLines = True 'affichage d'un
quadrillage
        .FullRowSelect = True 'Sélection des lignes
complètes
        .Checkboxes = True
        '.Sorted =
True
    End With
    
    Dim i As Integer
    i = 0
    TbUtilisateur.MoveFirst
    With ListView1
        .ListItems.Clear
        While Not TbUtilisateur.EOF 'on parcourt
l'ensemble des enregistrements de la table
Utilisateur
            i = i + 1
            .ListItems.Add , , TbUtilisateur(0) 'on entre
le nom des adhérents
            .ListItems(i).ListSubItems.Add , , TbUtilisateur(2) 'et leur
numero de promo
            TbUtilisateur.MoveNext
        Wend
    End With
    
    
    'Initialisation des colones du ListView des phtotos
commandées
    With ListView2.ColumnHeaders
        .Clear 'Supprime les anciens
entêtes
        
        'Ajout des
colonnes
        .Add , , "Photo"
        .Add , , "Quantité"
        .Add , , "Format"
    End With
    
    With ListView2
        .View = lvwReport 'affichage en mode
Rapport
        .GridLines = True 'affichage d'un
quadrillage
        .FullRowSelect = True 'Sélection des lignes
complètes
        .Checkboxes = False
        '.Sorted =
True
    End With
    
    'Initialisation des CombosBox de quantité et de
format
    Dim j As Integer
    For j = 1 To 10
        ComboBox1.AddItem j
    Next j
    
    While Not TbFormat.EOF
        If TbFormat(3) Then ComboBox2.AddItem TbFormat(1)
        TbFormat.MoveNext
    Wend
    
    ComboBox1.Value = "1"
    ComboBox2.Value = "10x15"
    
    Set oFl = Nothing
    Set Racine = Nothing
    Set oFSO = Nothing
End Sub





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>






NB : pourquoi appelles-tu cette procédure 2 fois de suite? pas logique...
NB : si çà ne change rien, vérifie le

Formulaire1

et le

Form_Formulaire1



++


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

J'ai modifié les With, et j'ai enlevé la procédure form_open, le programme bug en ouvrant la procédure "Ouverture".(s'arrete sur le point d'arret Public Sub Ouverture)
Qu'est-ce que tu entends par vérifier le formulaire1 et le form_formulaire1?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
L'erreur vient peut-être de la Sub située avant celle-ci. Erreurs fréquentes :
- Oubli du En Sub de la précédente
- End Sub à la place de End Function
- End Sub à la place de Exit Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
essaye d'exécuter ton code en pas à pas [F8]
l'erreur doit venir du contenu de la sub Ouverture, ou d'un userform auquel elle fait référence (cf la fin de mon dernier post)
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Ok après recherche, c'est l'appel de la procédure ExplorerDossiers qui bug, quand la prcédure ouverture essaie de construire le treeview.
Mais encore une fois, je ne trouve pas pourquoi...
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Ok j'ai déplacé la procédure ExplorerDossiers en bas du code (pour m'assurer qu'il n'y a bien plus rien d'écrit après son end Sub"
Maintenant la procédure Ouverture bug a l'appel de la fonction NomCourt, alors qu'avant ça fonctionnait...
je ne comprends rien!
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

personne n'a une idée?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Re
Comme te le suggère PCPT, créé un point d'arrêt sur la ligne d'appel de ta procédure puis continue en avançant avec F8, tu finiras par tomber sur LA ligne qui créé le problème et qui se répercute sur la ligne d'appel de la Sub (en fonction de la gestion d'erreur, inexistante ou non autorisée dans les Options de ton IDE)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Autrement vires toutes les lignes vides.
Il se peut que quelque chose se trouve à l' extrème droite
de l' une de ces lignes.


Cela expliquerait pourquoi tu ne vois pas la selection au
niveau de la "chose" qui pose problème.

Ou bien alors mets en commentaire Option Compare DataBase.

      
<hr />


[] Ce qui va sans dire. va mieux en le disant.


<hr />
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Bon en fait j'ai déplacé les procédures successivement en bas du code, au fur et à mesure que l'erreur se déplaçait sur la procédure suivante.
Au bout d'un moment l'erreur a disparu.
Cependant quand je rajoute des procédures, il faut que je fasse attention ou je les place : si je ne les mets pas à la fin l'erreur recommence.

Bon voila, au final ça marche mais ça reste incompréhensible...
Merci de votre aide.