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:=False,
DisplayAsIcon:=False, Left:=457, Top:=0, Width:=69, Height:=19.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:=False,
DisplayAsIcon:=False, Left:=526, Top:=0, Width:=69, Height:=19.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:=False,
DisplayAsIcon:=False, Left:=457, Top:=0, Width:=69, Height:=19.5).Select
.....
.....
' Bouton XXXXX - N° ?
.....
.....
With
ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString Code End With
End Sub '-----------------------------------
"Joël André" a écrit dans le message de groupe de 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
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.
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString Code
End With
End Sub
'-----------------------------------
"Joël André" <joel.andre7@wanadoo.fr> a écrit dans le message de groupe de discussion :
eFNU3vl#KHA.5476@TK2MSFTNGP06.phx.gbl...
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
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString Code End With
End Sub '-----------------------------------
"Joël André" a écrit dans le message de groupe de 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
Joël André
michdenis, merci beaucoup. Le code pour Thisworkbook fonctionne parfaitement. Merci.
Cordialement. Joël André
"michdenis" a écrit dans le message de news:
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.
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString Code End With
End Sub '-----------------------------------
"Joël André" a écrit dans le message de groupe de 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
michdenis, merci beaucoup.
Le code pour Thisworkbook fonctionne parfaitement.
Merci.
Cordialement.
Joël André
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:
13348C01-832F-4F0B-9E22-11CCEBBCCA89@microsoft.com...
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.
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString Code
End With
End Sub
'-----------------------------------
"Joël André" <joel.andre7@wanadoo.fr> a écrit dans le message de groupe de
discussion :
eFNU3vl#KHA.5476@TK2MSFTNGP06.phx.gbl...
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
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString Code End With
End Sub '-----------------------------------
"Joël André" a écrit dans le message de groupe de 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