|
 Posté le 25/04/2012 @ 14:31 |
Petit astucien
| salut, salut! 
encore une fois je viens faire appel aux spécialistes parce que j'en aimarre de m'arracher les cheveux! 
plantons le décors:
-> une procédure Excel qui doit me créer dynamiquement un onglet et générer la Worksheet_Change associée
-> le code:
Sub creerOnglet(ByVal nom As String, ByVal couleur As Integer)
Sheets.Add Worksheets(1) Sheets(1).Name = nom ActiveWorkbook.Sheets(nom).Tab.ColorIndex = couleur
Code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf Code = Code & "Dim c As Range" & vbCrLf Code = Code & "For Each c In Target" & vbCrLf Code = Code & " Sheets(" & nom & ").Range(""H"" & c.Row).Select" & vbCrLf Code = Code & " Selection.FormatConditions.Delete" & vbCrLf Code = Code & " Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:=Sheets(""DATA"").Range(""L16"").Value" & vbCrLf Code = Code & " Selection.FormatConditions(1).Interior.ColorIndex = 3" & vbCrLf Code = Code & "Next c" & vbCrLf Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(Sheets(nom).CodeName).CodeModule .InsertLines .CountOfLines + 1, Code End With End Sub
-> l'erreur: erreur d'exécution 9 - l'indice n'appartient pas à la sélection
-> ce qui voudrait donc dire que Sheets(nom) n'existe pas en somme
or, l'onglet en question vient d'être crée par le code 10 lignes plus haut, et il est bien visible dans mon classeur(????)......... 
une idée peut être? 
merci.
|
|
|
|
|
|
Posté le 25/04/2012 à 16:16 |
| bonjour
comme ceci peut-être
Sub test() nom = "Marcel" couleur = RGB(255, 0, 0) Sheets.Add Worksheets(1) Sheets(1).Name = nom Sheets(nom).Tab.Color = couleur
Code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf Code = Code & "Dim c As Range" & vbCrLf Code = Code & "For Each c In Target" & vbCrLf Code = Code & " Sheets(" & Chr$(34) & nom & Chr$(34) & ").Range(""H"" & c.Row).Select" & vbCrLf Code = Code & " Selection.FormatConditions.Delete" & vbCrLf Code = Code & " Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:=Sheets(""DATA"").Range(""L16"").Value" & vbCrLf Code = Code & " Selection.FormatConditions(1).Interior.ColorIndex = 3" & vbCrLf Code = Code & "Next c" & vbCrLf Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(Sheets(nom).CodeName).CodeModule .InsertLines .CountOfLines + 1, Code End With
End Sub
OU
Dim nom As String Dim couleur As Integer
Public Sub test() creerOnglet "Paul", 3 End Sub Public Sub creerOnglet(nom, couleur) Sheets.Add Worksheets(1) Sheets(1).Name = nom Sheets(nom).Tab.ColorIndex = couleur Code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf Code = Code & "Dim c As Range" & vbCrLf Code = Code & "For Each c In Target" & vbCrLf Code = Code & " Sheets(" & Chr$(34) & nom & Chr$(34) & ").Range(""H"" & c.Row).Select" & vbCrLf Code = Code & " Selection.FormatConditions.Delete" & vbCrLf Code = Code & " Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:=Sheets(""DATA"").Range(""L16"").Value" & vbCrLf Code = Code & " Selection.FormatConditions(1).Interior.ColorIndex = 3" & vbCrLf Code = Code & "Next c" & vbCrLf Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(Sheets(nom).CodeName).CodeModule .InsertLines .CountOfLines + 1, Code End With
End Sub Modifié par gilbert_rgi le 25/04/2012 16:39 |
|
Posté le 25/04/2012 à 16:42 |
Petit astucien
| ok, merci de ta participation, MAIS tu pourrais mettre en évidence les différences entre ton code et le mien STP?
pas évident du tout là, et ecrit vraiment petit.
merci. Modifié par dry007 le 25/04/2012 16:43 |
|
Posté le 25/04/2012 à 16:50 |
| dry007 a écrit :
ok, merci de ta participation, MAIS tu pourrais mettre en évidence les différences entre ton code et le mien STP?
pas évident du tout là, et ecrit vraiment petit.
merci.
pour voir plus gros
selectionner le code touche ctrl appuyée puis tourner la roulette de la souris
|
|
Posté le 25/04/2012 à 16:58 |
| Dim nom As String
Dim couleur As Integer
'procédure de lancement
Public Sub test()
creerOnglet "Paul", 3
End Sub
Public Sub creerOnglet(nom, couleur)
Sheets.Add Worksheets(1)
Sheets(1).Name = nom
Supprimé activeworkbook Sheets(nom).Tab.ColorIndex = couleur
Code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf
Code = Code & "Dim c As Range" & vbCrLf
Code = Code & "For Each c In Target" & vbCrLf
Code = Code & " Sheets(" & Chr$(34) & nom & Chr$(34) & ").Range(""H"" & c.Row).Select" & vbCrLf
Code = Code & " Selection.FormatConditions.Delete" & vbCrLf
Code = Code & " Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:=Sheets(""DATA"").Range(""L16"").Value" & vbCrLf
Code = Code & " Selection.FormatConditions(1).Interior.ColorIndex = 3" & vbCrLf
Code = Code & "Next c" & vbCrLf
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(Sheets(nom).CodeName).CodeModule
.InsertLines .CountOfLines + 1, Code
End With
End Sub |
|
Posté le 26/04/2012 à 09:06 |
Petit astucien
| ah ben voilà! 
merci.
ok je vais voir ça, mais sans vendre la charrue avant la peau des ours, à priori, des globales + une concaténation de chaines différente en devraient pas être si signficatives.
car précision (pour moi CT clair, mais desfois que...):
-> l'erreur que je signale & qui pose problème est générée par la ligne de code fluotée -> ce n'est pas le montage du code qui pose problème, c'est bien l'association à l'onglet, puisque je répète que physiquement l'onglet "nom" est bien crée, je le vois dans mon classeur
de plus, selon les versions (2003 pour moi) il est possible qu'il faille activer Menu Outils -> Macro -> Sécurité -> Onglets Sources fiables -> Cocher "Faire confiance au projet Visual Basic.
mais je vais tester malgré tout et je dirai ce qu'il en est.
@+ |
|
Posté le 26/04/2012 à 09:57 |
Petit astucien
| ok, ok... bon, sur ce coup j'aurais préféré me tromper, mais effectivement ça ne change rien! 
en tout cas chez moi... |
|
Posté le 26/04/2012 à 18:35 |
| -> l'erreur que je signale & qui pose problème est générée par la ligne de code fluotée
non cette ligne ne cause aucun problème |
|
Posté le 26/04/2012 à 23:03 |
| Salut le forum
Code tester sous Excel 2003 sans aucune erreur.
Option Explicit
Public Sub test() creerOnglet "Paul", 3 End Sub
Sub creerOnglet(ByVal Nom As String, ByVal Couleur As Integer) Dim Code As String
Sheets.Add Worksheets(1) Sheets(1).Name = Nom ActiveWorkbook.Sheets(Nom).Tab.ColorIndex = Couleur
Code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf Code = Code & "Dim c As Range" & vbCrLf Code = Code & "For Each c In Target" & vbCrLf Code = Code & " Sheets(""" & Nom & """).Range(""H"" & c.Row).Select" & vbCrLf Code = Code & " Selection.FormatConditions.Delete" & vbCrLf Code = Code & " Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:=Sheets(""DATA"").Range(""L16"").Value" & vbCrLf Code = Code & " Selection.FormatConditions(1).Interior.ColorIndex = 3" & vbCrLf Code = Code & "Next c" & vbCrLf Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(Sheets(Nom).CodeName).CodeModule .InsertLines .CountOfLines + 1, Code End With
End Sub
Le fichier : Dry007.xls
Mytå Modifié par Mytå le 26/04/2012 23:55 |
|
Posté le 27/04/2012 à 18:12 |
| |
|
Posté le 27/04/2012 à 23:34 |
| Re le forum
Merci Gilbert, car Dry007 passe vraiment en coup de vent pour les remerciements.
«RESOLU (27/04/2012 à 08:56)»
Mytå |
|