Plantage Excel raison inconnue et suspicieuse

Morgoline Messages postés 4 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 23 octobre 2008 - 6 oct. 2008 à 09:46
Morgoline Messages postés 4 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 23 octobre 2008 - 7 oct. 2008 à 08:43
Bonjour a tous et a toutes,

je me resouds finalement a poster ici une question qui me turlyupine depuis 1 semaisne et que je n'arrive pas a resoudre sous Vba exxel 2003.

alors voila mon probleme, j'ai developper un eapplication qui me cr2e des graphiques sous plusieurs fichiers toutes l'application est contebue dnas une module que je deplace en fonction de mes fichiers. les graphique se crent parfaitement ca c'est bon. mais voila j'ai creer une fonction qui place dynaniquement 2 boutons sur les feuilles ou je veux disposer de mon appliaction graphique.

Aussi j'ai ceer une procedure qui me demande a l ouverture du classeur si je veux placer sur chaque feuille des boutons et qui en fonction de la repose appelle ou non ma fonction de creation de boutons. Quand je me place dans le projet Vba et que je demande la creation de bouton directement ca marche.

mais quand je ferme le fichier et que je le reouvre la plus rien ne marche des que je demande la creation de boutons excel se ferme et me demade l'envoie d'un rapport d'erreur.

le pire est c'est la que je capte pas si j'ouvre le fichier et que je vais directement dans Vba sans rien demader puis que je fais une compilation du projet et que je lance la macro cette fois ca marche sans soucis ... il faudrait presque que j'inclue une commande compiler en debut de programme je ne vois que ca.

si vous pouvez m aider a resoudre cette question qui me bloque complement ... je vous dirais un grand grand grand merci..

voila mon code :

''Ca c'est l'ouverture de mon classeur ..

Private Sub Workbook_Open()
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


 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 ActiveSheet.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
'' ca c'est ma procedure de creation dynamique de bouton
            Call Module1.Button_creation(Worksheets(i).Name)           
             MsgBox " Graphs Buttons added successfully !", vbInformation
           
            Else
            MsgBox " Sheet : " & ActiveSheet.Name & " already contain 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:
   
    Initialisation.Hide
    Unload Initialisation
   
    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

'' et voila le code la precdure de creation de boutton

'Purpose: Allow to create dynamically 2 Buttons on the sheet to add graph application


Sub Button_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 As OLEObject ' object type to identifie an create the buttons
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 = 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
    oOLE.Name = "GraphButton"
    Ws.OLEObjects(Ws.OLEObjects.Count).Object.Caption = "Graphs"


' the code we are placing in the procedure which is called after a click on this buton
    code = "Sub GraphButton_Click()" & vbCrLf    code code & "Menu.Title.Enabled True" & vbCrLf    code code & "Menu.Add_graphs.Enabled False" & vbCrLf    code code & "Menu.Tol_min.Enabled False" & vbCrLf    code code & "Menu.Tol_max.Enabled False" & vbCrLf    code code & "Menu.Series.Enabled False" & vbCrLf    code code & "Menu.Nominal_Val.Enabled False" & vbCrLf    code code & "Menu.Graph_location.Enabled False" & vbCrLf    code code & "Menu.End_file.Enabled False" & vbCrLf    code code & "Menu.Axis.Enabled False" & vbCrLf
    code = code & "Menu.Show " & vbCrLf
    code = code & "End Sub"


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


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


' to change the name of this button and it captation
oOLE.Name = "ValidationButton"
Ws.OLEObjects(Ws.OLEObjects.Count).Object.Caption = "Validation"
oOLE.Enabled = False 'make it use unable


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


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


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


'Application.ScreenUpdating = True


End Sub

Merci de votre aide!

2 réponses

cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
6 oct. 2008 à 19:26
Bonsoir,

J'ai un léger doute, lorsque la méthode s'exécute, le classeur n'est pas encore ouvert (je crois) et tu lui demande d'afficher des boutons sur des feuilles qui n'existe pas encore... (si je ne me trompe pas). Tu peux utiliser la procédure load pour exécuter ton code, la procédure open servirait juste à récupérer la réponse..

thierry la fronde
0
Morgoline Messages postés 4 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 23 octobre 2008
7 oct. 2008 à 08:43
Merci de me repondre Msieur la Fronde,

alors en fait le claseur existe deja quand j'ouvre le fichier car il s'agit d'une macro qui travaille sur des fichiers deja crées. Donc en theorie qund j ouvre le fichiertoutes les feuilles de mon classeurs se chargent enfin j espere...

cependant vu que je veux pas mourrir idiot et que je ne connaissait pas l instruction load j ai essayé. mais quand dans ma procedure je demande un load j'ai une vielle errueur de brin qui apparait run time error 404 object required...

bon je ais essayer de trouver une soluce pour cela mais ce qui m epatte et que je ne pidge pas du tout du tout, c'est le pourquoi : quand j ouvre directement mon fichier et commence a executer la macro le programme excel plante juste apres la creation de boutons, et pourquoi quand j ouvre mon fichier que je ne lance aps la macro que je vais dans l editeur Žvba et que la je fais debug, compiler puis que je me place dans ma fonction workbook_open et que je lance la macro avec play la et bien ca marche titpe top elle fait tout ce que je veux ...

si vous pouvez m eclairé la dessus parce aue la moi je suis largué... je me demande limite si il n y a pas une fonction pour appeler le compilateur en debut de projet ca me resoudrait mon soucis de facon moche certes mais ce le resoudrait quand meme

merci de votre aide
0
Rejoignez-nous