Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

plantage excel avec codemodule

J

jean

Guest
Bonjour,

Voici ci-dessous le code de deux procédures qui fonctionnent parfaitement lorsqu'elles sont lancées séparément, mais pour mon projet j'ai besoin à un moment d'écrire dans une autre procédure :

call apparitionbouton
call apparitionbouton2

et lorsque je fais ça excel plante complètement et se ferme...
Visiblement quelque chose cloche dans l'enchainement des deux procédures...
merci de votre aide et voici le code:

Sub apparitionbouton()



Dim code, code2 As String
Dim bouton, bouton2 As OLEObject
Set bouton = Worksheets('tabloogloobal').OLEObjects.Add(ClassType:='Forms.CommandButton.1', Link:=False, DisplayAsIcon:=False, Left:=6.75, Top:=19, Width:=63, Height:=25)
bouton.Object.Caption = 'rafraîchir'
bouton.Name = 'bouton'

code = 'Private sub bouton_Click()' & vbCrLf
code = code & 'run ''processusinverse''' & vbCrLf
code = code & 'worksheets(''tabloogloobal'').select' & vbCrLf
code = code & 'End sub' & vbCrLf



With ThisWorkbook.VBProject.VBComponents(Worksheets('tabloogloobal').CodeName).CodeModule
.AddFromString (code)
.CodePane.Window.Close
End With


End Sub



Sub apparitionbouton2()


'Dim code2 As String
'Dim bouton2 As OLEObject
Set bouton2 = Worksheets('SemaineProchaine').OLEObjects.Add(ClassType:='Forms.CommandButton.1', Link:=False, DisplayAsIcon:=False, Left:=6.75, Top:=19, Width:=63, Height:=25)
bouton2.Object.Caption = 'rafraîchir'
bouton2.Name = 'bouton2'

code2 = 'Private sub bouton2_Click()' & vbCrLf
code2 = code2 & 'run ''processusinverse2''' & vbCrLf
code2 = code2 & 'worksheets(''SemaineProchaine'').select' & vbCrLf
code2 = code2 & 'End sub' & vbCrLf



With ThisWorkbook.VBProject.VBComponents(Worksheets('SemaineProchaine').CodeName).CodeModule
.InsertLines .countoflines + 1, code2
.CodePane.Window.Close
End With

End Sub
 

Bebere

XLDnaute Barbatruc
bonjour

j'ai testé le code qui suit , pas de problèmes

on ne peut pas passer d'objets aux macros à l'aide de la méthode Run

Sub apparitionbouton()

Dim code As String
Dim bouton As OLEObject
Set bouton = Worksheets('tabloogloobal').OLEObjects.Add(ClassType:='Forms.CommandButton.1', Link:=False, DisplayAsIcon:=False, Left:=6.75, Top:=19, Width:=63, Height:=25)
bouton.Object.Caption = 'rafraîchir'
bouton.Name = 'bouton'

code = 'Private sub bouton_Click()' & vbCrLf
code = code & 'Application.run ''processusinverse''' & vbCrLf
code = code & 'worksheets(''tabloogloobal'').select' & vbCrLf
code = code & 'End sub' & vbCrLf

With ThisWorkbook.VBProject.VBComponents(Worksheets('tabloogloobal').CodeName).CodeModule
.AddFromString (code)
.CodePane.Window.Close
End With

End Sub

Sub apparitionbouton2()

Dim code2 As String
Dim bouton2 As OLEObject
Set bouton2 = Worksheets('SemaineProchaine').OLEObjects.Add(ClassType:='Forms.CommandButton.1', Link:=False, DisplayAsIcon:=False, Left:=6.75, Top:=19, Width:=63, Height:=25)
'bouton2.Object.Caption = 'rafraîchir'
'bouton2.Name = 'bouton2'

code2 = 'Private sub bouton2_Click()' & vbCrLf
code2 = code2 & 'Application.run ''processusinverse2''' & vbCrLf
code2 = code2 & 'worksheets(''SemaineProchaine'').select' & vbCrLf
code2 = code2 & 'End sub' & vbCrLf



With ThisWorkbook.VBProject.VBComponents(Worksheets('SemaineProchaine').CodeName).CodeModule
.InsertLines .countoflines + 1, code2
.CodePane.Window.Close
End With

au revoir
End Sub
 

Ti_

Nous a quitté
Repose en paix
Marrant ça, je je me suis débattu pendant plusieurs jours la semaine passée sur un problème similaire dans mon dernier programme, et je pense que ce qui m'a pourri la vie doit avoir la même cause que toi.

En fait, Excel recompile en arrière plan dès qu'on insère du code dans une feuille, et c'est là qu'il plante. On peut d'ailleurs noter qu'il doit recompiler de la même manière dans un module, mais que là ça ne plante pas. Après force recherches, je n'ai trouvé qu'une seule solution valable, et encore, si ce code n'est destiné qu'à tourner sur ta propre machine : il faut aller dans le menu outils de l'éditeur VBA, onglet 'Général', et là décocher l'option 'compilation sur demande'. Alors ça ne plante plus.

Mais comme je n'ai par ailleurs trouvé aucun moyen de modifier cette option par macro, j'ai dû m'avouer vaincu et supprimer dans mon programme la copie de code dans une feuille.
A noter pour être précis que dans mon programme, ça plante systématiquement lorsque le copier/coller se fait depuis un treeview, mais ça ne plante que 'de temps en temps' lorsque je passe par un simple bouton de commande qui va copier telle macro d'un module à une feuille.
 

Hellboy

XLDnaute Accro
Bonsoir jean, Ti_, Bebere

Jean, peux-tu me dire si ton but est d'insérer une procédure a partir d'un autre fichier vers un autre fichier.

Et pourquoi elle n'est pas présente déjà dedans ?

Ton bouton que tu crée apparait ds un autre fichier, ou dans celui que tu travail ?

En attendant, j'ai pris cette sitation (anglaise)du site http://www.cpearson.com/excel/vbe.htm

Elle parle bien entendu comment inséré une procédure dans un module. Je ne sais pas si ça s'applique atoi, mais il y a deux mises en garde. Si tu comprend pas tout je te ferai une traduction de mon mieux.



a+
 

Discussions similaires

Réponses
16
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…