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

[vba]Erreur sur ajout de code dynamique

  • Initiateur de la discussion Initiateur de la discussion ludo27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ludo27

XLDnaute Junior
[Resolu][vba]Erreur sur ajout de code dynamique

Bonjour,
après l'insertion automatique d'un onglet, j'essaie de lui ajouter du code avec la procédure suivante :

Code:
Public Sub AjouteCodeAOnglet(MyOnglet As String)
  'Ajoute la procédure dans la feuille
    
    Dim NomVb As String
    'Application.Wait Now + TimeValue("0:00:10")
        
    Dim X As Integer
    With ActiveWorkbook.VBProject.VBComponents(Sheets(MyOnglet).CodeName).CodeModule
        X = .CountOfLines
        If X = 0 Then X = 1
        .InsertLines X + 1, "Private Sub WorkSheet_Change(ByVal Target As Range) " & vbCrLf
        .InsertLines X + 2, " Call InterceptTouche " & vbCrLf
        .InsertLines X + 3, "End Sub"
    End With
 
 End Sub

Quand j'éxécute le code la première fois après avoir ouver le classeur j'obtiens l'erreur :
Subscript out of range
sur la ligne
Code:
With ActiveWorkbook.VBProject.VBComponents(Sheets(MyOnglet).CodeName).CodeModule

Si je force la poursuite de l'éxécution, Excel plante.

En revanche si j'arrête l'éxécution, les fois suivantes, la procédure s'éxécute sans erreur.

Je n'arrive pas à comprendre ce qui se passe.

Si quelqu'un a une idée ....

Merci 🙂
 
Dernière édition:
Re : [vba]Erreur sur ajout de code dynamique

Bonjour Ludo27,

Le plus simple serait de mettre ta procédure dans ThisWorkbook
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Call InterceptTouche
End Sub

Nota : Tu as appelé ta procédure "InterceptTouche" ce qui est une erreur, puisque l'évènement "Change" ne s'éxécute qu'après modification et validation d'une cellule et non sur saisi au clavier 😉

A+
 
Re : [vba]Erreur sur ajout de code dynamique

Merci beaucoup BrunoM45, en effet ça marche très bien en mettant le code dans Workbook_SheetChange de ThisWorkbook 🙂

Ma recherche m'aura au moins appris à générer du code dynamique 😉

La procédure que j'ai appelée InterceptTouche parcourt toutes les touches du clavier en utilisant l'API windows GetAsyncKeyState pour vérifier si une touche a été enfoncée. Ca marche 😀

Code:
Sub InterceptTouche()
Application.ScreenUpdating = False
'utilisation de l'API GetAsyncKeyState pour détecter touche enfoncée
'parcourt toutes les touches pour vérifier si elles sont enfoncées
    For i = 1 To 255
        If GetAsyncKeyState(i) <> 0 Then
            MetAJourStatusDansUnOnglet (ActiveSheet.Name)
        End If
    Next i
End Sub

Il faut mettre en en-tête de module

Code:
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

En tout cas merci pour ton idée, je n'y avais pas pensé 🙂
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
7
Affichages
324
Réponses
4
Affichages
223
Réponses
2
Affichages
511
Réponses
3
Affichages
665
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
817
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
861
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…