Probleme de compilation incomprehensible

Morgoline Messages postés 4 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 23 octobre 2008 - 9 oct. 2008 à 11:03
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 18 nov. 2011 à 11:59
Bonjour a tous,

je poste un nouveau message toujours concernant mon probleme de macro excel au comportement etrange.

alors j'ai modifié mon code depuis et simplifier mon application et je pense avoir identifier le probleme.

voila je demande via une Msg box a l'utilisatuer de mon fichier excel si il veut creer des boutons graphiques pour chaque feuille du classeur. j'ai donc une application sub dans un module qui me permet de de gerer les differentes reponse de l'utilisateur et d appeler la procedure de creation de buton. jsuque la ok ... la macro d interaction avec l utilsateur etant appeler des l'ouverture du classeur ,.

mais voila quand je ceer un bouton la procedure se deroule normalement jusqu'a la fin car s'affiche un message qui ne fait pas parti de la prcedure elle meme juste apres la creation du bouton sur la feuille. mais au monent ou je click sur ce message bime .... plantage Excel tout s'arrete , se ferme, et message  : la memoire ... ne pas pas etre ecrite apparait  !!!

ce qui me chiffone c'est que si je lance ma procedure de creation independament elle marche tres bien pour chaque feuille.
de plus et c'est la le plus etrange, si j'ouvre le classeur que je refuse de mettre des bouton et que je vais dans VBa editor, que la je fais debug > compiler et que je relance le programme au niveau de l'ouverture de classeur tout se deroule pour le mieux .

en revanche si je ferme le classeur et que je le reouvre et que je fais directement ce que la macro me demande la j'ai a nouveau une erreur et tout plante ...

alors se peut il que mon projet ne se compile pas a l'ouverture?
y a t il moyen de forcer la compilation a l'ouverture quelque chose du style application.debug.run
ou voyez vous une erreur dan mon code ..

merci de m'aider car la je suis pommé j'ai tout eclusé comme pirouette pour me debarraser de cela mais rien y fait et je ne trouve rien sur le net a ce propos .

voila mon code si vous pouvez le tester pour me dire ce qui vous en pensé je vous en serai tres obligé...

PROCEDURE D INTERFCE AVEC UTILISATEUR
Sub Open_Workbook()
Dim j As Integer


Dim error As Boolean
Dim obj As OLEObject


New_try:
Dim i As Long
Dim answser 'idéclaration de la variable, avec reponse comme nom
Dim answser_graphs


 ActiveWorkbook.Activate
 answser = MsgBox("Do you want to add Graphical Application ?", vbYesNo + vbQuestion, "Validation")


    Select Case answser
    Case vbYes       'on click yes
   
    On Error GoTo Problem
       
      For i = 1 To Worksheets.Count
            Worksheets(i).Activate
            Worksheets(i).Visible = True
           
            error = False


            For Each obj In Worksheets(i).OLEObjects
                                      If obj.Name "GraphButton" Or obj.Name "ValidationButton" Then
                        error = True
                        Exit For
                    End If
                   
            Next obj
       
            answser_graphs = MsgBox("Add Graphical Application on sheet : " & Worksheets(i).Name, vbYesNo + vbQuestion, "Sheet Insertion Button")
       
            Select Case answser_graphs
                    Case vbYes       'on click yes
                        If error = False Then
                        Call Module1.Button_Graph_creation(Worksheets(i).Name)  ||||ICI J APPEL MA CREATION DE BOUTON
                        MsgBox " Graphs Buttons added successfully !", vbInformation ||||| LA CA PASSE
                        |||||||| LA CA PLANTE
                        Else
                        MsgBox " Sheet : " & ActiveSheet.Name & " already contains Graphs applications ", vbInformation
                       
                        End If
                   
                    Case vbNo        'on click no
                    MsgBox " No Button added !", vbInformation
            End Select        'end
           
        Next i
   
   
    Case vbNo        'on click no
   
    End Select        'end


Exit Sub


Problem:
   
    MsgBox "Error occured, please try again !", vbInformation
    j = j + 1
    If j < 3 Then
        GoTo New_try
    Else
        MsgBox " This error need you to restar Excel if you want to add the Graphs, sorry", vbInformation
       
        Exit Sub
    End If
End Sub

PROCEDURE DE CREATION DE BOUTON DYNAMIQUE
'Purpose: Allow to create dynamically 2 Buttons on the sheet to add graph application


Sub Button_Graph_creation(Worksheet_Name As String) ' Worksheet_Name is the name of the sheet were we place the buttons
Dim Code As String 'code will contain the code of the burŽtoon we will create
Dim NextLine As String ' to situate where we are placing the code
Dim Last_cell As Long ' to know where is the last cell in used
Dim oOLE_G As Object ' object type to identifie an create the button Graph
Dim oOLE_V As Object ' object type to identifie an create the button Validation
Dim Ws As Worksheet ' the worksheet where we will use the button


'Application.ScreenUpdating = False


Set Ws = Worksheets(Worksheet_Name)
Last_cell = Ws.UsedRange.Columns.Count ' to know what is the last column in used


'to add a first button
Set oOLE_G = Ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
        Link:=False, DisplayAsIcon:=False, Left:=Ws.Cells(1, Last_cell).Left, Top:=5, Width:=100, Height:=50)


' to change the name of this button and it captation
With oOLE_G
        .Name = "GraphButton"
        .Object.Caption = "Graphs"
    'Ws.OLEObjects(Ws.OLEObjects.Count).Object.Caption = "Graphs"
End With


' the code we are placing in the procedure which is called after a click on this buton
    Code = "Sub GraphButton_Click()" & vbCrLf
    Code = Code & " Load Menu " & vbCrLf
    Code = Code & "Menu.Show " & vbCrLf
    Code = Code & "End Sub"


    With ActiveWorkbook.VBProject.VBComponents.Item(Ws.CodeName).CodeModule
        NextLine = (.CountOfLines + 1)
        .insertlines NextLine, Code
    End With


Set oOLE_G = Nothing ' realse the parameter
Set Ws = Nothing ' realse the parameter


'Application.ScreenUpdating = True


End Sub

PROCEDURE D APPEL AU DEMARRAGE
Sub Workbook_Open()
Call Open_Workbook
End Sub

6 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
18 oct. 2008 à 22:23
Salut Morgoline,

bon, je ne viens pas avec une solution toute faite, dommage! Mais comme tu n'as pas eu beucoup de réponses, ben ça en fait au moins une.

Cependant, ça ne m'enlèvre pas le droit de soulever quelques points:
Que se passe-t-il si tu n'affiches pas la MsgBox (dans le cas d'un succès d'ajout, de toutes façons, il parait inutile de confirmer la création, après avoir demandé une confirmation de la volonté de création, ça fait beaucoup de messages)?
Qu'en est-il de ce "Menu" qu'on charge dans le code non compilé (celui qui est ajouté à la volée dans la procédure Button_Graph_creation)? Vu le côté "tardif" du plantage (peut-être lié à l'affichage modal de la MsgBox), il s'agit peut-être d'un problème avec ce "Menu".

dis nous en plus, et continue à ne pas baisser les bras,

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
0
Morgoline Messages postés 4 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 23 octobre 2008
23 oct. 2008 à 10:21
Bonjour Msieur...

Alors desole our la repose tardive mais j'ai abandonné l'idee de trouver une solution a ce probleme de M...bip bip!

je reprends quand meme au cas ou quelqu un tombe dans la meme panique que moi !

Donc si je retire la message box a la noix qui dit " Boutons added sucessfully " ca ne change rien du tout toujours le meme souci.

Menu est un formulaire independant de cette procédure il est appelé lors du clic sur le bouton ajouté a la feuille et c'est donc pour cela que je n'en ais pas parlé :

en fait ce que fais mon programme de facon sequenciel et en francaios c'est cela :

-demander a utilisateurs si il desire creer une appilaction graphique sur la feuille active
-si oui appelle a la creation automatique de bouton
-puis passage a une autre feuille

et ainsi de suite jusqu a ce que toutes les feuilles aient visitées

a ce moment la une procedure graphique est appellée a chaque clic sur le bouton d'une des feuilles

voila, je confirme quand meme le soucis de ce probleme de compilation car je ne comprends decidement pas pourquoi le fait de compiler le programme ne le fais pas planter...
 
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
23 oct. 2008 à 10:37
Salut,

essaies de charger un autre formulaire que Menu (un qui ne fait rien, pour exclure la possibilité que Menu fasse quelque chose de pas bien).
essaies aussi de charger ce formulaire plus convenablement, en gardant une référence à lui (pour éviter la multi-instanciation).
essaies aussi de t'assurer de ne pas l'afficher modalement.

à+
0
cs_baloc Messages postés 56 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 29 octobre 2010
23 oct. 2008 à 10:43
a tu essayé de rajouter un
on error resume next.

sa te feras sauté le problème pour voir si il ne vient pas de plus loin.

et une victoire de plus pour Mr canard
0

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

Posez votre question
ocibert Messages postés 1 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 18 novembre 2011
18 nov. 2011 à 09:30
Peut-on connaître la fin de l'histoire ? Le on error resume a-t-il été la solution
Merci à tous
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 nov. 2011 à 11:59
Peut-on connaître la fin de l'histoire ? Le on error resume a-t-il été la solution
Merci à tous

Non seulement je ne le crois pas, mais j'insiste de surcroît sur la nécessite d'éviter, sauf pour traiter des erreurs imprévisibles, toute espèce de gestion d'erreur.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous