Macro ne marche que si l'editeur de macro est ouvert ?
Bonjour,
Je m'arrache les cheveux avec mon code qui fonctionne à chaque fois en mode debug pas à pas mais pas en automatique.
ce qu'elle fait : on ouvre un fichier, elle compte le nombre d'onglet, "enregistre" le name et code name de chaque feuille pour pouvoir coller une macro dans chaques onglets.
en mode automatique, le CodeName des feuilles est "vide" (d'ou l'erreur qd je colle la macro) alors qu'en pas à pas celà fonctionne !???
( NOTA, il n'y a que le Codename des feuilles qui est vide, le nom des onglets est lui bien documenté).
D'avance merci beaucoup pour votre aide
ci dessous le code :
Public Sub CommandButton1_Click()
Dim code, nom, nomf, fichier, cdf, nomfirstonglet As String
Dim nbf, i As Integer
CommandButton35.BackColor = &HFF
fichier = Application.GetOpenFilename
If fichier = "Faux" Then
Exit Sub
End If
Workbooks.Open fichier
nom = ActiveWorkbook.Path
Range("L1") = nom
nom = ActiveWorkbook.Name
Range("L2") = nom
Workbooks(nom).Activate
nbf = Workbooks(nom).Sheets.Count
nomfirstonglet = Workbooks(nom).Worksheets(1).Name
' ecriture nom onglet et codename pour verification
For i = 1 To nbf
nomf = Workbooks(nom).Worksheets(i).Name
cdf = Workbooks(nom).Worksheets(i).CodeName
Cells(4 + i, 12) = "f " & nomf
Cells(4 + i, 13) = "c " & cdf
Next i
For i = 1 To nbf
nomf = Workbooks(nom).Worksheets(i).Name
Workbooks(nom).Worksheets(nomf).Activate
code = "public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbCrLf
code = code & "dim a, b as integer" & vbCrLf
code = code & "a=workbooks(""synthese.xls"").worksheets(""feuil1"").x" & vbCrLf
code = code & "b=workbooks(""synthese.xls"").worksheets(""feuil1"").y" & vbCrLf
code = code & "Workbooks(""synthese .xls"").Sheets(""Feuil1"").cells(a,b) = Target.Value" & vbCrLf
code = code & "Cancel = True" & vbCrLf
code = code & "ActiveWorkbook.Saved = True" & vbCrLf
code = code & "windows(""synthese.xls"").activate" & vbCrLf
code = code & "End Sub" & vbCrLf
cdf = Workbooks(nom).Worksheets(i).CodeName
With ActiveWorkbook.VBProject.VBComponents(cdf).CodeModule
.insertlines .CountOfLines + 1, code
End With
Next i
Worksheets(nomfirstonglet).Activate
Windows("synthese.xls").Activate
ActiveWorkbook.Saved = True
End Sub
Je continue a creuser pour essayer de faire fonctionner cette macro. J'ai eu l'idée de forcer l'ecriture des codename des feuilles avec ceci :
ActiveWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = cdf
mais j'ai toujours la même erreur : erreur d'execution 9 l'indice n'appartient pas à la selection.
(nota celà fonctionne toujours en pas à pas....j'enrage....)
Autre possibilité mais je ne sais pas faire, est il possible d'inscrire le code dans les differentes feuilles avec un autre code que celui ci puisque j'arrive a connaitre le nom des onglets :
acteul : With ActiveWorkbook.VBProject.VBComponents(cdf).CodeModule
.insertlines .CountOfLines + 1, code
J'ai essayé çà mais celà ne fonctionne pas (erreur 424 : objet requis)
with Activeworksheet.vbproject.vbcomponents(cdf).codemodule
Merci a vous
Bonjour,
Je vais peut-être dire une bétise mais le codename c'est "FeuilX", vu que ta boucle va de i= 1 à NBF, ton codename sera :
cdf = "Feuil" & i
Enfin ça me parait trop simple pour être ça ton problème...
Cordialement,
Bonjour
merci pour ta reponse, en effet elle pourrait marcher sauf que je dois "traiter" des fichiers de toutes les provenances et malheureusement pour moi, il y en a ou le premier code name est Feuil4.. puis Feuil5 etc !!!!!
Ce que je ne comprends pas c'est pourquoi elle fonctionne qu'en pas à pas. je deprime.........................
merci a toi pour cette idée aurait pu marcher....
fred
EN FAIT ELLE FONCTIONNE EN AUTOMATIQUE QUAND L'EDITEUR DE MACRO EST OUVERT (ALT F11).
Quelqu'un a t'il une idée d'ou celà pourrait venir ???
merci
fred
Apparrement, c'est Excel qui fonctionne comme ça, pour contourner la chose :
1- mets ce code dans un module :
Function WsCodeName$(Ws As Object)
On Error Resume Next
With Application.VBE.MainWindow
WsCodeName = Ws.CodeName
End With
End FunctionPuis change la partie de ton code :
For i = 1 To nbf
nomf = Workbooks(nom).Worksheets(i).Name
cdf = Workbooks(nom).Worksheets(i).CodeName
Cells(4 + i, 12) = "f " & nomf
Cells(4 + i, 13) = "c " & cdf
Next ipar
For i = 1 To nbf
nomf = Workbooks(nom).Worksheets(i).Name
cdf = WsCodeName$(Workbooks(nom).Worksheets(nomf))
Cells(4 + i, 12) = "f " & nomf
Cells(4 + i, 13) = "c " & cdf
Next iMême avec l'éditeur VBE de fermé, ça à l'air de marcher.
Le code est de Ti de chez Excel Downloads (rendons à Cesar.... ^^)
Cordialement,
Bonjour
Tester sur un fichier pas de problème
peux-tu joindre ton fichier afin de tester ?
Bonjour zirak et banzai64
Sincerement, un super merci a tous
fred