Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM [Résolu]

Likith

XLDnaute Nouveau
Bonjour à toi qui me lira, bonjour le forum,


J'ai un bel outil tout fini! ou presque...

En effet, un code censé me permettre de rajouter du code à une feuille nouvellement créée (automatiquement) ne veux s'exécuter!
A vrai dire, au début il semblait fonctionner.

Maintenant, il ne fonctionne plus sauf si j'ouvre VB avant de l'éxécuter ou que je l'éxécute en pas à pas : c'est incompréhensible!!

L'erreur est la suivante :
"Erreur d'éxécution '9' :
L'indice n'appartient pas à la sélection"
Mon code est le suivant :
Code:
Private Sub BoutonAjoutZone_Click()

'Création de la nouvelle feuille
ActiveWorkbook.Sheets.Add.Name = "FeuilleVierge"
Sheets("FeuilleVierge").Move after:=Worksheets(Worksheets.Count)

'Ajouter une macro à la nouvelle feuille
Dim laMacro As String
Dim x As Integer

laMacro = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf
[...]
laMacro = laMacro & "End Sub"

With ThisWorkbook.VBProject.VBComponents(Sheets("feuil1").CodeName).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With

End If
Exit Sub

L'erreur vient de la ligne suivante :
Code:
With ThisWorkbook.VBProject.VBComponents(Sheets("feuil1").CodeName).CodeModule

et cette écriture ne donne pas plus de résultat :
Code:
ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule


Je suis donc coincé et malgré mes recherches je n'ai rien trouvé de concluant.

Auriez vous une petite idée pour moi?


Je vous en remerci d'avance!

Bonne journée.

Likith
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Bonjour Likith
VB:
Private Sub CommandButton1_Click()
Dim laMacro As String, x As Integer
'Création de la nouvelle feuille
  ActiveWorkbook.Sheets.Add.Name = "FeuilleVierge"
  Sheets("FeuilleVierge").Move after:=Worksheets(Worksheets.Count)

'Ajouter une macro à la nouvelle feuille
  laMacro = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf
'[...]
  laMacro = laMacro & "End Sub"

  With ThisWorkbook.VBProject.VBComponents(Sheets("FeuilleVierge").CodeName).CodeModule
    x = .CountOfLines + 1
    .InsertLines x, laMacro
  End With
End Sub
Écrit ainsi, ça fonctionne chez moi…
ROGER2327
#5025


Mardi 10 Pédale 138 (Nativité de Saint Tancrède, jeune homme, SQ)
14 Ventôse An CCXIX
2011-W09-5T10:11:30Z
 
G

Guest

Guest
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Bonjour,

Une procédure évènementielle n'est pas une macro comme les autres.

Modele:
[highLight=VBA]Dim Contenu As String
Sheets.Add 'Ajoute une feuille
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule

'Ajoute la procédure évènementielle WorkSheet_Change, vide (déclaration uniquemen)
.CreateEventProc "Change", "Worksheet"

'Contenu de la procédure évènementielle ajoutée, 'corps de macro
Contenu = "If Target.Address =" & Chr(34) & "$A$1" & Chr(34) & " Then" & vbCrLf
Contenu = Contenu & "Msgbox " & Chr(34) & "Bienvenu chez vous!" & Chr(34) & ", vbExclamation, " & Chr(34) & "Message accueil" & Chr(34) & vbCrLf
Contenu = Contenu & "End If"

'Insérer le contenu du corps de la procédure entre les lignes de déclaration
.InsertLines .ProcBodyLine("Worksheet_Change", 0) + 1, Contenu

End With[/highLight]
A+

[Edit] Hello Roger:)
 
Dernière modification par un modérateur:

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Merci beaucoup pour vos réponses rapides!

@ ROGER2327 : Tu propose en fait de déplacer au début de la macro :"Dim laMacro As String, x As Integer", à part ça je ne vois pas de différences... Bon, ça ne fonctionne pas!

@ Hasco : Je ne comprend pas exactement tout ton code mais ça me renvoi toujours le même problème! Si je l'éxécute pas à pas, il fonctionne, mais si VB est fermé, la ligne "With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule" me renvoi toujours la même erreur! C'est vraiment bizarre!!

Merci encore pour ces réponses rapides (et pour les couleurs aussi, c'est bien plus clair!)
 
G

Guest

Guest
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re,

Ben, je sais pas quoi te dire. As-tu modifié le niveau de sécurité des macros et cocher 'Faire confiance au projet Visual Basic' dans les options de sécurités?

A noter que j'avais oublié dans le corps de la macro à construire les $ de "A1".:
Contenu = "If Target.Address =" & Chr(34) & "$A$1" & Chr(34) & " Then" & vbCrLf

A+
 

ROGER2327

XLDnaute Barbatruc
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re...
(…)
@ ROGER2327 : Tu propose en fait de déplacer au début de la macro :"Dim laMacro As String, x As Integer", à part ça je ne vois pas de différences... Bon, ça ne fonctionne pas!
(…)
Il y a pourtant bien d'autres différences. (J'ai, entre autres, viré les ridicules End If et Exit Sub, qui n'ont rien à faire là…)

Et quoi que vous en pensiez, ça fonctionne.​
ROGER2327
#5027


Mardi 10 Pédale 138 (Nativité de Saint Tancrède, jeune homme, SQ)
14 Ventôse An CCXIX
2011-W09-5T11:04:07Z
 

Pièces jointes

  • Feuille_vierge.xls
    16.5 KB · Affichages: 97

ROGER2327

XLDnaute Barbatruc
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re...
Bonjour Roger et Hasco:),
Même combat ICI
Va falloir rajouter une ligne dans la charte : chaussez vos lunettes avant de lire la réponse :D !
A+
kjin
Approuvé !
À vrai dire, il y en a un peu marre de prendre dans la tronche
des "Ça marche pas" péremptoires à propos de formules
ou de procédures vérifiées, testées et re-testées…
ROGER2327
#5028


Mardi 10 Pédale 138 (Nativité de Saint Tancrède, jeune homme, SQ)
14 Ventôse An CCXIX
2011-W09-5T11:19:57Z
 

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re,
Ben, je sais pas quoi te dire. As-tu modifié le niveau de sécurité des macros et cocher 'Faire confiance au projet Visual Basic' dans les options de sécurités?
Oui! Mais si le document doit être éxécuté sur un autre pc, ça risque de poser problème... A voir!

A noter que j'avais oublié dans le corps de la macro à construire les $ de "A1".:
Contenu = "If Target.Address =" & Chr(34) & "$A$1" & Chr(34) & " Then" & vbCrLf
Oui, merci!


Re...
Il y a pourtant bien d'autres différences. (J'ai, entre autres, viré les ridicules End If et Exit Sub, qui n'ont rien à faire là…)​
Exact! Une bête erreur de copier coller, le End If et Exit Sub ne sont en fait pas inutil pour la suite de la macro...

Et quoi que vous en pensiez, ça fonctionne.
En effet, le fichier que tu m'as passer fonctionne parfaitement! Je dois donc avoir un autre problème dans mon fichier... Merci beaucoup de ton aide!


Bonjour Roger et Hasco,
Même combat ICI
Va falloir rajouter une ligne dans la charte : chaussez vos lunettes avant de lire la réponse !
A+
kjin
Je suis passé à côté, merci!​
 

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re,

@ ROGER2327, le petit fichier que tu m'as donné fonctionne, je me suis donc qu'autre chose interférait dans mon fichier. J'ai juste créé un nouveau bouton et fait un copié collé de ta macro, l'erreur est toujours là!! Blasant... je reconstruit rapidement mon fichiers excel pour voir si ça peut résoudre le problème.

Encore merci!

Bonne journée!
 

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Re,

@ ROGER2327, bon. Même ton fichier ne fonctionne plus sur mon poste, je vais essayer ailleurs. Soit mon poste a quelques problèmes soit le code n'est pas fiable.
(soit je suis vraiment très très mauvais, à ne pas exclure:rolleyes:)

Bonne soirée et bon weekend!!
 
Dernière édition:

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Bonjour,

Je n'arrive définitivement pas à faire fonctionner cette macro!

Je vais donc passer par "ThisWorkBook" avec l'évènement "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)".
On en trouve la liste des évènements possible ICI.

Je n'ai pas encore réussi à faire fonctionner cette nouvelle méthode mais j'y travaille!
(je tombe dans une boucle sans fin, mais ne comprend pas pourquoi...)

Merci encore pour votre aide.

Likith
 

Likith

XLDnaute Nouveau
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM

Bonjour,
(je tombe dans une boucle, mais ne comprend pas pourquoi...)

Pas très précis tout ça! Aïe! Aïe! boule de cristal cassée!

A+

Re,

Oui, je sais que je n'ai pas suffisamment donné de précisions puisque le problème ne correspondait pas à ce fil. De toute façon, problème résolu!!
(La feuille modifiée, entrainait une modification d'une autre feuille qui déclanchai la macro, etc... J'ai exclu de la macro les feuilles inutiles)
En passant par le Workbook, mon projet est plus légé et fonctionne parfaitement. C'était donc la solution!


Mercie encore de votre aide et de votre sollicitude.

Bonne journée.

Likith.
 
Dernière édition:
G

Guest

Guest
Re : Ajouter du code par vba - Crash -> TWB.VBP.VBC(ActiveSheet.CodeName).CM [Résolu]

Re,

Pour éviter ce genre d'erreur, dans les procédures évènementielles 'Change':
VB:
Sub WorkSheet_Change(ByVal Target As Range)
'Ajouter:
Application.EnableEvents = False ' Gèle la gestion des évènements
'....
'Actions de la macro
'....
Application.EnableEvents = True ' Rétablit la gestion des évènements
 
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 510
Membres
103 570
dernier inscrit
patrickb83p