Construction workbook par VBA

Le
Joël André
Bonjour,

J'essaie d'écrire une procédure pour la création automatique d'un classeur
par VBA avec ajout du code (Excel 2000)

A) Pour écrire du code généré par VBA en Feuil1, Feuil2 pas de problème.
Par contre, pour écrire du code par VBA en feuille ThisWorbook, je plante
lamentablement.
Private Sub Workbook_Open()
InitialisationMacrosEtParamètres ' Lance la première macro en
"Module1"
End Sub
Si vous avez une solution automatique, merci.

B) Le code attaché aux boutons ne pose aucun problème (merci à michdenis)

Si la construction des pages est faite dans la même macro, apparition d'une
erreur..!
Par contre, si chaque page est construite par une macro différente, aucun
problème.

Pour sortir de ce problème, j'ai dû découper la macro principale en
plusieurs (une par feuille). Elles sont lancées les unes aprés les autres.
Comme il y a 9 feuilles différentes à construirec'est lourd.
Comment automatiser en ne lancant qu'une seule procédure? Merci.

Voici, ci-dessous, le code de génération qui pose problème.

Merci pour vos idées et votre temps.

Joël André


Private sub CréationFeuillesTravaux ()

Sheets("Feuil1").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 9
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects

' Bouton Aide Générale - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeAideGénérale"
.Object.Caption = "Aide Générale"
End With
' Ici, le code se rapportant au bouton est construit
Code = " " & vbCrLf
Code = " Private Sub CommandeAideGénérale_Click() ' Affiche
l'aide générale" & vbCrLf
Code = Code & " AfficheAideGénérale ' 10*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Série Directe - N° 2
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:R6, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeSérieDirecte"
.Object.Caption = "Série Directe"
End With
Code = " " & vbCrLf
Code = Code & " Private Sub CommandeSérieDirecte_Click() ' Teste
la série en directe, sans la stocker" & vbCrLf
Code = Code & " VérifieContenueSaisieEnCours ' 13*****" &
vbCrLf
Code = Code & " If CertifieSérie = True Then SérieDirecte '
17*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Extrait Série - N° 3
..
..

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With

Sheets("Feuil2").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects
' Bouton Vérification Travaux - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
..
..
' Bouton XXXXX - N° ?
..
..

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With
End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #22157221
Bonjour,

Pour insérer du code dans le ThisWorkbook du Classeur

Tu dois remplacer With ThisWorkbook dans la procédure
par la référence au classeur dans lequel tu veux ajouter le code
cela pourrait être :

With Workbooks("NomDuclasseur.xls")...
OU par une variable objet
with Wk ...

Cependant, le ThisWorkbook dans l'expression VBComponents("ThisWorkbook")
ne change pas.

'-----------------------------------
Sub test()

Dim Code As String

Code = "Private Sub Workbook_Open()" & vbCrLf
Code = Code & "InitialisationMacrosEtParamètres" & vbCrLf
Code = Code & "End Sub"

With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString Code
End With

End Sub
'-----------------------------------




"Joël André" eFNU3vl#
Bonjour,

J'essaie d'écrire une procédure pour la création automatique d'un classeur
par VBA avec ajout du code (Excel 2000)

A) Pour écrire du code généré par VBA en Feuil1, Feuil2... pas de problème.
Par contre, pour écrire du code par VBA en feuille ThisWorbook, je plante
lamentablement.
Private Sub Workbook_Open()
InitialisationMacrosEtParamètres ' Lance la première macro en
"Module1"
End Sub
Si vous avez une solution automatique, merci.

B) Le code attaché aux boutons ne pose aucun problème (merci à michdenis)

Si la construction des pages est faite dans la même macro, apparition d'une
erreur..!
Par contre, si chaque page est construite par une macro différente, aucun
problème.

Pour sortir de ce problème, j'ai dû découper la macro principale en
plusieurs (une par feuille). Elles sont lancées les unes aprés les autres.
Comme il y a 9 feuilles différentes à construire...c'est lourd.
Comment automatiser en ne lancant qu'une seule procédure? Merci.

Voici, ci-dessous, le code de génération qui pose problème.

Merci pour vos idées et votre temps.

Joël André


Private sub CréationFeuillesTravaux ()

Sheets("Feuil1").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 9
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects

' Bouton Aide Générale - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeAideGénérale"
.Object.Caption = "Aide Générale"
End With
' Ici, le code se rapportant au bouton est construit...
Code = " " & vbCrLf
Code = " Private Sub CommandeAideGénérale_Click() ' Affiche
l'aide générale" & vbCrLf
Code = Code & " AfficheAideGénérale ' 10*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Série Directe - N° 2
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:R6, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeSérieDirecte"
.Object.Caption = "Série Directe"
End With
Code = " " & vbCrLf
Code = Code & " Private Sub CommandeSérieDirecte_Click() ' Teste
la série en directe, sans la stocker" & vbCrLf
Code = Code & " VérifieContenueSaisieEnCours ' 13*****" &
vbCrLf
Code = Code & " If CertifieSérie = True Then SérieDirecte '
17*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Extrait Série - N° 3
.....
.....

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With

Sheets("Feuil2").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects
' Bouton Vérification Travaux - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
.....
.....
' Bouton XXXXX - N° ?
.....
.....

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With
End Sub
Joël André
Le #22158811
michdenis, merci beaucoup.
Le code pour Thisworkbook fonctionne parfaitement.
Merci.

Cordialement.
Joël André


"michdenis"
Bonjour,

Pour insérer du code dans le ThisWorkbook du Classeur

Tu dois remplacer With ThisWorkbook dans la procédure
par la référence au classeur dans lequel tu veux ajouter le code
cela pourrait être :

With Workbooks("NomDuclasseur.xls")...
OU par une variable objet
with Wk ...

Cependant, le ThisWorkbook dans l'expression VBComponents("ThisWorkbook")
ne change pas.

'-----------------------------------
Sub test()

Dim Code As String

Code = "Private Sub Workbook_Open()" & vbCrLf
Code = Code & "InitialisationMacrosEtParamètres" & vbCrLf
Code = Code & "End Sub"

With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString Code
End With

End Sub
'-----------------------------------




"Joël André" discussion :
eFNU3vl#
Bonjour,

J'essaie d'écrire une procédure pour la création automatique d'un classeur
par VBA avec ajout du code (Excel 2000)

A) Pour écrire du code généré par VBA en Feuil1, Feuil2... pas de
problème.
Par contre, pour écrire du code par VBA en feuille ThisWorbook, je plante
lamentablement.
Private Sub Workbook_Open()
InitialisationMacrosEtParamètres ' Lance la première macro en
"Module1"
End Sub
Si vous avez une solution automatique, merci.

B) Le code attaché aux boutons ne pose aucun problème (merci à michdenis)

Si la construction des pages est faite dans la même macro, apparition
d'une
erreur..!
Par contre, si chaque page est construite par une macro différente, aucun
problème.

Pour sortir de ce problème, j'ai dû découper la macro principale en
plusieurs (une par feuille). Elles sont lancées les unes aprés les autres.
Comme il y a 9 feuilles différentes à construire...c'est lourd.
Comment automatiser en ne lancant qu'une seule procédure? Merci.

Voici, ci-dessous, le code de génération qui pose problème.

Merci pour vos idées et votre temps.

Joël André


Private sub CréationFeuillesTravaux ()

Sheets("Feuil1").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 9
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects

' Bouton Aide Générale - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeAideGénérale"
.Object.Caption = "Aide Générale"
End With
' Ici, le code se rapportant au bouton est construit...
Code = " " & vbCrLf
Code = " Private Sub CommandeAideGénérale_Click() ' Affiche
l'aide générale" & vbCrLf
Code = Code & " AfficheAideGénérale ' 10*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Série Directe - N° 2
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:R6, Top:=0, Width:i, Height:.5).Select
With Selection
.Placement = xlFreeFloating
.PrintObject = False
.Name = "CommandeSérieDirecte"
.Object.Caption = "Série Directe"
End With
Code = " " & vbCrLf
Code = Code & " Private Sub CommandeSérieDirecte_Click() ' Teste
la série en directe, sans la stocker" & vbCrLf
Code = Code & " VérifieContenueSaisieEnCours ' 13*****" &
vbCrLf
Code = Code & " If CertifieSérie = True Then SérieDirecte '
17*****" & vbCrLf
Code = Code & " End Sub"

' Bouton Extrait Série - N° 3
.....
.....

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With

Sheets("Feuil2").Select

Range("A1").Select
'Ici, Toutes les cellules sont mises à police Arial 9
Cells.Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 10
End With

'Ici, les boutons commande sont créés
With ActiveSheet.OLEObjects
' Bouton Vérification Travaux - N° 1
.Add(ClassType:="Forms.CommandButton.1", Link:úlse,
DisplayAsIcon:úlse, Left:E7, Top:=0, Width:i, Height:.5).Select
.....
.....
' Bouton XXXXX - N° ?
.....
.....

With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End With
End Sub


Publicité
Poster une réponse
Anonyme