[VBA] Générer automatiquement un code VBA dans une nouvelle feuille

Un nouveau fichier :Oups ! J'ai oubliais de le mettre, maintenant c'est trop tard je l'ai lancé...Même code mais jamais lancé, ça donne quoi ?

@ bientôt

LouReeD

De mon coté, je lance la procédure, ça crée la feuille, je change de feuille, je revient, la msgbox s'affiche.

Je supprime cette feuille, j'enregistre, je quitte.

J'ouvre, je lance la procédure = erreur, je stop le code, je supprime la feuille créée, je relance la procédure, ça crée la feuille avec le principe de la msgbox.

je supprime le feuille, je lance, ça crée et pas de soucis.

je supprime, j'enregistre et je quitte.

j'ouvre, je lance = erreur, j'arrête le code, je supprime la feuille créée, je relance et ça marche !

Après avoir quitté, le premier lancement ne marche pas mais après tout fonctionne !

Là je ne comprend pas, mais si pour contourner ce problème, la fonction est utile alors il faut l'utiliser...

Mais j'avoue ne pas aimer ce qui n'est pas constant...

@ bientôt

LouReeD

C'est à rien y comprendre

J'ai re-téléchargé le fichier ...

capture d ecran 423 capture d ecran 424

Puis j'ai refait tourner la macro sans rien changer ... et en effet c'est ok !!

... et j'ai re-re-téléchargé le fichier, modifié la macro pour ajouter la fonction mystère et pas d'erreur !

pfttt un GMI (grand mystère de l'informatique)

Moi j'aime pas les GMI !

Affaire à creuser...

@ bientôt

LouReeD

La déclaration de l'objet et son instanciation par Set ws = ActiveSheetsemble résoudre le problème ...

Sub Test_LouReeD()
    Dim a, Un As String, Deux As String, ws As Worksheet
    Un = "Lou"
    Deux = "ReeD"
    ' on crée une feuille
    Sheets.Add After:=ActiveSheet
    Set ws = ActiveSheet
    ws.Name = Un & "_" & Deux
    ' on cible le codeModule de la feuille créée par son CodeName
    With ActiveWorkbook.VBProject.VBComponents(ws.CodeName).codeModule
        ' on inscrit les lignes de code VBA dans la feuille créée
        a = .countOfLines
        .insertLines a + 1, "Private Sub Worksheet_activate()"
        .insertLines a + 2, "' ceci est une remarque de LouReeD"
        .insertLines a + 3, "MsgBox(""Bonsoir"")"
        .insertLines a + 4, "End Sub"
    End With
End Sub

C'est en effet un cas que j'avais déjà rencontré (mais je ne sais plus dans quel cas de figure) ... une des hypothèse est qu'excel n'a pas encore "mis en place" les différents objets, notamment la nouvelle feuille, lors de l'appel de codename.

Sinon en 2012 (je n'étais pas né...) il y avait ceci : CodeName

@ bientôt

LouReeD

En fait il faut que l'éditeur VBA soit ouvert...

Un fichier sans éditeur ouvert provoque l'erreur, il suffit de cliquer sur "play" pour relancer le code au point d'arrêt de l'erreur et il se déroule normalement...

C'est pourquoi au premier lancement, ça bug, puis on débogue du coup l'éditeur est ouvert, et après on fait tous les tests cela fonctionne, on quitte on revient et paf ça plante l'éditeur est fermé !

Votre dernier code fourni réagi également de cette manière !

C'est dingue !

@ bientôt

LouReeD

Du coup celui-ci fonctionne :

Sub Test_LouReeD()
    Application.ScreenUpdating = False
    Application.VBE.MainWindow.Visible = True
    Dim a, Un As String, Deux As String, ws As Worksheet
    Un = "Lou"
    Deux = "ReeD"
    ' on crée une feuille
    Sheets.Add After:=ActiveSheet
    Set ws = ActiveSheet
    ws.Name = Un & "_" & Deux
    ' on cible le codeModule de la feuille créée par son CodeName
    With ActiveWorkbook.VBProject.VBComponents(ws.CodeName).codeModule
        ' on inscrit les lignes de code VBA dans la feuille créée
        a = .countOfLines
        .insertLines a + 1, "Private Sub Worksheet_activate()"
        .insertLines a + 2, "' ceci est une remarque de LouReeD"
        .insertLines a + 3, "MsgBox(""Bonsoir"")"
        .insertLines a + 4, "End Sub"
    End With
    Application.VBE.MainWindow.Visible = False
End Sub

Mais c'est pas beau...

La fonction est plus propre, mais comme c'est étrange d'avoir des propriétés qu'on ne peut utiliser simplement...

MS quand tu nous tient !

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba generer automatiquement code nouvelle feuille"