Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Construction workbook par VBA

2 réponses
Avatar
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 à 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

End With
End Sub

2 réponses

Avatar
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é" 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
Avatar
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.

'-----------------------------------
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é" 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